Назад | Перейти на главную страницу

Объявление маршрутизатора для ipv6 - это реклама локального адреса ссылки

У меня следующая ситуация: я настроил машину FreeBSD 9.1 в качестве конечной точки туннеля Heartbeat SixXS на gif0 интерфейс. Пока работает, и я могу ping6 через IPv6.

Я назначил другой интерфейс lagg0 который представляет собой агрегированный интерфейс статического IPv6 из назначенной подсети IPv6, который подключен к LAN. Теперь я хотел бы рекламировать этот сетевой префикс в своей локальной сети, используя rtadvd деамон.

Это его /etc/rtadvd.conf файл:

lagg0:\
     :addr="xxxx:yyyy:zzzz:aaaa::":prefixlen#64:tc=ether:

с участием xxxx:yyyy:zzzz:aaaa::/64 префикс сети. Когда я теперь добавляю клиентов в сеть, они берут сетевой префикс и генерируют свои автоконфигурации и временные адреса. Это прекрасно работает.

Однако им не хватает правильного маршрута IPv6 по умолчанию. В таблице маршрутизации маршрутом по умолчанию для IPv6 является fe80:: Link-local адрес маршрутизатора.

Теперь пакеты не направляются в Интернет. Если я добавлю к хосту маршрут по умолчанию вручную, он заработает.

Мои вопросы

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

Локальный адрес ссылки должен работать нормально, и это действительно адрес, используемый rtadvd.

Я использую 6to4, но по сути это та же конфигурация. В моем случае все, что я делаю, это:

ifconfig stf0 create
ifconfig stf0 inet6 2002:c0a8:1:ffff::1/16
ifconfig lan0 inet6 2002:c0a8:1::1/64

Это просто создает соединение, ваш туннель должен пресекать ту же цель.

route add -inet6 default 2002:c058:6301::

С этой точки зрения ping6 ipv6.google.com работает от моего роутера.

sysctl net.inet6.ip6.forwarding=1

Теперь маршрутизация включена, даже с локальными адресами ссылок, если я вручную настрою клиентов на использование маршрутизатора, поскольку их DG IPv6 работает. Но нам нужен некоторый уровень автоконфигурации ... так что /etc/rtadvd.conf содержит:

lan0:\
    :addr="2002:c0a8:1::":prefixlen=64:tc=ether:

Осталось только добавить конфигурацию в мой rc.conf файл:

ipv6_gateway_enable="YES"               # Route IPv6 Traffic
rtadvd_enable="YES"                     # IPv6 Router Advertisement Daemon
rtadvd_interfaces="lan0"

cloned_interfaces="stf0"
ifconfig_stf0_ipv6="inet6 2002:c0a8:1:ffff::1/16"

ipv6_defaultrouter="2002:c058:6301::"   # 6to4 Default Router

У клиентов действительно есть маршрут по умолчанию fec0 :: range, но он отлично работает. А tcpdump показывает клиентов, отправляющих со своего глобального IPv6-адреса на адрес fec0.

Для всех, кто читает это и хочет выполнить 6to4, указанные выше «внутренние» адреса предназначены для 192.168.0.1, который не маршрутизируется в Интернете. Вам необходимо рассчитать свой собственный внутренний IPv6-адрес на основе вашего внешнего IPv4-адреса.