私はubuntu xenial 16.04を実行しています
仮想プライベートクラウドへの接続にopenvpnを使用しています。そのクラウドには独自のDNSサーバーがあります(ローカルルートと同様に、自宅またはオフィス)。
VPNに接続すると、そのネットワーク内のすべてのIPを使用できますが、ホスト名でIPにアクセスできません。その理由は単純です。resolv.confファイルには、まだローカルオフィスのネームサーバーが表示されています。手動でresolv.confを上書きして、正しいネームサーバーを設定すると、問題はありません。
では、VPNへの接続時にresolv.confを自動的に再構成するにはどうすればよいですか?
システムイベントにフックしてスクリプトを実行できますか?
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
にあります。
これが私が思いついた解決策です:トンネルが稼働しているときにスクリプトを実行できるスイッチがあります。スイッチを使用して、本質的に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のチケットを繰り返しカットしました