Как отключить IPv6 при подключении к серверу OpenVPN с помощью Network Manager в системе с двумя стеками?

Я использую клиент 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. Является ли это возможным? Если так, как я могу это сделать?

20
задан 28 March 2014 в 17:02

6 ответов

Добавьте это к своей строке ядра в Вашем загрузчике для отключения 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 файл для этого метода также, так же, как я рекомендовал в предыдущем методе.

15
ответ дан 28 March 2014 в 17:02

Можно отключить 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

''''

0
ответ дан 29 March 2014 в 04:02

Я нахожусь на Ubuntu 16.04.03 LTS, соединяясь с сервером Дыры Пи через PiVPN.

Это - то, что я сделал для переключения IPv6 автоматически на и прочь при соединении с VPN через Администратора сети:

  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
    

Вот именно. Я должен был вручную добавить свою Дыру Пи DNS из-за dnsmasq ошибка, которая предотвращает resolv.conf от того, чтобы быть обновленным правильно, поэтому измените строки когда, указали, находите ли Вы свою утечку DNS.

0
ответ дан 19 April 2019 в 01:52

Я думаю, что это менее навязчиво для отключения 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
0
ответ дан 23 November 2019 в 01:52

Измените профиль OpenVPN в NetworkManager, откройте вкладку IPv6 и вручную добавьте маршрут:

Адрес: префикс 2000 года: 3 шлюза: 0100:: 1

2000::/3 получает все публично routable адреса IPv6. 0100::/64 префиксов являются специальным префиксом, определяемым к отбрасыванию трафика. По существу Вы будете отправлять весь трафик IPv6 на шлюз, который не существует.

Позитивный аспект: легкий и абсолютно автоматический.

Оборотная сторона: некоторые приложения, а именно, инструменты командной строки, не могут нейтрализация к IPv4 так быстро, как можно было бы хотеть, когда этот метод используется.

0
ответ дан 23 November 2019 в 01:52

Я хотел бы просто отключить IPv6 на клиенте при соединении с сервером OpenVPN. Действительно ли это возможно?

Попробуйте мой простой сценарий, который я просто сделал теперь, это будет,

  • Соглашение со всеми интерфейсами.
  • Отключите ipv6, когда OpenVPN будет запущен.
  • Включите ipv6, когда OpenVPN будет закончен.
  • Лучшая совместимость с аргументом NetworkManager.

Если существует все еще 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 от версий командной строки.

0
ответ дан 23 November 2019 в 01:52

Другие вопросы по тегам:

Похожие вопросы: