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, потому что вы не маршрутизатор для своего провайдера, а их сторона - для вас.
Другие вопросы по тегам