デュアルスタックシステムでNetwork Managerを使用してOpenVPNサーバーに接続するときにIPv6を無効にする方法は?


20

デュアルスタック上のOpenVPNネットワークマネージャープラグイン(IPv4とIPv6の両方の接続用に構成されていることを意味します)Ubuntu 13.10でOpenVPNクライアントを使用して、VPN(リダイレクトゲートウェイ)を介してすべてのトラフィックをリダイレクトしています。通常は正常に機能します。

ただし、システムでIPv6が優先されるという事実により、VPNは「リーク」し、IPv6経由でも利用可能なサイト(GoogleやWikipediaなど)に接続する場合、ブラウザは直接接続します。

1つの解決策は、IPv6接続を提供するようにOpenVPNサーバーを構成することです。OpenVPNでは可能ですが、Network Managerのプラグインは現在サポートしていません。

VPNを介したIPv6接続は厳密に必要ではないため、OpenVPNサーバーに接続するときにクライアントでIPv6を無効にするだけです。出来ますか?もしそうなら、どうすればいいですか?


1
VPNもIPv6トラフィックを伝送していませんか?
マイケルハンプトン14年


私のVPNはIPv6トラフィックを運ぶことができますが、Network Managerは、私が知る限り、現在OpenVPNのIPv6構成をサポートしていません。
ダムターミナル14年

1
記録のために、VPNプロバイダーがこのようにリークしている場合は、新しいプロバイダーが必要です。これを正しく行う人はたくさんいます。IPv6はなくなりません。IPv6を無効にしても、インターネットの一部から切断されるだけです。
マイケルハンプトン

1
@MichaelHampton悲しいことに、それは私のサーバーです。この場合、私はプロバイダーです。IPv6をサポートしていますが、/ 64が1つしか付属していないため、最初にスプライスする必要がありますが、これは少し苦痛です。さらに重要なこと(当時、私はチェックしていません)が、ネットワークマネージャーがIPv6対応のOpenVPN接続の処理に問題を抱えていました(ただし、IPv6 over VPNは、現在使用しているタップおよびブリッジネットワークのセットアップで動作します)。
ダムターミナル

回答:


15

これをブートローダーのカーネル行に追加して、IPv6を完全に無効にします。

ipv6.disable=1

Grubを使用している場合(独自のブートローダーをインストールしていない場合、Grubを使用している場合)、カーネル行は次のようになります。

linux /boot/vmlinuz-linux root=UUID=978e3e81-8048-4ae1-8a06-aa727458e8ff ipv6.disable=1

カーネル行に何かを追加するための推奨されるアプローチGRUB_CMDLINE_LINUX_DEFAULTは、/etc/default/grubファイル内の変数に目的のカーネルパラメーターを追加することです。

GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1"

それをに追加したら/etc/default/grub、次のコマンドを実行してを再生成しますgrub.cfg

sudo grub-mkconfig -o /boot/grub/grub.cfg

または、ipv6.disable_ipv6=1代わりに追加すると、IPv6スタックは機能し続けますが、IPv6アドレスはネットワークデバイスに割り当てられません。

または

sysctlを介してIPv6を無効にするには、次を/etc/sysctl.confファイルに配置します。

net.ipv6.conf.all.disable_ipv6 = 1

/etc/hostsファイル内のIPv6ホストをコメントアウトすることを忘れないでください。

#::1        localhost.localdomain   localhost

注意

sysctlメソッドには再起動が必要場合があり、カーネルラインアプローチには必ず再起動が必要です。

または

ipv6 を一時的に無効にするには:

sysctl -w net.ipv6.conf.all.disable_ipv6 = 1

するために、一時的にそれを有効にします。

sysctl -w net.ipv6.conf.all.disable_ipv6 = 0

したがって、特定の条件でipv6を無効にする必要がある場合は、次の行に沿ってbashスクリプトを作成します。

