Маршрут IPv6 по умолчанию НЕ установлен netplan Ubuntu 18.04.2 LTS

Маршрут IPv6 по умолчанию НЕ установлен netplan Ubuntu 18.04.2 LTS

Не могу настроить маршрут по умолчанию, используя netplanв системе Ubuntu 18.04.2. Маршрут работает, когда ip -6 route add ...вводятся явные команды.

Расширения конфиденциальности отключены:/etc/sysctl.d/10-ipv6-privacy.conf

net.ipv6.conf.all.use_tempaddr = 0
net.ipv6.conf.default.use_tempaddr = 0
net.ipv6.conf.ens192.use_tempaddr = 0

SLACC и RA отключены, переадресация IPv4/IPv6 включена (машина служит сервером OpenVPN)

/etc/sysctl.d/10-ipv6-router.conf

net.ipv6.conf.default.autoconf = 0
net.ipv6.conf.all.accept_ra = 0

net.ipv6.conf.all.proxy_ndp = 1

/etc/sysctl.conf

net.ipv4.ip_forward=1
...
net.ipv6.conf.all.forwarding=1

/etc/netplan/01-netcfg.yaml

network:
  version: 2
  renderer: networkd
  ethernets:
    ens18:
      dhcp4: no
      addresses:
        - a.b.c.d/24
      gateway4: a.b.c.e

      dhcp6: no
      accept-ra: no
      addresses:
        - "2001:0db8:0004:4a1a::dead:beef/64"
      gateway6: "2001:0db8:0004::0001"

    ens19:
      dhcp6: no
      accept-ra: no
      addresses:
        - "2001:0db8:0004:4a1a::dead:dead/64"
      gateway6: "2001:0db8:0004::0001"

Это назначает адреса интерфейсу, как показано ниже:

$ ip -6 addr show

2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
    inet6 2001:0db8:0004:4a1a::dead:beef/64 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::abcd:efff:fea3:2a03/64 scope link 
       valid_lft forever preferred_lft forever
3: ens19: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
    inet6 2001:0db8:0004:4a1a::dead:dead/64 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::defc:deff:fe98:7c74/64 scope link 
       valid_lft forever preferred_lft forever

Маршруты с использованиемip -6 route show

2001:0db8:0004:4a1a::/64 dev ens19 proto kernel metric 256 pref medium
2001:0db8:0004:4a1a::/64 dev ens18 proto kernel metric 256 pref medium

fe80::/64 dev ens19 proto kernel metric 256 pref medium
fe80::/64 dev ens18 proto kernel metric 256 pref medium

ЕстьнетНастроен маршрут по умолчанию, и пинг внешних сайтов НЕ работает:

$ ping -6 -c3 ipv6.google.com
connect: Network is unreachable

Выполнив следующие две команды:

$ sudo ip -6 route add 2001:0db8:0004::0001 dev ens18 metric 1
$ sudo ip -6 route add default via 2001:0db8:0004::0001 dev ens18 metric 1

Сейчас идут ip -6 routeшоу:

2001:0db8:4::1 dev ens18 metric 1 pref medium

2001:0db8:4:4a1a::/64 dev ens19 proto kernel metric 256 pref medium
2001:0db8:4:4a1a::/64 dev ens18 proto kernel metric 256 pref medium

fe80::/64 dev ens19 proto kernel metric 256 pref medium
fe80::/64 dev ens18 proto kernel metric 256 pref medium

default via 2001:0db8:4::1 dev ens18 metric 1 pref medium

Маршрут по умолчанию:сейчаснастроены и пингуются внешние сайтыработает:

$ ping -6 -c3 ipv6.google.com
PING ipv6.google.com(ord38s18-in-x0e.1e100.net (2607:f8b0:4009:804::200e)) 56 data bytes
64 bytes from ord38s18-in-x0e.1e100.net (2607:f8b0:4009:804::200e): icmp_seq=1 ttl=56 time=23.2 ms
64 bytes from ord38s18-in-x0e.1e100.net (2607:f8b0:4009:804::200e): icmp_seq=2 ttl=56 time=23.2 ms
64 bytes from ord38s18-in-x0e.1e100.net (2607:f8b0:4009:804::200e): icmp_seq=3 ttl=56 time=23.2 ms

--- ipv6.google.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 23.274/23.283/23.293/0.176 ms

Так что же не так с конфигурацией netplan? Почему не настраиваются маршруты IPv6 по умолчанию?

Отредактировано после внесения изменений, предложенных @slangasek:

 ethernets:
    ens18:
     ...

      dhcp6: no
      accept-ra: no
      addresses:
        - "2001:0db8:0004:4a1a::dead:beef/64"

      routes:
        - to: "::/0"
          via: "2001:0db8:0004::1"
          metric: 1
          on-link: true

Однако, это не такнетработа. Я получаю сообщения, как ens18: Could not set route: No route to hostв журналах.

Из ответа наhttps://askubuntu.com/a/1014683Я добавил дополнительный маршрут к маршрутизатору с помощью scope: link:

  routes:
    - to: "2001:0db8:0004::1/128"
      via: "2001:0db8:0004::1"
      metric: 1
      scope: link
    - to: "::/0"
      via: "2001:0db8:0004::1"
      metric: 1
      on-link: true

Но все равнонетработающий!

решение1

Ваша конфигурация показывает, что у вас есть локальная сеть 2001:0db8:0004:4a1a::/64, но вы пытаетесь настроить шлюз 2001:0db8:0004::0001, который не является частью этой сети. Поэтому networkd отказывается добавлять маршрут по умолчанию через маршрутизатор, к которому у вас нет маршрута.

Ваша ручная настройка ip routeтакже отражает это: сначала вы добавляете маршрут для адреса маршрутизатора, объявляете, что он локально подключен к вашему Ethernet, а затем устанавливаете маршрут по умолчанию.

Поэтому вам необходимо сделать то же самое с netplan, то есть объявить две записи в routes: одну, которая есть, scope: linkи одну, которая задает on-link: true:

  addresses:
    - "2001:0db8:0004:4a1a::dead:dead/64"
  routes:
    - to: "2001:0db8:0004::0001/128"
      scope: link
    - to: "::/0"
      via: "2001:0db8:0004::0001"
      on-link: true

решение2

network:
  version: 2
  renderer: networkd
  ethernets:
    ens19:
      dhcp6: no
      accept-ra: no
      addresses: ["2001:0db8:0004:4a1a::dead:dead/64"]
      gateway6: "2001:0db8:0004::0001"
      routes:
         - to: "2001:0db8:0004::0001/128"
           scope: link

На момент написания статьи у меня это работает на Ubuntu 18.04.4 LTS (используются разные сетевые блоки, но я проверял)

решение3

Я только что столкнулся с этой проблемой. Фактическая причина прописана прямо в /etc/sysctl.conf

# Uncomment the next line to enable packet forwarding for IPv6
#  Enabling this option disables Stateless Address Autoconfiguration
#  based on Router Advertisements for this host
#net.ipv6.conf.all.forwarding=1

Когда переадресация IPv6 отключена, хост не будет слушать объявления маршрутизатора, которые обычно определяют маршрут по умолчанию. Поэтому вам придется вручную добавить маршрут по умолчанию (и DNS-серверы, и все остальное, что вы получали из RA) или установить опцию ядра accept_raна 2, что переопределяет поведение.

См. эту статью в блогедля получения более подробной информации.

Связанный контент