У меня есть установка OpenVPN, работающая с IPv4. Готовясь к поддержке IPv6, я сделал следующее:
Проблема: связь IPv6 работает только в исходящем направлении. Входящий трафик не работает, потому что шлюз ISP просит например ICMP6, neighbor solicitation, who has ....:8000::1000
который приходит на ens3, но мой сервер не отвечает на это. Думаю, мне нужно сказать своему серверу и ens3, чтобы они принимали пакеты для диапазона ....: 8000 :: / 65 и пересылали их на tun0 ?! Но я не знаю, как это сделать.
Если это важно, я использую firewalld на машине Fedora.
РЕДАКТИРОВАТЬ
После того, как @kasperd указал мне на хорошее объяснение маршрутизируемых префиксов, я продолжил читать об этом.
Я не нашел документации о том, как запросить маршрутизируемый префикс у моего хостинг-провайдера. Так что я думаю, что мне нужно остаться с префиксом self-split / 65. Подскажите, пожалуйста, как улучшить, если это не чистое решение!
Чтобы ответить на упомянутые запросы соседей, необходимо включить проксирование NDP. sysctl -w net.ipv6.conf.all.proxy_ndp=1
Для фиксированного числа клиентов теперь можно было делать ip neigh add proxy ....:8000::1000 dev ens3
. Чтобы автоматизировать этот процесс с помощью OpenVPN, можно добавить следующие две строки в конфигурацию сервера OpenVPN:
script-security 2
learn-address ./proxy-ndp
С участием proxy-ndp
сценарий beeing
#!/bin/bash
extif=ens3
op="$1"
addr="$2"
if [[ "$addr" != *":"* ]]; then
# no IPv6
exit 0
fi
case "$op" in
add|update)
/usr/sbin/ip neigh replace proxy "$addr" dev "$extif"
;;
delete)
/usr/sbin/ip neigh del proxy "$addr" dev "$extif"
;;
esac
Кроме того, если переадресации IPv6 еще нет, ее следует включить с помощью sysctl -w net.ipv6.conf.all.forwarding=1
. Последний шаг - разрешить пересылку между сетевыми интерфейсами. Поскольку я использую firewalld, команда firewall-cmd --direct --add-rule ipv6 filter FORWARD 0 -i tun0 -o ens3 -j ACCEPT
.