Я использую клиент OpenVPN через плагин OpenVPN Network Manager в двойном стеке (то есть настроен как для подключения IPv4, так и для подключения к IPv6) Ubuntu 13.10 для перенаправления всего трафика через VPN (redirect-gateway). Как правило, работает нормально.
Однако из-за того, что система предпочитает IPv6, VPN «просачивается», и при подключении к сайтам, которые также доступны через IPv6 (например, Google или Википедия), браузер подключается напрямую.
Одним из решений было бы настроить сервер OpenVPN для обеспечения подключения IPv6. Хотя это возможно с OpenVPN, плагин для Network Manager в настоящее время не поддерживает его.
Поскольку подключение IPv6 через VPN не является строго необходимым, Я хотел бы просто отключить IPv6 на клиенте при подключении к серверу OpenVPN. Является ли это возможным? Если так, как я могу это сделать?
Добавьте это к своей строке ядра в Вашем загрузчике для отключения IPv6 в целом:
ipv6.disable=1
При использовании Личинки (если Вы не установили свой собственный загрузчик, то Вы используете Личинку), Ваша строка ядра должна выглядеть примерно так:
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 ни одному из Ваших сетевых устройств.
Для отключения IPv6 через sysctl поместите следующее в Ваш /etc/sysctl.conf
файл:
net.ipv6.conf.all.disable_ipv6 = 1
Не забывайте комментировать любые хосты IPv6 в Вашем /etc/hosts
файл:
#::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 на данном условии, затем запишите сценарий удара где-нибудь вдоль этих строк:
#!/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
Примечание:
Вы, возможно, должны были бы отключить любые хосты ipv6 в Вашем /etc/hosts
файл для этого метода также, так же, как я рекомендовал в предыдущем методе.
Можно отключить ipv6 на клиентском уровне для определенного Администратора сети соединение путем установки опции ipv6.method IPv6 "проигнорировать"
//SOP: Воссоздайте мое соединение LAN с помощью ЗАФИКСИРОВАННОГО IP 192.168.0.95 к Ethernet''''.
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.
Это - то, что я сделал для переключения IPv6 автоматически на и прочь при соединении с VPN через Администратора сети:
Создают сценарий в /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
Вот именно. Я должен был вручную добавить свою Дыру Пи DNS из-за dnsmasq
ошибка, которая предотвращает resolv.conf
от того, чтобы быть обновленным правильно, поэтому измените строки когда, указали, находите ли Вы свою утечку DNS.
Я думаю, что это менее навязчиво для отключения ip6 в клиентском файле (отредактируйте client_conf_file.ovpn), которые изменяют ядро tcp стек.
Откройте свой 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
Измените профиль OpenVPN в NetworkManager, откройте вкладку IPv6 и вручную добавьте маршрут:
Адрес: префикс 2000 года: 3 шлюза: 0100:: 1
2000::/3 получает все публично routable адреса IPv6. 0100::/64 префиксов являются специальным префиксом, определяемым к отбрасыванию трафика. По существу Вы будете отправлять весь трафик IPv6 на шлюз, который не существует.
Позитивный аспект: легкий и абсолютно автоматический.
Оборотная сторона: некоторые приложения, а именно, инструменты командной строки, не могут нейтрализация к IPv4 так быстро, как можно было бы хотеть, когда этот метод используется.
Я хотел бы просто отключить IPv6 на клиенте при соединении с сервером OpenVPN. Действительно ли это возможно?
Попробуйте мой простой сценарий, который я просто сделал теперь, это будет,
Если существует все еще ipv6 адрес в определенных интерфейсах, клиент все еще пробуют маршрутизацию ipv6, но поскольку DNS использует UDP, существуют возможности Утечки DNS, что TCPwrapper не может удаться отключить.
Этот сценарий также работает хорошо с другими интерфейсами, потому что он больше не полагается на аргумент NetworkManager, такой как vpn vpn-вниз.
создайте исполняемый файл в/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
P.S. OpenVPN с Администратором сети теряет партию опций преимущества OpenVPN от версий командной строки.