Як відключити IPv6 під час підключення до сервера OpenVPN за допомогою Менеджера мережі в системі з двома стеками?


20

Я використовую клієнт OpenVPN через плагін OpenVPN Network Manager на подвійному стеку (тобто налаштований як для підключення IPv4, так і для IPv6) Ubuntu 13.10 для перенаправлення всього трафіку через VPN (перенаправлення-шлюз). Як правило, це прекрасно працює.

Однак через те, що IPv6 надає перевагу системі, VPN "протікає" і при підключенні до сайтів, які також доступні через IPv6 (наприклад, Google або Wikipedia), браузер підключається безпосередньо.

Одним з рішень було б налаштування сервера OpenVPN для забезпечення підключення IPv6. Хоча це можливо з OpenVPN, плагін для Менеджера мережі наразі не підтримує його.

Оскільки підключення IPv6 через VPN не є строго необхідним, я хотів би просто відключити IPv6 на клієнті під час підключення до сервера OpenVPN. Це можливо? Якщо так, то як це зробити?


1
Ваша VPN також не здійснює трафік IPv6?
Майкл Гемптон


Моя VPN цілком може нести трафік IPv6, але наскільки я можу сказати, Менеджер мережі не підтримує конфігурацію IPv6 для OpenVPN.
Проклятий термінал

1
Просто для запису, якщо ваш постачальник VPN протікає так, вам потрібен новий провайдер. Є багато тих, хто отримує це правильно. IPv6 не йде, і відключення його лише відрізає вас від частин Інтернету.
Майкл Хемптон

1
@MichaelHampton На жаль, це мій сервер. Я є провайдером у цьому випадку. Він підтримує IPv6, але постачається лише з одним / 64, тому мені потрібно спочатку сплести його, що болить. Що ще важливіше (на той момент я цього часу не перевіряв) у менеджера мережі виникли деякі проблеми з обробкою з підтримкою OpenVPN з підтримкою IPv6 (однак IPv6 через 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 адреси жодному з ваших мережевих пристроїв.

АБО

Щоб відключити 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 за заданої умови , тоді напишіть скрипт 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

ПРИМІТКА

Вам може знадобитися відключити будь-які хости ipv6 у вашому /etc/hostsфайлі і для цього методу, як я рекомендував у попередньому методі.


5
Так, добре. Але я хочу відключити IPv6 під час підключення до VPN за допомогою Менеджера мережі, а не вбивати його повністю в моїй системі. Можливо, я мав би зробити це зрозумілішим.
Проклятий термінал

@DamnTerminal, тому ви хочете відключити його лише під час підключення до свого VPN, оскільки відключити його в цілому по системі цілком добре, якщо це відбувається лише під час підключення до VPN?
Олексій Магура

@DamnTerminal Я оновив свою відповідь, щоб включити приклад того, як відключити ipv6 за допомогою скрипту bash, який би перевіряв стан. Можливо, ви могли використовувати інтерфейс командного рядка NetworkManager: nmcliщоб перевірити, чи підключено ви до VPN; якщо це не працює, то я впевнений, що там є чиста утиліта командного рядка, яка дасть доступ до цієї інформації.
Олексій Магура

Чому потік?
Олексій Магура

На жаль, це рішення ( sysctl) не повторно вмикає IPv6 для WiFi належним чином. Вам потрібно підключитися до точки доступу, щоб увімкнути її.
Ігор Микушкін

5

Ви можете відключити ipv6 на рівні клієнта для конкретного підключення Менеджера мереж , встановивши опцію IPv6 ipv6.method на "ігнорувати"

// SOP: Відтворити моє локальне з'єднання за допомогою FIXED 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

`` `


1
На жаль, це не впливає на VPN-з'єднання.
Ігор Мікушкін

0

Я на Ubuntu 16.04.03 LTS, підключаюся до сервера Pi-Hole через 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 Pi-Hole через dnsmasqпомилку, яка запобігає resolv.confправильному оновленню, тому змініть вказані рядки, якщо ви виявите, що ваш DNS протікає.


На жаль, це рішення не вмикає належним чином IPv6 для WiFi. Вам потрібно підключитися до точки доступу, щоб увімкнути її.
Ігор Мікушкін

0

Я думаю, що менш нав'язливо відключати 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

Відредагуйте профіль OpenVPN у NetworkManager, відкрийте вкладку IPv6 і вручну додайте маршрут:

Адреса: 2000 Префікс: 3 Шлюз: 0100 :: 1

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

Вгору: легкий і повністю автоматичний.

Знизу: деякі програми, а саме інструменти командного рядка, можуть не повернутися до IPv4 так швидко, як хотілося б, коли використовується цей метод.


0

Я хотів би просто відключити IPv6 на клієнті під час підключення до сервера OpenVPN. Це можливо?

Спробуйте мій прямий сценарій, який я щойно створив, це буде,

  • Робота з усіма інтерфейсами.
  • Вимкнути ipv6 при запуску OpenVPN.
  • Увімкніть ipv6, коли OpenVPN закінчено.
  • Краща сумісність з аргументом NetworkManager.

Якщо на певних інтерфейсах все ще є ipv6-адреса, клієнт все ще пробує маршрутизацію ipv6, але оскільки DNS використовує UDP, є ймовірність витоку DNS, яку TCPwrapper не вдається відключити.

Цей сценарій також добре працює з іншими інтерфейсами, оскільки він більше не покладається на аргумент NetworkManager, наприклад, vpn-up vpn-down.

створити виконуваний файл у /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

PS OpenVPN з Менеджером мережі втрачає багато варіантів переваг OpenVPN від версій командного рядка.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.