#!/bin/bash
ipv6_disabled="$(sysctl net.ipv6.conf.all.disable_ipv6 | awk '{print $NF}')"
if (connected_to_vpn &> /dev/null); then
  (($ipv6_disabled)) || sysctl -w net.ipv6.conf.all.disable_ipv6=1
else
  (($ipv6_disabled)) && sysctl -w net.ipv6.conf.all.disable_ipv6=0
fi

注意

/etc/hosts前の方法でお勧めしたように、この方法でもファイル内のipv6ホストを無効にする必要があるかもしれません。


5
はいはい。しかし、Network Managerを使用してVPNに接続するときは、IPv6を無効にします。システムで完全に強制終了するのではありません。たぶん私はそれをもっと明確にすべきだった。
ダムターミナル14年

@DamnTerminal、つまり、VPNに接続しているときにのみ無効にするのは、VPNに接続しているときにのみ発生する限り、システム全体で無効にすることで問題ありません。
アレクセイマグラ14

@DamnTerminal回答を更新して、条件をチェックするbashスクリプトを使用してipv6を無効にする方法の例を含めました。NetworkManagerのコマンドラインインターフェイスを使用できnmcliます。VPNに接続されているかどうかを確認します。それが機能しない場合、その情報へのアクセスを提供するコマンドラインネットユーティリティがあると確信しています。
アレクセイマグラ14

なぜ下票なのか?
アレクセイマグラ

残念ながら、このソリューション(sysctl)はWiFiのIPv6を適切に再有効化しません。有効にするには、アクセスポイントに再接続する必要があります。
イゴールミクスキン

5

特定のNetwork Manager 接続のクライアントレベルでipv6を無効にするには、IPv6オプションipv6.methodを「無視」に設定します。

// SOP:固定IP 192.168.0.95を使用してイーサネットへのLAN接続を再作成します。``

nmcli connection delete lan-ethernet
nmcli connection add con-name lan-ethernet \
    ifname enp0s31f6 \
    type ethernet \
    ip4 192.168.0.95/24  gw4 192.168.0.1

nmcli connection modify lan-ethernet  ipv6.method "ignore"
nmcli connection modify lan-ethernet  ipv4.dns "8.8.8.8 8.8.4.4"
nmcli connection up lan-ethernet
sleep 1
nmcli device status
nmcli connection show
ifconfig enp0s31f6

``


1
残念ながら、VPN接続には効果がありません。
イゴールミクシキン

0

私はUbuntu 16.04.03 LTSで、PiVPNを介してPi-Holeサーバーに接続しています。

これは、Network Managerを介してVPNに接続するときにIPv6を自動的にオンおよびオフにするために行ったことです。

  1. でスクリプトを作成します/etc/NetworkManager/dispatcher.d

    $ sudo vi /etc/NetworkManager/dispatcher.d/99vpn-ipv6-switch
    
  2. 次のコンテンツをファイルに追加します(要件に合わせてコンテンツを変更します)。

    #!/bin/sh
    # Network Manager Dispatcher Hook:
    # enables/disables ipv6 on vpn-down/vpn-up respectively
    #
    # Copyright (c) 2017 ooknosi
    # Apache License 2.0
    
    # Args
    INTERFACE="$1"
    ACTION="$2"
    
    case $ACTION in
        vpn-up)
        # vpn connected; disable ipv6
        sysctl -w net.ipv6.conf.all.disable_ipv6=1
        ### UNCOMMENT AND EDIT BELOW IF NECESSARY
        ## add pi-hole nameserver
        #echo -n "nameserver 192.168.1.1" | /sbin/resolvconf -a "tun0.openvpn"
        ### UNCOMMENT AND EDIT ABOVE IF NECESSARY
        ;;
    
        vpn-down)
        # vpn disconnected; enable ipv6
        sysctl -w net.ipv6.conf.all.disable_ipv6=0
        ### UNCOMMENT AND EDIT BELOW IF NECESSARY
        ## remove pi-hole nameserver
        #/sbin/resolvconf -d "tun0.openvpn"
        ### UNCOMMENT AND EDIT ABOVE IF NECESSARY
        ;;
    esac
    
    exit 0
    
  3. スクリプトを実行可能にします。

    $ sudo chmod 755 /etc/NetworkManager/dispatcher.d/99vpn-ipv6-switch
    

