web-dev-qa-db-ja.com

VPN接続で新しいネームサーバーを自動的にフェッチする方法

私はubuntu xenial 16.04を実行しています

仮想プライベートクラウドへの接続にopenvpnを使用しています。そのクラウドには独自のDNSサーバーがあります(ローカルルートと同様に、自宅またはオフィス)。

VPNに接続すると、そのネットワーク内のすべてのIPを使用できますが、ホスト名でIPにアクセスできません。その理由は単純です。resolv.confファイルには、まだローカルオフィスのネームサーバーが表示されています。手動でresolv.confを上書きして、正しいネームサーバーを設定すると、問題はありません。

では、VPNへの接続時にresolv.confを自動的に再構成するにはどうすればよいですか?

システムイベントにフックしてスクリプトを実行できますか?

11

OpenVPNパッケージには、/etc/openvpn/update-resolv-confにこのためのスクリプトがあります。あなたはそれを設定する必要があります:

script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf

これにより、OpenVPNピア/サーバーから渡されたdhcp-option DNSオプションからDNSサーバーアドレスが取得され、それに応じてresolvconfが構成されます。 dhcp-option DOMAINも処理します。

ただし、ネームサーバーのリストを上書きするのではなく、既存のネームサーバーのリストの前にそれらのネームサーバーを追加するため、完全ではありません。 openresolvを使用している場合は、-xを使用して、DNS構成を事前に設定する代わりに上書きできます。


systemd-resolvedを使用している場合は、resolvconfの代わりに/etc/openvpn/update-systemd-resolvedにフックするsystemd-revolvedを使用できます。

script-security 2 
up /etc/openvpn/update-systemd-resolved
down /etc/openvpn/update-systemd-resolved
down-pre

Debianでは、このスクリプトはopenvpn-systemd-resolvedにあります。

8
ysdx

これが私が思いついた解決策です:トンネルが稼働しているときにスクリプトを実行できるスイッチがあります。スイッチを使用して、本質的にresolv.confファイルを正しいとわかっているファイルで上書きします。それは完全なハックだと私は知っています。

Sudo openvpn --up reset-dns.sh --client client.ovpn

スクリプト(reset-dns):

#!/bin/bash
cp ~/resolv.conf /etc/resolv.conf

また、「OMG!トンネルをrootとして実行している!」他の方法では実行されません。 DNSハックの前でも。

私は間違いなく、より良い方法に開かれています。 ubuntuのネットワークマネージャーは機能しません。私はこれでubuntuのチケットを繰り返しカットしました

0