IPv6 PPP Link не может пересылать объявления маршрутизатора в локальную локальную сеть
Сервер Debian, имеющий eth0
, eth1
, eth2
, ppp0
устройства:
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether xx:yy:zz:yy:xx:yy brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether xx:yy:zz:yy:xx:yy brd ff:ff:ff:ff:ff:ff
4: eth2: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
link/ether xx:yy:zz:yy:xx:yy brd ff:ff:ff:ff:ff:ff
63: ppp0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1492 qdisc pfifo_fast state UNKNOWN qlen 3
link/ppp
пересылка включена везде:
/proc/sys/net/ipv6/conf ~
all/forwarding=1 default/forwarding=1
eth0/forwarding=1 eth1/forwarding=1
eth2/forwarding=1 ppp0/forwarding=1
и autoconf тоже активирован:
/proc/sys/net/ipv6/conf ~
all/autoconf=1 default/autoconf=1
eth0/autoconf=0 eth1/autoconf=1
eth2/autoconf=1 ppp0/autoconf=1
далее RA (= Объявление маршрутизатора) принимается на любом устройстве, но настройка accept_ra=2 для по крайней мере ppp0
а также eth1
:
/proc/sys/net/ipv6/conf ~
all/accept_ra=1 default/accept_ra=1
eth0/accept_ra=1 eth1/accept_ra=2
eth2/accept_ra=0 lo/accept_ra=1
ppp0/accept_ra=2
Соединение PPP установлено успешно, с параметром ipv6::dead:beef, установленным в конфигурационном файле / etc / ppp / peer / myProvider:
63: ppp0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1492 qlen 3
inet6 2003:42:e67f:d3ca:6105:155:f2b3:71f0/64 scope global temporary dynamic
valid_lft 14266sec preferred_lft 1666sec
inet6 2003:42:e67f:d3ca::dead:beef/64 scope global dynamic
valid_lft 14266sec preferred_lft 1666sec
inet6 fe80::dead:beef/10 scope link
valid_lft forever preferred_lft forever
и устанавливается маршрут по умолчанию на локальный адрес провайдера:
2003:42:e67f:d3ca::/64 dev ppp0 proto kernel metric 256 expires 13559sec
fe80::/64 dev ppp0 proto kernel metric 256
fe80::/10 dev ppp0 metric 1
fe80::/10 dev eth1 proto kernel metric 256
fe80::/10 dev ppp0 proto kernel metric 256
fe80::/10 dev eth0 metric 1024
default via fe80::90:1a10:1b2:b780 dev ppp0 proto kernel metric 1024 expires 1789sec
Публика 2003:42:e67f:d3ca::/64
у префикса есть маршрут к ppp0
устройство.Radvd установлен и работает, Radvdump показывает ppp0
IPv6-соединение, отправляющее RA
interface ppp0
{
AdvSendAdvert on;
# Note: {Min,Max}RtrAdvInterval cannot be obtained with radvdump
AdvManagedFlag off;
AdvOtherConfigFlag on;
AdvReachableTime 0;
AdvRetransTimer 0;
AdvCurHopLimit 0;
AdvDefaultLifetime 1800;
AdvHomeAgentFlag off;
AdvDefaultPreference medium;
AdvLinkMTU 1492;
prefix 2003:42:e67f:d3ca::/64
{
AdvValidLifetime 14400;
AdvPreferredLifetime 1800;
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr off;
}; # End of prefix definition
}; # End of interface definition
С хоста сервера я могу успешно пропинговать хост из интернета. Теперь, когда я пытаюсь заставить RA, запрашивая маршрутизатор для ppp0
я получил:
Soliciting ff02::2 (ff02::2) on ppp0...
Hop limit : undefined ( 0x00)
Stateful address conf. : No
Stateful other conf. : Yes
Router preference : medium
Router lifetime : 1800 (0x00000708) seconds
Reachable time : unspecified (0x00000000)
Retransmit time : unspecified (0x00000000)
MTU : 1492 bytes (valid)
Prefix : 2003:42:e67f:d3ca::/64
Valid time : 14400 (0x00003840) seconds
Pref. time : 1800 (0x00000708) seconds
То, что я ожидал бы, - то, что все узлы на eth1
настроить SLAAC, но когда я пытаюсь получить eth1
я получил:
Soliciting ff02::2 (ff02::2) on eth1...
Timed out.
Timed out.
Timed out.
No response.
- Я не хочу использовать DHCPv6, но SLAAC через radvd
- Я бы хотел, чтобы bash kung fu не вырезал фактический префикс от провайдера (например, из вывода rdisc6), чтобы настроить файл radvd.conf самостоятельно (например, в случае if-up)
- Соединение устройств не является решением. Устройство PPP является виртуальным и не может быть соединено.
Каким-то образом пересылать пакеты RA из ppp0
в eth1
(и для любого другого устройства) не похоже на работу вообще. Зачем? Насколько я понимаю, любой маршрутизатор с модемом DSL должен каким-то образом пересылать RA со своего внутреннего модемного устройства на подключенные физические порты локальной сети, иначе любой подключенный хост не получит адрес IPv6, верно? Теперь, где разница между маршрутизатором и моей коробкой Debian? Я был бы признателен за любую подсказку, которую вы можете иметь.
2 ответа
Рекламные объявления маршрутизатора не должны быть переданы. Поэтому, когда вы обнаружите, что они не пересылаются, то, по крайней мере, эта часть работает как задумано.
Предполагается, что на вашем маршрутизаторе запущен собственный демон объявления маршрутизатора, который объявляет себя в локальных сетях.
У вас должно быть три отдельных /64 префикса для ваших трех локальных сетей. Таким образом, вам нужно маршрутизировать /62 или короче от вашего провайдера. Это не проблема, потому что ваш провайдер должен дать вам более короткий префикс для этой цели (насколько короткий зависит от того, кого вы спрашиваете, изначально это был /48, но некоторые раздали бы только /56).
Если по каналу ppp доступен сервер DHCPv6, вы можете отправить запрос DHCPv6 с просьбой передать вам префикс. В противном случае вам, возможно, придется поговорить с человеком.
Структура для такой настройки IP обычно:
- Вы получаете RA через ppp0, поэтому ваша система получает маршрут по умолчанию и, возможно, префикс
- Вы запускаете в системе клиента DHCPv6-PD, чтобы запросить маршрутизируемый префикс у провайдера
- Вы используете /64s из этого префикса для нумерации вашего другого интерфейса
- Вы используете radvd для отправки RA на локальные интерфейсы, чтобы другие системы знали, как настроена ваша сеть ipv6
- Вы не отправляете RA в ppp0, потому что вы не маршрутизатор для своего провайдера, а их сторона - для вас.