Я настроил простой маршрутизатор, который должен обеспечивать подключение IPv6 к машинам, которые находятся в локальной сети за ним. У маршрутизатора есть 2 сетевых интерфейса (eth0, eth1), у машин есть 1 (eth0).
На eth0 роутера есть доступ только к локальной сети, на eth1 есть доступ к интернету. Я настроил все параметры ядра, все работает нормально.
IP маршрутизатора - это fd00::1
, я установил dhcpd на маршрутизаторе и настроил диапазон fd00::100 - fd00::fffe
.
Когда я запускаю какую-либо машину в этой сети, она получает IP-адрес от DHCPD, например fd00::fffa
, но не может получить доступ к Интернету по понятным причинам - отсутствует маршрут.
Когда я добавляю маршрут вручную, sudo route -6 add 2000::/3 gw fd00::1
устройство начинает иметь доступ к интернету, пока я его не перезагружу.
Я могу добавить этот маршрут вручную в сценарий инициализации каждой машины, но я бы предпочел, чтобы он был настроен автоматически, чтобы при запуске машины в этой сети она получала доступ к Интернету IPv6 без необходимости в чем-либо еще.
Следуя некоторым предложениям, я также установил radvd на маршрутизатор и вставил эту опцию:
route 2000::/3 {};
Скорее всего, это неправильно, но я не смог найти никакой документации или примеров. Это не работает. Использование radvd вместо dhcpd для назначения адресов IPv6 вообще не работает, если я отключаю dhcpd, машины автоматически настраивают какие-то случайные адреса IPv6 и даже не видят друг друга, и не могут пинговать маршрутизатор.
Как настроить локальную сеть на автоматическую настройку IPv6 для всех машин в ней?
Примечание: мне это не нужно, я хочу, чтобы на каждой машине был публичный IPv6, NAT вполне подойдет.
решение1
Я сразу замечаю две проблемы в вашей конфигурации. Адреса RFC 4193 не маршрутизируются глобально. Это означает, что эти адреса не смогут общаться с внешним миром.
Конечно, вы можете использовать NAT, но известно, что NAT вызывает множество проблем. NAT — это обходной путь, призванный временно устранить нехватку IP-адресов. IPv6 решает эту проблему. Все остальные проблемы, которые люди пытались решить с помощью NAT, имеют лучшее решение, которое не включает NAT.
Кроме того, ваш префикс явно не был сгенерирован в соответствии со спецификацией RFC 4193. Соответствующая цитата:
Локально назначенные глобальные идентификаторы ДОЛЖНЫ быть сгенерированы с помощью псевдослучайного алгоритма.
Мешают ли эти две проблемы в конфигурации сети клиентам общаться с внешним миром, вы узнаете только путем тестирования. Существует программное обеспечение, которое пытается обнаружить неоптимальную конфигурацию IPv6 и полностью избежать использования IPv6, если таковая обнаружена. Вполне вероятно, что некоторое клиентское программное обеспечение откажется использовать соединение IPv6 в вашей настройке.
Тем не менее, не невозможно заставить клиентов общаться извне, используя адреса RFC 4193. Вот radvd.conf
файл, который я использовал в прошлом. С этой конфигурацией некоторые клиенты пытались общаться извне, используя назначенные им адреса RFC 4193.
interface wlan0 {
AdvSendAdvert on;
MinRtrAdvInterval 3;
MaxRtrAdvInterval 10;
prefix fdbd:5df9:dca3::/64 {
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr on;
};
};
Однако эта конфигурация работает не со всеми клиентами. Я снова протестировал ее с клиентом под управлением Android. Телефон получил настроенный адрес IPv6, но не пытался использовать IPv6 для внешней связи.
Затем я изменил префикс на 2001:db8:dca3::/64
, и в этот момент телефон начал отправлять пакеты IPv6 на шлюз. Так что Android — это один из примеров платформы, которая отказывается использовать адреса RFC 4193 таким образом.