デュアルスタック上のOpenVPNネットワークマネージャープラグイン(IPv4とIPv6の両方の接続用に構成されていることを意味します)Ubuntu 13.10でOpenVPNクライアントを使用して、VPN(リダイレクトゲートウェイ)経由ですべてのトラフィックをリダイレクトしています。通常は正常に機能します。
ただし、システムでIPv6が優先されるという事実により、VPNは「リーク」し、IPv6経由でも利用可能なサイト(GoogleやWikipediaなど)に接続する場合、ブラウザは直接接続します。
1つの解決策は、OpenVPNサーバーを構成してIPv6接続を提供することです。 OpenVPNで可能ですが、Network Managerのプラグインは現在サポートしていません。
VPNを介したIPv6接続は厳密に必要ではないため、OpenVPNサーバーに接続するときにクライアントでIPv6を無効にしたいだけです。可能な場合はどうすればよいですか?
これをブートローダーの kernel line に追加して、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
NOTE
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
NOTE
前の方法でお勧めしたように、この方法でも/etc/hosts
ファイルのipv6ホストを無効にする必要があるかもしれません。
IPv6オプションipv6.methodを「無視」に設定することにより、特定のネットワークマネージャーのクライアントレベルでipv6を無効にできます接続
// 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
``
私はUbuntu 16.04.03 LTSで、PiVPNを介してPi-Holeサーバーに接続しています。
これは、Network Managerを介してVPNに接続するときにIPv6を自動的にオンおよびオフにするために行ったことです。
/etc/NetworkManager/dispatcher.d
でスクリプトを作成します。
$ Sudo vi /etc/NetworkManager/dispatcher.d/99vpn-ipv6-switch
次のコンテンツをファイルに追加します(要件に合わせてコンテンツを変更します)。
#!/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
スクリプトを実行可能にします。
$ Sudo chmod 755 /etc/NetworkManager/dispatcher.d/99vpn-ipv6-switch
それでおしまい。 resolv.conf
が正しく更新されないdnsmasq
バグのため、Pi-Hole DNSを手動で追加する必要があったため、DNSがリークしている場合は、示されている行を変更します。
カーネル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
NetworkManagerでOpenVPNプロファイルを編集し、IPv6タブを開いて、手動でルートを追加します。
アドレス:2000プレフィックス:3ゲートウェイ:0100 :: 1
2000 ::/3は、すべてのパブリックルーティング可能なIPv6アドレスをキャプチャします。 0100 ::/64プレフィックスは、トラフィックの破棄に指定された特別なプレフィックスです。基本的に、存在しないゲートウェイにすべてのIPv6トラフィックを送信します。
利点:簡単で完全に自動化されています。
欠点:一部のアプリ、つまりコマンドラインツールは、この方法を使用した場合に望むほど速くIPv4にフォールバックしない場合があります。