web-dev-qa-db-ja.com

VPN接続が成功した後、/ etc / resolv.confからデフォルトゲートウェイを削除することは可能ですか?

NetworkManager(nm-pptp-ppp-plugin)を介してUbuntu 16.04.3 LTSでPPTP VPN接続を設定しましたが、動作します。私の構成:

  1. VPN
    • ゲートウェイ
    • ユーザー名
    • パスワード
    • 詳細設定-PPTP詳細設定オプションにいくつかのオプションを設定
  2. IPv4設定
    • メソッド自動(VPN)アドレスのみ
    • DNSサーバー:192.168.1.1(VPNのデフォルトゲートウェイの内部IPアドレス)
  3. IPv6 Settins
    • メソッド無視

#dns=dnsmasq/etc/NetworkManager/NetworkManager.confをコメントアウトし、Sudo dpkg-reconfigure resolvconfSudo resolvconf -uを実行しました。

VPN接続がない場合、/etc/resolv.confには次の行が含まれます。

nameserver 192.168.3.1

ここで、192.168.3.1はルーターのIPです。
その後、VPN接続/etc/resolv.confは次のように変更されます。

nameserver 192.168.1.1
nameserver 192.168.3.1

しかし、私が理解できる限り、それは192.168.1.1のみを含むべきです。

/etc/resolv.confからルーターのIP(192.168.3.1)をプログラムで削除することはできますか?
つまり、 NetworkManagerディスパッチャー などです。

現在の構成では DNSリークの問題 が発生していないようです。

追伸私の質問は以前に議論された可能性があることを理解していますが、重複の可能性は私のニーズに合いません。

アップデート1私の他の16.04ラップトップでは、systemd-resolved.serviceを無効にする必要もありました。

Sudo systemctl stop systemd-resolved.service
Sudo systemctl disable systemd-resolved.service
1
N0rbert

Update 2単純で単純なダーティディスパッチャを作成し、/etc/NetworkManager/dispatcher.d/03vpnに配置しました。

#!/bin/sh -e
RESOLV_CONF=`readlink /etc/resolv.conf`
ROUTER_IP="nameserver 192.168.3.1"

logger -t DNS-antileak "start"
# disable local router IP in /etc/resolv.conf
if [ "$2" = "vpn-up" ]; then
    sed -i "s/$ROUTER_IP/#$ROUTER_IP/g" $RESOLV_CONF
    logger -t DNS-antileak "disabled $ROUTER_IP on vpn-up"
fi 

if [ "$2" = "vpn-down" ]; then
   sed -i "s/#$ROUTER_IP/$ROUTER_IP/g" $RESOLV_CONF
    logger -t DNS-antileak "enabled $ROUTER_IP on vpn-down"
fi 
logger -t DNS-antileak "end"

exit 0

でアクティベートできます

Sudo chown root:root /etc/NetworkManager/dispatcher.d/03vpn
Sudo chmod 755 /etc/NetworkManager/dispatcher.d/03vpn

OpenVPNおよびPPTP接続でテストしました。

また、他のDNSリークテストを見つけました: Whoer および WhatLeaks

1
N0rbert

これはNetworkManagerのよく知られたバグであり、具体的には #121111 です。 Ubuntu 13.04から16.04まで戻り、より悪い範囲でUbuntu 16.10に戻ります。

現在の構成ではDNSリークの問題はないようです。

その後、自分自身をかなり幸運だと考えてください。 :)ほとんどのユーザー(私を含む)は、深刻なDNSリークを経験し、それらを解決するためにさまざまなアプローチを試みました。

バグレポートで提案されているいくつかのアプローチを以下に示します(要約):

コメント#22 by Mac Bassett

このNetworkManagerファイルのバックアップコピーを作成します。

Sudo cp /usr/lib/NetworkManager/nm-openvpn-service-openvpn-helper /usr/lib/NetworkManager/nm-openvpn-service-openvpn-helper.orig

ファイルに次の3行を追加します。

#!/bin/bash
/etc/openvpn/update-resolv-conf $@
/usr/lib/NetworkManager/nm-openvpn-service-openvpn-helper.orig $@

次に:

Sudo chmod +x /usr/lib/NetworkManager/nm-openvpn-service-openvpn-helper

警告:VPNを切断した後、次のコマンドを実行する必要があります。

Sudo script_type=down dev=tun0 /etc/openvpn/update-resolv-conf

自分によるコメント#27と#29

(NMを介して)VPN接続を編集し、たとえばGoogleサーバーを使用して静的DNSをセットアップします。

8.8.8.8, 8.8.4.4

この方法では、DNS要求は外部IPを介して送信されるため、VPNを使用してルーティングされます。

次に、これらの静的DNSサーバーを使用するようにワイヤレス接続を設定します。

コメント#31 by DaveHenson

コマンドラインからopenvpnを実行します。


(...ここでは説明しない他の面倒な解決策...)


コメント#81 byÇağatayYüksel

この構成ファイルを削除します。

Sudo rm -rf /etc/resolv.conf

この行を[main]/etc/NetworkManager/NetworkManager.confセクションに追加します。

dns=dnsmasq

dnsmasqパッケージがインストールされている場合は、dnsmasqサービスが有効になっていないことを確認する必要があります。有効になっていないと機能しません。また、再起動する必要があります。

実際のソリューション

このバグ buntu 17.04で修正済み 。システムでランダムなパッチを試すよりも、単にアップグレードする方がよいでしょう。 :)

2