DMIT 是少数提供中国大陆优化的 IPv6 网络的服务商,这是我选它家的一个很重要的因素。而且 DMIT 默认为每台 VPS 分配一整段 /64 IPv6 地址。Linux 内核又会通过 SLAAC 自动生成一个类似2001:0db8:1:2:b4c2:e9a5:f123:c842这样的地址,太长了,看着眼花。本文分享如何给主机指定靓号 IPv6 地址🤩
假如你分配的地址为2001:0db8:1:2:b4c2:e9a5:f123:c842,那么整个2001:0db8:1:2::/64 都是你的😎你可以选用以下地址:
2001:0db8:1:2::/642001:0db8:1:2::1/642001:0db8:1:2::a/64
我最喜欢第一个,因为它最短。在 IPv4 网络中,主机部分全为零表示网络地址,比如 192.168.1.0,不能用作主机 IP 地址。但 IPv6 不一样,允许主机部分全为零。所以就有了最短的地址。
虽然 IPv6 允许,但有些服务商,如 Oracle,会自己占用 2001:0db8:1:2::/64 这类地址,甚至连 2001:0db8:1:2::1/64 都可能被用作默认网关。大家要搞清楚自己的情况。而 DMIT 则是将整个 /64 段都分配给云主机,大家随便用。
选好地址我们开始修改系统配置。
首先是 netplan 配置。DMIT 的主机使用 netplay 设置网络地址,配置文件在 /etc/netplan/50-cloud-init.yaml, 内容类似:
network:
version: 2
ethernets:
eth0:
match:
macaddress: "1a:2b:3c:4d:5f:6e"
addresses:
- "192.168.1.2/32"
- "2001:db8:1:2::/64"
nameservers:
addresses:
- 1.1.1.1
- 1.0.0.1
search: []
set-name: "eth0"
routes:
- on-link: true
to: "default"
via: "192.168.1.1"注意,其中 address 项的 IPv6 地址是我们自己加上去的,最初只有一个 IPv4 地址。
改完之后执行netplan apply命令就会生效。
查看当前 IP 地址:
ip -6 addr show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
inet6 2001:db8:1:2:abcd:abcd:abcd:abcd/64 scope global dynamic mngtmpaddr noprefixroute
valid_lft 86396sec preferred_lft 14396sec
inet6 2001:db8:1:2::/64 scope global
valid_lft forever preferred_lft forever
inet6 fe80::abcd:abcd:abcd:abcd/64 scope link proto kernel_ll
valid_lft forever preferred_lft forever第一个是内核通过 SLAAC 自动生成的地址,第二个是我们定制的地址,第三个是 link-local 地址。
到这一步,我们就可以通过靓号地址2001:db8:1:2::访问服务器了。如果你有域名,可以设一个 AAAA 记录指向这个地址。
虽然从外部可以通过新 IPv6 地址访问,但如果从我们的服务器访问外部的 IPv6 服务,内核还是会使用那个长地址。具体细节涉及到复杂的 IPv6 地址选择逻辑,这里不展开。
如果相关服务需要设置 IPv6 来源地址白名单,比如我自己的搭建的 DNS 权威服务器就需要在备用节点对主节点 IPv6 地址加白,那么就得要求 Linux 在访问外部网络时优先使用我们设置的靓号地址!
大家可以先执行curl ip.network验证一下自己的默认 IPv6 地址。
我查了很多内容,都不管用。可能也是因为我还运行了 systemd-networkd 的缘故,情况比较复杂。但实验发现,最稳定的办法还是禁用 SLAAC 功能,也就是不让内核生成临时地址。
如果你没有启用 systemd-networkd 应该只要创建/etc/sysctl.d/ipv6.conf内容如下:
net.ipv6.conf.eth0.autoconf = 0
意思是针对 eth0 网卡禁用自动生成 IPv6 地址功能,如果你的网卡不是 eth0 请按需修改。
如果你像我一样开启了 systemd-networkd,就需要创建 /etc/systemd/network/10-netplan-eth0.network.d/override.conf 文件:
[IPv6AcceptRA]
UseAutonomousPrefix=no
意思跟前面的 sysctl 是一样的。重启服务器再看 eth0 的 IPv6 地址:
ip -6 addr show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
inet6 2001:db8:1:2::/64 scope global
valid_lft forever preferred_lft forever
inet6 fe80::abcd:abcd:abcd:abcd/64 scope link proto kernel_ll
valid_lft forever preferred_lft forever
是不是就清真了🎉
再执行curl ip.network就看到返回靓号地址了🥂






















