本来是想在架设IPv6 VPN的时候顺带提一下的,后来发现这个地方问题很大,所以单独拿出来写。

在创建Droplet的时候就在Available Settings中把IPv6打钩的都没有什么问题,只需要注意显示的IPv6地址后面的/64实际用的时候删去就行了。这里主要说的是后来开启IPv6的情况。

一、开启IPv6

很容易,登录DigitalOcean Contorl Panel

选择需要开启IPv6的Droplet

选择Settings

点击Public IPv6 Network下的Enable

等待几秒钟就会出现分配好的IPv6地址等信息,比如我的:

PUBLIC IPV6 ADDRESS:
2604:a880:1:20::13:c001/64

PUBLIC IPV6 GATEWAY:
2604:a880:1:20::1

CONFIGURABLE ADDRESS RANGE:
2604:a880:1:20::13:c000 - 2604:a880:1:20::13:c00f

注意:

  • 此IPv6地址不需要重启服务器即已生效
  • 像我的IPv6地址这里显示的是2604:a880:1:20::13:c001/64,而实际使用时是不需要后面的/64的,即我的IPv6地址为2604:a880:1:20::13:c001

此时从本地计算机ping这个IPv6地址是ping不通的,如:

ping 2604:a880:1:20::13:c001

会出现:

无法访问目标主机。
请求超时。
无法访问目标主机。
请求超时。

其实原因是:DigitalOcean虽然已经将此IPv6地址分配给这个Droplet,但此Droplet服务器网卡中还未更新IPv6地址。

二、修改服务器IPv6配置

使用这个命令可以看到服务器网卡目前设置的IPv6地址:

ip -6 addr show eth0

可以看到例如:

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
        inet6 fe80::601:1cff:fe11:5b01/64 scope link 
           valid_lft forever preferred_lft forever

解决ping不通的方法就是手动配置IPv6地址。

首先配置IPv6地址:

ip -6 addr add YOUR_PUBLIC_IPV6_ADDRESS/64 dev eth0

然后配置IPv6网关:

ip -6 route add default via YOUR_PUBLIC_PIV6_GATEWAY dev eth0

这样再ping自己服务器的IPv6地址就能ping通了,不过服务器重启后又会要重复上述步骤。

三、固化IPv6配置

为了避免每次重启服务器都要重新配置IPv6,可以通过写入服务器网络配置文件的方式实现。

Ubuntu下,编辑/etc/network/interfaces文件:

nano /etc/network/interfaces

将下面的内容添加到文件中:

iface eth0 inet6 static
        address YOUR_PUBLIC_IPV6_ADDRESS
        netmask 64
        gateway YOUR_PUBLIC_PIV6_GATEWAY
        autoconf 0
        dns-nameservers 2001:4860:4860::8844 2001:4860:4860::8888 209.244.0.3

注意:上面的YOUR_PUBLIC_IPV6_ADDRESS最后没有/64

重启后即生效。

这样即可正常使用此IPv6地址,甚至用来SSH登录。

参考:How To Enable IPv6 for DigitalOcean Droplets