我在新 VPS 上设置 IPv6 地址连接时遇到了麻烦。我以为我知道自己在做什么,但显然 networkd 不同意,我在尝试添加默认路由时一直遇到问题。
以下是我的 ISP 向我提供的网络信息:
Subnet 2001:19f0:6:2::/64
Gateway 2001:19f0:6::1
Nameserver 2001:4860:4860::8888
Nameserver 2001:4860:4860::8844
Interface: ens3
OS: Ubuntu 18.04.02
Systemd version: 237
当前设置
我可以使用以下 systemd 文件轻松设置我的 IP 地址并添加至网关的路由:
[Match]
Name=ens3
[Network]
Address=209.222.17.197/26
Gateway=209.222.17.193
DNS=8.8.8.8
[Network]
Address=2001:19f0:6:2::1337/64
[Route]
Destination=2001:19f0:6::1
我在 journalctl 中没有收到任何错误,我可以成功 ping 2001:19f0:6::1
,但我当然没有默认网关或互联网访问权限。我可以使用2001:19f0:6::1
以下命令轻松用作我的默认网关:
sudo ip -6 route add default via 2001:19f0:6::1
这给了我完整的 IPv6 路由,我可以 ping ipv6.google.com
。
问题
我似乎无法在 networkd 中设置默认网关,我花了很多时间尝试不同的选项组合,我认为这可能是一个错误。例如,如果我将配置修改为如下所示:
[Match]
Name=ens3
[Network]
Address=209.222.17.197/26
Gateway=209.222.17.193
DNS=8.8.8.8
[Network]
Address=2001:19f0:6:2::1337/64
[Route]
Destination=2001:19f0:6::1
[Route]
Gateway=2001:19f0:6::1
GatewayOnlink=true
我在 journalctl 日志中收到以下错误:
May 27 19:31:46 public-NY systemd-networkd[2452]: ens3: Could not set route: No route to host
我总是看到那个该死的错误“没有到主机的路由”,如果没有路由2001:19f0:6::1
那我为什么可以 ping 它?!
我已经受够了这个问题,但我想使用 netplan,因此我想使用 systemd-networkd 进行网络连接。我是不是在做蠢事,还是像 networkd 这样重要的东西真的这么糟糕?
答案1
可能是GatewayOnLink
导致了问题,因为据我所知,该网关不在链接上。您的链接子网是2001:19f0:6:2::/64
,而网关地址不在该子网中——它所/64
在的 是2001:19f0:6:0::/64 (extra
:0`(为了清楚起见,添加了)。
现在,我无法告诉您如何设法 ping 该网关地址 - 很可能是通过 RA 接收的,这在托管环境中很奇怪,但并非未知 - 但无论如何,它不是链接路由,因此 networkd 非常正确地告诉您使用您提供的参数没有到该主机的路由。