У меня следующая ситуация: я настроил машину 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-адреса.