как настроить radvd для маршрутизатора linux ipv6 по направлению к вышестоящему шлюзу dsl

как настроить radvd для маршрутизатора linux ipv6 по направлению к вышестоящему шлюзу dsl

Я пытаюсь сделать так, чтобы мой домашний маршрутизатор Linux также поддерживал IPv6 в домашней сети.

У меня есть маршрутизатор DSL NVG599, работающий в качестве шлюза для публичного Интернета, а также мой маршрутизатор Linux с двумя интерфейсами: eth0 для домашней сети и eth1 для маршрутизатора DSL.

Домашняя сеть <----eth0-----> LinuxRouter <------eth1------>DSLrouter -->>>>>

Маршрутизатор DSL настроен с сетевым префиксом /64 от моего интернет-провайдера (предположим, что это 2001:0:0:1234::/64), а маршрутизатор DSL имеет глобальный адрес ipv6 2001:0:0:1234::1. Я настроил маршрутизатор Linux с помощью radvd для объявления этого же сетевого префикса /64 на eth0 в направлении домашней локальной сети, и действительно, я вижу, что хосты в локальной сети могут автоматически настраивать свои IP-адреса. В объявлении маршрутизатор Linux также указан как маршрутизатор по умолчанию для ::/0, а пересылка настроена так, что он будет отправлять пакеты на маршрутизатор DSL.

Проблема в том, что маршрутизатор DSL отправляет пакеты запросов соседей на eth1, когда получает входящие пакеты из интернета, и эти запросы соседей не передаются из eth1 -> eth0 на маршрутизаторе Linux. Я думаю, что это происходит потому, что маршрутизатор DSL думает, что он напрямую подключен к домашней сети (что обычно происходит в 99% домашних сетей без маршрутизатора Linux посередине).

Потратив 2 дня на попытки разобраться, ответ так и не нашелся. Я надеюсь, что есть способ отправить объявление маршрутизатора с помощью radvd на маршрутизатор DSL, чтобы сообщить ему о необходимости маршрутизации всех пакетов для префикса /64 через маршрутизатор Linux. В настоящее время объявление маршрутизатора, отправляемое маршрутизатором Linux, настроено на отправку префикса /64 на маршрутизатор DSL с помощью:

interface eth1
{
    AdvSendAdvert on;
    MinRtrAdvInterval 3;
    MaxRtrAdvInterval 10;
    route 2001:0:0:1234::/64 {
    };

};

Я думаю, что этого должно быть достаточно, чтобы маршрутизатор DSL пересылал все пакеты в сеть, но я все еще вижу запросы от соседей.

Я вижу, что маршрутизатор DSL имеет настройки IP pass through с возможностью установки "сервера по умолчанию", но они, похоже, применяются только к IPv4. Предполагая, что маршрутизатор DSL не учитывает мой RA, я полагаю, что я мог бы настроить многоадресную пересылку ipv6 с помощью 'xorb' на моем маршрутизаторе Linux, но интересно, есть ли другие варианты.

решение1

Проблема заключается в том, что маршрутизатор 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, его можно обмануть и запросить второй.) Разница, однако, в том, что второй /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, но не настраивал его для LAN. (Зависит от гибкости маршрутизатора.) Вместо этого снова настройте маршрут для этого /64 через локальный адрес eth0 вашей системы Linux, и аналогичным образом настройте маршрут в системе Linux для ::/0 через локальный адрес LAN маршрутизатора DSL. В результате /64 будет использоваться только во 2-й подсети, а 1-я вообще не будет иметь публичного префикса.

  • Продолжайте использовать текущую настройку, но установите «ndppd» для выполнения проксирования Neighbor Discovery. (Нет, многоадресная пересылка не подойдет, поскольку пакеты ND часто имеют локальные адреса источника.) Будьте осторожны с этим, это может все сильно запутать.

  • Используйте частные (ULA) адреса для второй локальной сети и включите NAT «один ко многим» (маскарадинг) на маршрутизаторе Linux... при этом теряется большая часть полезности IPv6. (Да, официально NAT не существует в IPv6, но это не помешало Linux netfilter/iptables сдаться и реализовать его.)

Связанный контент