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

2725
DavidG

Я пытаюсь заставить свой домашний Linux-маршрутизатор также поддерживать ipv6 в домашней сети.

У меня есть DSL-маршрутизатор NVG599, выступающий в качестве GW для общедоступного Интернета, а затем мой 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-пропускной способности с возможностью установки «сервера по умолчанию», но, похоже, они применяются только к IPv4. Предполагая, что маршрутизатор DSL не учитывает мой RA, я полагаю, что мог бы настроить многоадресную пересылку ipv6, используя 'xorb' на моем маршрутизаторе Linux, но задавался вопросом, есть ли другие варианты.

2
Тередо адреса? Это не сработает. Используйте действительные адреса IPv6. Michael Hampton 7 лет назад 0
Адреса Teredo совершенно действительны, спасибо. Я предполагаю, что пост просто использует 2001: 0: ... в качестве примера, хотя. grawity 7 лет назад 0

1 ответ на вопрос

3
grawity

Проблема, с которой я столкнулся, заключается в том, что маршрутизатор 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 сдаться и реализовать его.)

Это немного грязно из-за того, что пишут по телефону далеко за полночь ... grawity 7 лет назад 0
Спасибо за отличный ответ. Два решения, которые я рассмотрю, - это получение второго / 64 от провайдера и как перевести DSL-маршрутизатор в какой-то режим моста, где он делегирует маршрутизацию на маршрутизатор Linux для IPv6. Самая большая проблема заключается в том, что IPv4 работает, и я не хочу это ломать. DavidG 7 лет назад 0

Похожие вопросы