我有一台运行 Ubuntu 18.04 的 VPS 服务器,它有一个 /64 子网的 IPv6 地址。为了撰写本文,我们将其称为 2601:aaaa:aaaa:aaaa::/64。VPS 网站说我可以使用此子网内的任何地址,但是服务器有一个自动分配的地址 2601:aaaa:aaaa:aaaa:xxxx:xxxx:xxxx:xxxx。我已将 netplan 配置为使用静态 IPv6,即 2601:aaaa:aaaa:aaaa::1,但是这似乎并没有完全起作用,因为当我输入 ifconfig 时,我看到两个公共 IPv6 地址:我配置的 IP 地址和自动分配的 IP 地址。我注意到服务器仍在使用自动分配的 IP。如果我运行“/sbin/ip -6 addr del 2601:aaaa:aaaa:aaaa:xxxx:xxxx:xxxx:xxxx/64 dev ens3”,然后运行 ifconfig,自动分配的 IP 会消失,服务器会使用我分配的 IP,但几分钟后或重新启动后,自动分配的 IP 会自行重新出现。我怎样才能永久让服务器使用我分配的 IPv6?以下是我尝试过的方法:编辑 netplan、更改配置以禁用 ipv6 隐私地址、禁用路由器广告(这不起作用,因为我需要一个 ipv6 网关,而我的 VPS 提供商不会向我提供)
这是我的网络计划:
network:
version: 2
renderer: networkd
ethernets:
ens3:
dhcp4: no
dhcp6: no
addresses: [xxx.xxx.xxx.xxx/23,'2601:aaaa:aaaa:aaaa::1/64']
gateway4: xxx.xxx.xxx.1
nameservers:
addresses: [My provider's IP]
routes:
- to: 169.254.0.0/16
via: [My provider's IP]
metric: 100
答案1
你想停止接受路由器公告。我对 Ubuntu 和您使用的配置文件一无所知,但如果您使用的是 systemd-networkd,您可以在管理 NIC 的文件部分IPv6AcceptRA=no
下使用来停止它。如果您不是(甚至不在幕后;正如我所见),运行以下之一应该可以:[Network]
.network
renderer: networkd
sysctl -w net.ipv6.conf.all.accept_ra=0
或者甚至只是
sysctl -w net.ipv6.conf.ens3.accept_ra=0
(将其中任意一个放入 ,不带sysctl -w
, 到/etc/sysctl.conf
或/etc/sysctl.d/some_name.conf
,应使设置在靴子中持久存在)
您可能希望首先检查 的当前值net.ipv6.conf.ens3.accept_ra
(带有sysctl
但不带有-w
和=0
),以查看是否是内核(而不是 systemd-networkd)一直在处理路由器公告。如果已经是0
,那么很可能是 systemd-neworkd 一直在做这项工作。
编辑:看起来你可以添加accept-ra: no
阻止它
编辑2:文档中指出If unset use the host kernel default setting.
,所以也许sysctl
这就是你所需要的。但据我所知,systemd-networkd总是只要配置为管理接口,至少是最新版本,它就会接管工作。但我想accept-ra: no
无论如何都会这样做,假设这会阻止内核和 systemd-networkd 接受 RA。