クライアント構成のみを使用してクライアントにDNSサーバーを設定するにはどうすればよいですか。私のクライアントはWindowsマシンであり、クライアントが接続したときにDNSサーバーを変更し、VPNから切断したときに元の構成に戻したいと考えています。
これまでに見つけたすべての情報は、サーバーの構成を使用してDNS構成をクライアントにプッシュすることに関するものですが、この場合はサーバー構成を変更できず、現在VPNに接続するたびに手動で変更しています。接続の期間中にローカルマシンのDNSサーバーを設定するためのopenvpn configオプションはすばらしいでしょう。
これを行うには、次のようなバッチスクリプトを使用できます。ホームDNSサーバーが1.1.1.1および2.2.2.2で、VPN DNSサーバーが8.8.8.8 9.9.9.9であると想定しています。
vpn-connect.bat:
netsh interface ip set dns "Local Area Connection" static 8.8.8.8
netsh interface ip add dns "Local Area Connection" 9.9.9.9
vpn-disconnect.bat
netsh interface ip set dns "Local Area Connection" static 1.1.1.1
netsh interface ip add dns "Local Area Connection" 2.2.2.2
これらのスクリプトに接続と切断の方法を含めるつもりでしたが、OpenVPNにはコマンドラインから切断するオプションが表示されません。接続を自動化したい場合、これはうまくいくはずです:
C:\Program Files\bin\openvpn.exe C:\Program Files\conf\client.ovpn
以下をクライアント構成ファイルに追加できます。
dhcp-option DNS <dns_server_ip_address>
サーバー側では次のようになります:
Push "dhcp-option DNS <dns_server_ip_address>"
両側でdhcp-option
を使用しているようです。 route
でも同じことができます。
どうやら、少なくともWindows 2000/XP/7を含めて、Windowsの不完全なバインド順序に問題があるようです。これにより、Windows OpenVPNクライアントは、VPNアダプターの設定ではなく、デフォルトのネットワークアダプターのDNS設定を使用します。
これを修正するには、VPN TUNまたはTAPデバイスをバインド順でローカルネットワークアダプターの上に配置する必要があります。
ipconfig
からの出力を見て、VPNデバイスを特定します。私にとってこれは「ローカルエリア接続2」でした。このアダプターのIPアドレスを覚えておいてください。HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces
の下のキーを見つけます。このアダプタのGUIDを覚えておいてください。HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Linkage
に移動し、Bind
をダブルクリックします。これには、アダプターのGUIDのリストが含まれます。 VPNデバイスのGUID=に対応する行をカットアンドペーストしてリストの上部に貼り付け、リストを保存します。これにより、VPNデバイスのDNSエントリが使用されます(VPN接続がアクティブな間のみ)。 @brunoqcの回答に応じて設定できます。 DNSクエリがリークしていないことを確認するには、openvpnオプションblock-outside-dns
も追加する必要があります。
この回答は この非常に便利なブログ投稿 に基づいています。
以下の2つのいずれかに加えて:
dhcp-option DNS <dns_server_ip_address> (add to client config)
または
Push "dhcp-option DNS <dns_server_ip_address>" (add to server config)
これらをクライアント構成にも追加して、Windowsに構成されたDNSを使用するように強制します。
register-dns
block-outside-dns
1つ目は、DHCPから受信した他のどのDNSサーバーよりも構成されたDNSサーバーを優先するようにWindowsに強制します。 2番目は、構成されたDNSサーバー以外のDNSサーバーへのDNSリークを防止します。