Я заменяю маршрутизатор 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
... 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
.
У меня есть debian Linux, который делает почти то же самое (я не использую сервер dhcpv6 и использую dibbler в качестве клиента ipv6 dhcp для интерфейса ppp), в моей конфигурации PPP у меня есть:
defaultroute
replacedefaultroute
+ipv6
ipv6cp-accept-local
если вы добавите:
debug
в конфигурацию ppp вы получите подробную информацию о согласовании ipv6. Я подозреваю, тебе не хватает defaultroute
вариант
Не могли бы вы захватить трассировку ppp интерфейса с помощью tcpdump во время согласования ppp, чтобы вы могли видеть, предоставляется ли адрес ipv6 через RAS? Я занимаюсь разработкой программного обеспечения для маршрутизаторов, работающих под управлением встроенного Linux, и самый простой способ диагностировать проблемы согласования ppp - это захват пакетов pppoe на этом этапе (PADI, PADO, PADR, PADS, PADT).