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 外部站點不起作用:
$ 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 外部站點作品:
$ 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
也反映了這一點:您首先為路由器位址添加一條路由,聲明它本地連接到您的以太網,然後設定預設路由。
因此,您必須使用 netplan 執行相同的操作,即在 paths: 中宣告兩個項目,一個是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,這會覆寫該行為。
請參閱這篇部落格文章了解更多。