
職場のいくつかの Ubuntu 20.04 クライアントを、新しいサーバー プロバイダーが提供する新しい OpenVPN サーバーに接続しようとしています。
目標は、特定のトラフィックのみをトンネルにルーティングし (対応するルートは OpenVPN サーバーによってプッシュされます)、クライアントが OpenVPN サーバーによってプッシュされた DNS サーバーも使用するようにすることです。
これは、Windows 10 クライアントと OpenVPN GUI 2.5 ですぐに使用できます。openvpn
ターミナルから次のように (2.4.7) を使用しても同様に機能します。sudo openvpn --config config.ovpn
また、次のクライアント構成ファイルも使用できますconfig.ovpn
。
dev tun
tun-ipv6
persist-tun
persist-key
cipher AES-128-GCM
ncp-ciphers AES-128-GCM
auth SHA256
tls-client
client
resolv-retry infinite
remote <ipadressOfProvider> <port> udp4
verify-x509-name "<name>" name
auth-user-pass
remote-cert-tls server
compress
# The following is added only in the config for Ubuntu 20.04
dhcp-option DOMAIN <domainToResolveWithRemoteSiteDNS>
script-security 2
up /etc/openvpn/update-systemd-resolved
up-restart
down /etc/openvpn/update-systemd-resolved
down-pre
問題は、network-manager-openvpn
(1.8.12) と上記の設定ファイルを使用すると発生します。接続が確立され、プッシュされた DNS サーバーは systemd-resolved で正しく更新されます (openvpn 設定に追加のスクリプトがなくてもup
) down
。
しかし、全てトラフィックは、パブリックトラフィックであっても、インターフェースにルーティングされますtun0
。その結果、私はできる内部ドメイン名を使用してもリモートサイトのリソースにアクセスできますが、アクセスできませんOpenVPN サブネットにはインターネットへの直接アクセスがないため、インターネットに接続できません。
オプションの変更この接続はネットワーク上のリソースにのみ使用してくださいipv4.neverdefault
ネットワーク マネージャーの openvpn config (で表示されるオプションに対応nmcli c show config
) は、ルーティングの問題を解決します。これで、プッシュされたルートに関するトラフィックのみがトンネルに送られるようになります。ただし、プッシュされた DNS サーバーが に適用されることも防止されます/run/systemd/resolve/resolv.conf
。
今までプッシュされたDNSを受け入れるオプションは見つかりませんでしたそしてネットワーク マネージャーと同時に、プッシュされたルートに関係するトラフィックのみをルーティングします。
これまでのところ、興味深い観察がいくつかあります:
1. ルート
Network Manager は、ipv4.neverdefault=no
プッシュされたルートに加えて、より低いメトリックを持つ 2 番目のデフォルト ゲートウェイを作成します。
$ ip route
default via 10.*.*.* dev tun0 proto static metric 50
default via 192.168.***.** dev wlp3s0 proto dhcp metric 600
10.*.*.*/24 dev tun0 proto kernel scope link src 10.*.*.* metric 50
158.***.**.** via 192.168.***.** dev wlp3s0 proto static metric 600
169.254.0.0/16 dev wlp3s0 scope link metric 1000
172.**.***.*/24 via 10.*.*.* dev tun0 proto static metric 50
192.168.*.*/24 via 10.*.*.* dev tun0 proto static metric 50
192.168.*.*/24 via 10.*.*.* dev tun0 proto static metric 50
192.168.***.*/24 dev wlp3s0 proto kernel scope link src 192.168.***.*** metric 600
192.168.***.** dev wlp3s0 proto static scope link metric 600
Network Manager では、ipv4.neverdefault=yes
プッシュされたルートに加えて 2 番目のデフォルト ゲートウェイは作成されません (上記と同じ、最初の行なし)。
openvpn
ターミナルでは、プッシュされたルートに加えてセカンダリデフォルトゲートウェイは作成されません。
default via 192.168.***.** dev wlp3s0 proto dhcp metric 600
10.*.*.*/24 dev tun0 proto kernel scope link src 10.*.*.*
169.254.0.0/16 dev wlp3s0 scope link metric 1000
172.**.***.*/24 via 10.*.*.* dev tun0
192.168.*.*/24 via 10.*.*.* dev tun0
192.168.*.*/24 via 10.*.*.* dev tun0
192.168.***.*/24 dev wlp3s0 proto kernel scope link src 192.168.***.*** metric 600
2. DNSサーバー
ネットワーク マネージャーはipv4.neverdefault=no
上書きします/run/systemd/resolve/resolv.conf
:
nameserver 172.**.***.**
Network Manager ではipv4.neverdefault=yes
次のことはできません:
nameserver 192.168.***.**
nameserver ****:***:****:****::**
openvpn
ターミナル内追加既存の DNS サーバーに次の定義に従ってリモート DNS サーバーが提供するドメイン名を追加しますconfig.ovpn
。
nameserver 192.168.***.**
nameserver ****:***:****:****::**
nameserver 172.**.***.***
search <domainToResolveWithRemoteSiteDNS>
openvpn ターミナル クライアントと同じように処理するために、ネットワーク マネージャーでどのオプションを変更すればよいかご存じの場合はconfig.ovpn
、ご意見をお聞かせください。
ありがとう、ヴァレンティン
答え1
いくつかの追加の「調査」(主に試行錯誤)の後、プッシュされたルートのトラフィックのみをルーティングしながら、ネットワークマネージャーを介してリモートサイトに正常に接続できました。そしてプッシュされた DNS サーバーを使用します。
ネットワーク マネージャーで VPN 接続を次のように設定します
neverdefault
(OP で既に説明したとおり):nmcli c modify <connectionname> ipv4.never-default yes
dns-search
リモート サイトの内部ドメインへの接続を設定します。nmcli c modify <connectionname> ipv4.dns-search <domainname>
このオプションにより、ネットワークマネージャは何らかの方法でDNSサーバーをrun/systemd/resolve/resolv.conf
再度追加します(追加ipv4.never-default
アクティブであるにもかかわらず、上書きされません。
あるいは、<domainname>
を に置き換えることもできます。~.
これにより が上書きされrun/systemd/resolve/resolv.conf
、プッシュされた DNS サーバーがすべての DNS 要求に応答する唯一のサーバーになります。
答え2
@Valentin さん、ありがとうございます。
あなたの解決策はまさにその通りです。
私の場合、Ubuntu 20.04 クライアントを使用して 20.04 サーバーに接続し、gnome-network-manager openvpn オプションも使用していましたが、dns-search を設定する必要はなく、never-default オプションのみを設定する必要がありました。
フォルダー/ネットワーク (samba) 接続を可能にするには、サーバーの smb.conf ファイルの「Networking」ディレクティブの下にある「interfaces」オプションを次のように編集する必要もありました。
interfaces = 127.0.0.0/8 eth0
interfaces = 127.0.0.0/8 enp2s0
interfaces = X.X.X.X/XX enp2s0
最後の行が追加されました。XXXX/XX は、同じ openvpn サーバーによって割り当てられる IP アドレス範囲の CIDR 表記です。