それでおしまい。正しく更新dnsmasqできないバグがあるため、Pi-Hole DNSを手動で追加する必要resolv.confがありました。そのため、DNSがリークしている場合は、示されている行を変更します。


残念ながら、このソリューションはWiFiのIPv6を適切に再有効化しません。有効にするには、アクセスポイントに再接続する必要があります。
イゴールミクスキン

0

カーネルtcpスタックを変更するクライアントファイルでip6を無効にする(client_conf_file.ovpnを編集する)ことは、それほど煩わしくないと思います。

conf_file.ovpnを開き、次の行を追加します。

#disable ipv6
#https://community.openvpn.net/openvpn/ticket/849
pull-filter ignore "ifconfig-ipv6 "
pull-filter ignore "route-ipv6 "

私はそれを試してみた後、ipv6は消えます。

前。私が実行するip a |grep globalと、結果は次のとおりです。

    inet 192.168.43.39/24 brd 192.168.43.255 scope global dynamic noprefixroute wlan0
    inet 10.8.0.6/24 brd 10.8.0.255 scope global tun0
    inet6 2a00:1630:66:16::1004/64 scope global

後。私が実行するip a |grep globalと、結果は次のとおりです。

    inet 192.168.1.14/24 brd 192.168.1.255 scope global dynamic noprefixroute wlan0
    inet 10.8.0.7/24 brd 10.8.0.255 scope global tun0

0

NetworkManagerでOpenVPNプロファイルを編集し、IPv6タブを開いて、手動でルートを追加します。

アドレス:2000プレフィックス:3ゲートウェイ:0100 :: 1

2000 :: / 3は、すべてのパブリックルーティング可能なIPv6アドレスをキャプチャします。0100 :: / 64プレフィックスは、トラフィックの破棄に指定された特別なプレフィックスです。基本的に、存在しないゲートウェイにすべてのIPv6トラフィックを送信します。

利点:簡単で完全に自動化されています。

欠点:一部のアプリ、つまりコマンドラインツールは、この方法を使用した場合に望むほど速くIPv4にフォールバックしない場合があります。


0

OpenVPNサーバーに接続するときに、クライアントでIPv6を無効にするだけです。出来ますか?

今作成した簡単なスクリプトを試してください。これは、

  • インターフェース全体を扱います。
  • OpenVPNの起動時にipv6を無効にします。
  • OpenVPNが終了したら、ipv6を有効にします。
  • NetworkManager引数との互換性が向上しました。

特定のインターフェイスにまだipv6アドレスがある場合、クライアントは引き続きipv6ルーティングを試行しますが、DNSがUDPを使用するため、TCPwrapperが無効にできないDNSリークの可能性があります。

このスクリプトは、vpn-up vpn-downなど、NetworkManagerの引数に依存しなくなったため、他のインターフェイスでもうまく機能します。

/etc/NetworkManager/dispatcher.d/に実行可能ファイルを作成します

sudo vim /etc/NetworkManager/dispatcher.d/v6d

以下のコードを貼り付けます

#!/bin/bash
IF=$1
STATUS=$2
if [ "$IF" = "tun0" ];
then
case "$2" in
up)
for v6 in $(sysctl -a |grep ipv6|grep disable|sed 's/ \= 0/=1/'); do
sysctl -w $v6
done
;;
down)
for v6 in $(sysctl -a |grep ipv6|grep disable|sed 's/ \= 1/\=0/'); do
sysctl -w $v6
done
;;
esac
fi

実行可能にする

sudo vim /etc/NetworkManager/dispatcher.d/v6d

Network Managerを使用したPS OpenVPNは、コマンドラインバージョンから多くのOpenVPN特典オプションを失います。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.