Не могу настроить маршрут по умолчанию, используя 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, что переопределяет поведение.
См. эту статью в блогедля получения более подробной информации.