如何在 Ubuntu 18.04 中手动分配静态 IP?

如何在 Ubuntu 18.04 中手动分配静态 IP?

我有一台运行 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].networkrenderer: 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。

也可以看看:RFC 4862systemd.网络(5)ip-sysctl.txt

相关内容