У меня следующая настройка:
client(s) <---> (eth0) router (eth1) <---> wan
У меня есть статический IPv4-адрес и блок адресов / 48 IPv6. Мне нужно подключить всех клиентов к (wan). У каждого клиента будет свой публичный IPv6. Между тем, мне нужно преобразовать тех же клиентов в (wan) с помощью NAT.
Все, что связано с IPv4 и NAT, работает нормально. Связь IPv6 с / от (eth0) <-> (клиенты)> работает нормально, как и связь IPv6 от (eth1) <-> (wan).
Чтобы предоставить IPv6 всем моим клиентам, я придумал слишком много вариантов:
Наличие маршрутизатора в качестве шлюза, у которого разные IP на каждом интерфейсе. Похоже, мне нужно сказать своему интернет-провайдеру, чтобы он маршрутизировал весь блок через этот единственный IP-адрес, так что это не вариант.
Прозрачно передавать пакеты IPv6 в / из eth0 <-> eth1, чтобы все клиенты могли общаться с вышестоящим шлюзом (у меня действительно был бы переключатель, если бы не необходимость оставаться совместимым с IPv4).
Итак, поскольку я выбрал второй вариант, я сомневаюсь: как я могу прозрачно передать весь трафик IPv6 с eth0 на eth1? Мне нужен мост уровня 3, но bridgeutils в linux создают мост уровня 2 (который также будет связывать ipv4, а у меня этого не может быть).
Это устройство DD-WRT, но в значительной степени это встроенный Linux, поэтому большинство предложений, которые будут работать в Linux, приветствуются.
Спасибо.
вы можете добиться этого с помощью прокси-ARP, если бы я пытался псевдо-мост ipv4, я бы сделал это:
echo 1 > /proc/sys/net/ipv4/conf/eth0/proxy_arp
echo 1 > /proc/sys/net/ipv4/conf/eth1/proxy_arp
echo 1 > /proc/sys/net/ipv4/ip_forward
Вам необходимо настроить оба ваших сетевых адаптера с ТОЧНОЙ той же информацией (ip_address, netmask и gateway), не уверен, что DD-WRT позволит это, наверняка он не будет в веб-интерфейсе, но он может позволить вам сделать это из консоли, затем перепроверьте свой шлюз, убедитесь, что у вас есть только шлюз, указывающий на интерфейс, который идет к провайдеру, примерно так:
ip route del default dev eth0
ip route del default dev eth1
ip route del $LAN_NETWORK dev eth0
ip route del $LAN_NETWORK dev eth1
ip route add $DEFAULT_GATEWAY dev eth0
ip route add $LAN_NETWORK dev eth1
ip route add default via $DEFAULT_GATEWAY dev eth0
Это для псевдо-моста IPv4 с использованием Proxy-ARP, я думаю, вы можете сделать то же самое с IPv6.
С другой стороны, как я уже сказал по другому вопросу, вы все равно можете NAT IPv4, даже если он подключен на уровне 2.
Вам нужно будет настроить как публичный IPv4-адрес, так и IPv4-адрес локальной сети на интерфейсе BR0, а затем преобразовать их, как я уже говорил ранее.
iptables -t nat -A POSTROUTING -j SNAT -s $LAN_NETWORK --to-source $WAN_IP_ADDRESS
Это решит обе ваши проблемы без проблем с прокси-сервером. Проблема в том, что большая часть этого материала не будет работать из интерфейса DD-WRT.
В качестве лучшей и более чистой альтернативы вы можете добавить подинтерфейс на мосту на стороне LAN, что-то вроде
ifconfig br0:1 192.168.1.1 netmask 255.255.255.0
И используйте ту же линию NAT, которую я сказал выше
Вы пытаетесь преобразовать IPv6-соединения через NAT? Если да, то какова мотивация использования IPv6 NAT? У вас есть блок / 48, которого более чем достаточно.
Если ваш маршрутизатор поддерживает IPv6, то дело только в настройке правильных маршрутов IPv6. Маршрутизация IPv6 отделена от IPv4, поэтому не должно быть конфликтов с тем, что у вас уже есть на IPv4.