web-dev-qa-db-ja.com

network-managerを使用してvpnのsplit-dnをセットアップする方法

ローカルethネットワークとVPN接続の両方を備えた14.04デスクトップマシンでスプリットDNS構成を作成します。つまり、vpnを介してアクセスされるアドレス範囲のDNSルックアップを、その特定のvpn接続用に構成された(プライベート)DNSサーバーに送信する必要があります。ローカルネット経由で提供される他のアドレスは、異なる(パブリック)DNSサーバーを使用する必要があります。

https://www.stgraber.org/2012/02/24/dns-in-ubuntu-12-04/ は、ローカルのdnsmasqリゾルバがあるため、これが簡単に行えることを示唆しています。見積もり:

大きな利点は、VPNに接続する場合、すべてのDNSトラフィックを過去のようにVPN経由でルーティングするのではなく、そのVPNによってアナウンスされたサブネットとドメインに関連するDNSクエリのみを送信することです。これは、過去にすべてが遅くなる高遅延VPNリンクにとって特に興味深いものです。

しかし、私はこの仕事をする方法を理解することはできません! VPNが非アクティブな場合、network-managerはdnsmasqにローカルのパブリックDNSサーバーをアップストリームサーバーとして使用するよう指示します(これは良いことです)。 VPN接続をアクティブにした場合、network-managerはdnsmasqにアップストリームDNSサーバーをvpn接続用に構成されたプライベートサーバーに変更するように指示します。そして今、私のすべてのローカルトラフィックはそのDNS検索のためにVPNに行きます(これは悪いです!)。

「実際の」dnsmasqセットアップがあれば、dnsmasq.confで特定のルックアップを特定のdnsサーバーにルーティングするように指示できます。しかし、Ubuntuデスクトップで提供されるカットダウンのdnsmasq/network-managerセットアップでは、これはどのように機能しますか?

私は1つのオプションは完全なdnsmasqをインストールするだけだと思いますが、これは2つの別々の場所で設定の詳細を維持する必要があることを意味します。助言がありますか?

2
geo

NetworkManagerが実行して異なるDNSサーバーを使用するD-Bus制御のdnsmasqを取得するには、次のオプションがあります(例では明らかにドメインとIPアドレスを調整します):

  • 必要なサブネットのDNSサーバーを設定するファイルを/etc/NetworkManager/dnsmasq.dに追加します。myvpn-server.confにはserver=/myvpn.domain.com/10.8.4.9を含めることができます。これは、VPNに接続されていない場合でもdnsmasqによって常に尊重されます。その場合、これらのドメインのクエリはタイムアウトするはずです。欠点は、IPアドレスを静的に指定する必要があることです。利点はシンプルです
  • D-Busを使用してdnsmasqと直接対話し、Sudo dbus-send --system --print-reply --dest=org.freedesktop.NetworkManager.dnsmasq /uk/org/thekelleys/dnsmasq uk.org.thekelleys.SetDomainServers "array:string:192.168.0.1,/myvpn.domain.com/10.8.4.9"などの形式でサーバーを更新するよう指示します。これは、VPNの接続時にスクリプト化できます。 D-Bus経由で、または192.168.0.1を使用して、既存のDNSサーバー(この例ではnm-cli)を検索する必要があります。
  • D-Busを使用してNetwork Manager自体と通信し、サーバーを更新するように指示します。 ここに例があります Pythonを使用してこれを行うと、現在のサーバーを含めるために多少の作業が必要になります。

私は最初のオプションを使用していますが、他の2つの予備バージョンのみを試しました

2
David Fraser

nm-connection-editorアプリケーションの[IPv4]および[IPv6]タブで[DNS検索ドメイン]および[追加のDNSサーバー]フィールドを探している可能性があります。

そこに会社のドメインとDNSサーバーのIPを入力するだけです。

0
nextloop

これは、おそらくサーバー側の構成の問題です。 VPNサーバーは、解決できるドメインのみをプッシュする必要があります。

たとえば、openvpnサーバーを使用する場合、ユーザー構成は次のようになります。

ifconfig-Push 172.16.0.51 255.255.255.0
Push "route 172.16.1.0 255.255.255.0 172.16.0.1"
Push "route 192.168.2.0 255.255.255.0 172.16.0.6"
Push "dhcp-option DNS 172.16.0.1"
Push "dhcp-option DOMAIN some.of.your.domains"
Push "dhcp-option DOMAIN another.domain"

これにより、クライアントは、サーバーがここで指定されたドメインのみを解決できることを認識します。

Networkmanagerを使用する場合、dnsmasqの設定は非常に最小限に抑えることができます。

domain-needed
interface=lo
bind-interfaces

もう1つのよくある落とし穴:「ネットワーク上のリソースにのみ接続を使用する」ように、networkmanagerでvpn接続のIP設定を構成する必要があります(次のように https://brmlab.cz/_media/project/warzone/ nv-routes.png

そうでない場合、ルーティングは常に「実際の」インターフェースを介してvpn接続を使用します。メトリックは通常、networkmanagerによって正しく設定されます(vpnのメトリックは基礎となるネットワークよりも高い)

0
Till Schäfer