Сервер Linux не получает маршрут IPv6 по умолчанию по каналу PPP

Я заменяю маршрутизатор pfSense в удаленном офисе на небольшое устройство с Linux, работающее под управлением Debian. Маршрутизатор должен обрабатывать только базовые возможности iptables / DHCP и VPN. Он настроен таким образом, что восходящий поставщик является соединением PPPoE, для которого предоставляются статические адреса IPv4 и IPv6 (и префикс IPv6).

Я использую комбинацию radvd, wide-dhcpv6-client, wide-dhcpv6-server и ppp для настройки адресации. Почти все работает, за исключением того факта, что маршрутизатор не получает маршрут IPv6 по умолчанию, когда ppp0 подходит Клиенты могут пропинговать маршрутизатор, но маршрутизатор не может пропинговать внешний мир.

Я настроил wide-dhcpv6-client как это (eth0 это локальный сетевой адаптер):

profile default
{
  request domain-name-servers;
  request domain-name;

  script "/etc/wide-dhcpv6/dhcp6c-script";
};
interface ppp0 {
    send ia-pd 0;
    send rapid-commit;
};

id-assoc pd 0 {
    prefix-interface eth0 {
        sla-len 0;
        sla-id 1;
        ifid 1;
    };
};

Предоставленные вышестоящие DNS-серверы правильно заполнены в resolv.conf (как IPv4, так и IPv6) и адрес IPv6 включен eth0 установлен на правильный адрес (2001:111:1111::1), а также radvd рекламирует правильный префикс. Тем не мение, ip -6 show route не указан ни один шлюз:

2001:111:1111::/48 dev eth0  proto kernel  metric 256
fe80::/64 dev eth1  proto kernel  metric 256
fe80::/64 dev ppp0  proto kernel  metric 256
fe80::/64 dev eth0  proto kernel  metric 256
fe80::/10 dev ppp0  metric 1
fe80::/10 dev ppp0  proto kernel  metric 256

У меня также есть следующие настройки:

net.ipv6.conf.ppp0.forwarding = 2
net.ipv6.conf.ppp0.accept_ra = 2

Если я просто сделаю ip -6 route add 0::/0 dev ppp0, IPv6 маршрутизация волшебным образом начинает работать. Тем не менее, я ожидаю, что когда ppp0 интерфейс появляется, маршрут должен быть автоматически настроен, вместе с префиксом, DNS-серверами и всем остальным.

Маршрутизация IPv6 работает в pfSense (2.1), поэтому я не думаю, что она делает что-то смешное в апстриме. Нужно ли вручную добавлять этот маршрут каждый раз ppp0 подходит, или это должно работать автоматически?

Изменить Я включил режим отладки на dhcp6c и это то, что получает вывод, когда интерфейс появляется: http://pastebin.com/dUDPm2D1

3 ответа

У меня Debian Linux box делает почти то же самое (я не использую сервер dhcpv6 и использую dibbler в качестве клиента ipv6 dhcp для интерфейса ppp), в моей конфигурации PPP я получил:

defaultroute
replacedefaultroute
+ipv6
ipv6cp-accept-local

если вы добавите:

debug

в конфигурации ppp вы получите подробную информацию о согласовании ipv6. Я подозреваю, что вам не хватает defaultroute вариант

...NET.ipv6.conf.ppp0.accept_ra = 2

Чтобы гарантировать, что параметры конфигурации ядра действительно устанавливаются каждый раз, когда запускается устройство ppp, попробуйте использовать правило udev:

KERNEL=="ppp0", SUBSYSTEM=="net", ACTION=="add", RUN+="/bin/bash -c 'echo 2 >/proc/sys/net/ipv6/conf/ppp0/accept_ra; echo 2 >/proc/sys/net/ipv6/conf/ppp0/forwarding;'"

Поместите его где-нибудь в /etc/udev/rules.d/ и восстановите соединение ppp. В некоторых случаях мой настроен accept_ra значение было сброшено до значения по умолчанию (если они различаются) после исчезновения устройства ppp при отключении. При повторном подключении я тоже пропустил маршрут по умолчанию из-за неправильного значения, установленного в accept_ra,

Не могли бы вы захватить трассировку ppp интерфейса с помощью tcpdump во время согласования ppp, чтобы вы могли видеть, предоставляется ли адрес ipv6 в RAS? Я работаю над разработкой sw для маршрутизаторов со встроенным linux, и самый простой способ диагностики проблем согласования ppp - это захват пакетов pppoe на этом этапе (PADI, PADO, PADR, PADS, PADT).

Другие вопросы по тегам