Проблема, с которой я столкнулся, заключается в том, что маршрутизатор DSL отправляет пакеты запросов соседей по eth1, когда он получает входящие пакеты из Интернета, и эти запросы соседей не передаются из eth1 -> eth0 на маршрутизатор Linux.
Это нормально. Запросы соседей работают так же, как запросы ARP - они преобразуют IP-адрес в MAC-адрес и, следовательно, имеют смысл только в пределах одного широковещательного домена. Это не имеет никакого смысла для маршрутизатора, чтобы направить их.
(Хотя в некоторых ситуациях маршрутизатор может прокси-сервер их, как описано в конце, но ... оставьте это для плана C.)
Я думаю, что это происходит, потому что маршрутизатор DSL считает, что он напрямую подключен к домашней сети (как это обычно бывает в 99% домашних сетей без маршрутизатора Linux в середине).
Да, и ты никогда не говорил это иначе.
Итак, ваша текущая ситуация такова, что одна и та же IP-подсеть используется двумя разными сетями, и вы ожидаете, что маршрутизатор Linux будет работать как мост ... Это почти полная противоположность маршрутизатора.
(Если сбивает с толку часть IPv6, подумайте обо всей настройке в терминах IPv4, поскольку маршрутизация более или менее одинакова в обоих, а ND в основном эквивалентен ARP. Поэтому, если вы не будете использовать ту же подсеть 192.168.1.0 в v4 ...)
Ваш лучший курс действий, чтобы получить второе / 64, и использовать, что для eth1 сети вашего Linux маршрутизатора. (Если маршрутизатор DSL получает свой префикс через DHCPv6-PD, возможно, его можно обмануть, запросив второй.) Разница, однако, заключается в том, что 2nd / 64 не будет использоваться непосредственно на интерфейсе, а вместо этого направляется к Адрес роутера Linux.
Например:
- Маршрутизатор DSL имеет 2001: db8: 0: 0: a: b: c: d на интерфейсе WAN.
- Маршрутизатор DSL получает 2001: db8: 10: 0 :: / 64 от интернет-провайдера, самостоятельно назначает 2001: db8: 10: 0 :: 1/64 на интерфейсе локальной сети и отправляет для него объявления маршрутизатора.
- Автоматическая настройка маршрутизатора Linux 2001: db8: 10: 0: x: y: z: t для eth1 на основе RA.
- Маршрутизатор Linux получает 2001: db8: 10: 1 :: / 64 от провайдера (каким-то образом), сам назначает 2001: db8: 10: 1 :: 1/64 на интерфейсе eth0, и radvd отправляет объявления маршрутизатора для этого - не для первой подсети.
- Маршрутизатору DSL нужен маршрут типа «2001: db8: 10: 1 :: / 64 через 2001: db8: 10: 0: x: y: z: t», чтобы весь трафик для 2-й подсети перенаправлялся на маршрутизатор Linux ,
(Извиняюсь за не очень понятный пример.)
Иногда провайдер делегирует вам целое / 60 или даже / 56 и направляет все это к маршрутизатору DSL. В этом случае вы можете просто настроить 2-ю подсеть без какой-либо магии DHCPV6-PD. Правда, я не могу дать здесь хороший «общий» ответ, так как он зависит как от провайдера, так и от CPE.
Если получение второго префикса / 64 невозможно, возможны и другие варианты:
Превратите систему Linux в чистый мост без каких-либо функций маршрутизации.
Используйте другие источники для получения дополнительных / 64, такие как туннельный провайдер (или 6to4). Существующие туннельные службы будут работать намного надежнее (за исключением некоторой дополнительной задержки), чем описанные ниже взломы.
Заставьте маршрутизатор DSL получать только / 64, но не настраивать его для локальной сети. (Зависит от того, насколько гибок маршрутизатор.) Вместо этого снова настройте маршрут для этого / 64 через локальный адрес eth0 вашей системы Linux, а также настройте маршрут в системе Linux для :: / 0 через маршрутизатор DSL. LAN link-локальный адрес. В результате / 64 будет использоваться только во 2-й подсети, а в 1-й вообще не будет никакого публичного префикса.
Продолжите текущую настройку, но установите «ndppd» для выполнения прокси Neighbor Discovery. (Нет, многоадресная пересылка не подойдет, поскольку пакеты ND часто имеют локальные адреса каналов.) Будьте осторожны с этим, это может привести к путанице.
Используйте частные адреса (ULA) для 2-й локальной сети и включите 1-ко-многим NAT (маскирование) на маршрутизаторе Linux ... теряя большую часть полезности IPv6 в этом процессе. (Да, официально NAT не существует в IPv6, но это не помешало Linux netfilter / iptables сдаться и реализовать его.)