Пытаюсь методом тыка из интереса осилить IPv6. И есть ощущение, что я делаю что-то очень криво и неправильно.
Есть несколько контейнеров LXC и с IPv4 всё отлично. Ещё есть 4 (да, всего) IPv6-адреса, использовать хочу пока один.
Всё, что должно отвечать по сети, живёт в LXC-контейнерах. В одном (10.10.0.4
) - nginx, в который нужно перенаправлять 80-ый порт, и задача которого быть прокси к другим контейнерам, но это не суть важно.
Задача: дать доступ к nginx по IPv6-адресу.
Подключаются контейнеры к бридж-девайсу br0 с виртуальной сетью, на хосте для этого iptables-правила сейчас:
-A PREROUTING -i ens3 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.10.0.4:80
-A POSTROUTING -s 10.10.0.0/24 -o ens3 -j MASQUERADE
10.10.0.0/24
- сеть, в которой сидят контейнеры. ens3 - внешний интерфейс, с публичными статическими IPv4 и IPv6 адресами.Сделал контейнерам первый попавшийся локальный
fc00::1/64
для внутреннего IPv6, пытался действовать по аналогии, и вот такое в ip6tables:
-A PREROUTING -i ens3 -p tcp -m tcp --dport 80 -j DNAT --to-destination [fc00::4]:80
-A POSTROUTING -s fc00::/64 -o ens3 -j MASQUERADE
Вопрос - что я делаю не так, и как это делают белые люди?
tcpdump в контейнере с nginx (при обращении от меня (ноутбук с Miredo)) по внешнему IPv6 долго думает, потом таки что-то ловит, и пока curl у меня ждёт таймаут, пишет подобное.
P.S. Обнаружил, что не загружены модули
nf_nat_ipv6, ip6table_nat, nf_nat_masquerade_ipv6
. Делал find по *ipv6*, *ip6*, *nat* т.п., загружал (на хосте) всё, что казалось нужным, но эффекта это не произвело (может кто-то знает список необходимого?). Доходит, что делаю какую-то ересь. Направьте, пожалуйста, на путь истинный.Сейчас читаю, что с IPv6 лучше назначать сразу глобальный адрес. Но всё ещё не понимаю, как в данном случае это сделать, оставив NAT для IPv4.