Ubuntu 20.04 Networkmanager OpenVPN: プッシュされた DNS を受け入れますが、すべてのトラフィックを tun インターフェースにルーティングしません

Ubuntu 20.04 Networkmanager OpenVPN: プッシュされた DNS を受け入れますが、すべてのトラフィックを tun インターフェースにルーティングしません

職場のいくつかの 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 サーバーを使用します。

  1. ネットワーク マネージャーで VPN 接続を次のように設定しますneverdefault(OP で既に説明したとおり):

    nmcli c modify <connectionname> ipv4.never-default yes

  2. 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 表記です。

関連情報