Intereting Posts
Пакет Debian, созданный checkinstall, перезаписывает файл конфигурации в / etc / default Показывать сумму файлов в списке каталогов Процессы печати, отсортированные по использованию ЦП Mysqld_multi не распознает группы Недостающие / сломанные зависимости на OpenSUSE, нормально? Процессор застрял на 99% в течение нескольких часов. Очень нужна помощь в поиске журналов Что контролирует домашний каталог в таких приложениях, как Geeqie и Thunar? Эквивалент nfsstat -m на старшем ядре Запустить программное обеспечение на Linux-машине из Windows: решение для графического интерфейса Как сделать этот цикл Ctrl + C-прерывистым? Если ваш Linux-накопитель является SSD или HDD Как преобразовать несколько изображений tiff в координаты xyz в одном текстовом файле с помощью терминала? Как сохранить файлы Excel (.xls) в листах Calligra? Настройка принтера Dot Matrix в Debian Время меняется внезапно, даже если NTP настроен

Маршрутизация общедоступного трафика ipv6 через туннель openvpn

То, что я пытаюсь сделать, – это маршрутизировать трафик IPv6 через туннель vpn. Таким образом, я должен иметь возможность использовать IPv6 в сети, которая не поддерживает IPv6.

У меня есть VPS, у которого есть блок IPv6. Часть этого блока я хочу использовать для клиентов openvpn. Диапазон, который я имел в виду, был 2001:db8::111:800:0/112 (префикс является анонимным), поскольку openvpn поддерживает только / 64 и / 112 в качестве подсетей.

IPv6 через туннель уже работает, от клиента я могу выполнить ping-сервер ( 2001:db8::111:800:1 ), а также интерфейсы на сервере ( 2001:db8::111:100:100 и 2001:db8:216:3dfa:f1d4:81c0 ).

Хотя, пытаясь выполнить ping google.com с клиента, я не получаю ответа (таймаут ping). Чтобы отладить эту проблему, я использовал tcpdump для захвата трафика на сервере, и я вижу, что пакеты ping выходят, но ответы не возвращаются. Добавление правил журнала в ip6tables показывает то же самое, пакеты выходят, но ничего не происходит.

Я использовал онлайн-инструмент traceroute, который получает тайм-аут с моего сервера. Я также попытался установить ip непосредственно на интерфейс, что приводит к тому, что ip ( 2001:db8::111:800:1001 ) будет доступен, поэтому я думаю, что это проблема маршрутизации.

Я включил переадресацию для ipv6 через /proc/sys/net/ipv6/conf/all/forwarding . ip6tables имеет политику для всех цепочек.

Мой вопрос в том, что именно нужно, чтобы linux принимал этот пакет для ip, который не назначен интерфейсу и маршрутизирует его дальше? Просто путь, который существует, кажется недостаточным.

Вот настройка для моего клиента и сервера. Пожалуйста, сообщите ему, нужна ли дополнительная информация.

клиент

 # ip -6 addresses 10: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qlen 100 inet6 2001:db8::111:800:1001/112 scope global valid_lft forever preferred_lft forever # ip -6 routes 2001:db8::111:800:0/112 dev tun0 proto kernel metric 256 2000::/3 dev tun0 metric 1024 

сервер

 # ip -6 address 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000 inet6 2001:db8:216:3dfa:f1d4:81c0/64 scope global dynamic valid_lft 86254sec preferred_lft 14254sec inet6 2001:db8::111:100:100/128 scope global valid_lft forever preferred_lft forever 12: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qlen 100 inet6 2001:db8::111:800:1/112 scope global valid_lft forever preferred_lft forever # ip -6 route 2001:db8::111:100:100 dev eth0 proto kernel metric 256 2001:db8::111:800:0/112 dev tun0 proto kernel metric 256 2001:db8::/64 dev eth0 proto kernel metric 256 expires 86194sec default via fe80::230:48ff:fe94:d6c5 dev eth0 proto ra metric 1024 expires 1594sec 

Вам необходимо сообщить маршрутизатору, что он использует ваш сервер для этой подсети VPN: правильным решением вашей проблемы является добавление маршрута на маршрутизаторе для подсети OpenVPN.

Если вы не можете сделать это, потому что вы не можете дотронуться до маршрутизатора, другое решение – настроить прокси-сервер NDP для клиентов на ссылке eth0 .

Поскольку вы используете VPS, вы, вероятно, не можете добавлять маршруты к маршрутизатору: вам, вероятно, придется использовать второе решение.

Добавить маршрут для подсети

Правильное решение вашей проблемы – сообщить маршрутизатору, что подсеть VPN должна быть маршрутизирована через сервер OpenVPN (это для Linux):

 ip route add 001:db8::111:800::/112 via 2001:db8::111:100:100 

Вы должны включить переадресацию IPv6 на сервере:

 sysctl sys.net.ipv6.conf.all.forwarding=1 

Прокси-сервер NDP

Кажется, маршрутизатор настроен на отправку всего вашего IPv6-диапазона по ссылке eth0 : вы можете настроить прокси-сервер NDP.

Вы должны увидеть запросы NDP на интерфейсе eth0 сервера для своей подсети OpenVPN при попытке получить доступ к остальной части Интернета от клиента.

Вам необходимо включить переадресацию IPv6 на сервере, а также прокси-сервер NDP:

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

прокси-сервер NDP подсети

Ядро Linux не позволяет добавлять прокси-сервер NDP для подсети, но только для отдельных IP-адресов. Вы можете использовать демон (например, ndppd для установки прокси-сервера NDP для всей подсети (никогда не использовал его).

В прокси-серверх IP NDP

Другим решением является добавление прокси-сервера NDP для каждого IPv6 подсети VPN:

 for i in $(seq 0 65535) ; do ip neigh add proxy 2001:db8::111:800:$(printf %x $i) dev tun0 done 

Это должно работать, поскольку у вас есть относительно небольшое количество IP-адресов в подсети OpenVPN.

Динамический прокси-сервер NDP с крючками OpenVPN

Вы можете использовать крючки OpenVPN для добавления динамического прокси-сервера NDP.

Добавить крюк в сервере OpenVPN conf:

 learn-address /etc/openvpn/learn-address 

С помощью следующего learn-address скрипта:

 #!/bin/sh action="$1" addr="$2" case "$action" in add | update) ip neigh replace proxy "$addr" dev tun0 ;; delete) ip neigh del proxy "$addr" dev tun0 ;; esac 

Смотрите эту тему .

Короткий ответ

 for i in $(seq 0 65535) ; do ip neigh add proxy 2001:db8::111:800:$(printf %x $i) dev tun0 done