2

Я пытаюсь заставить свой домашний 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, но задавался вопросом, есть ли другие варианты.

1 ответ1

4

Проблема, с которой я столкнулся, заключается в том, что маршрутизатор 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. В результате /64 будет использоваться только во 2-й подсети, а в 1-й вообще не будет никакого публичного префикса.

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .