ikoula 为其独立服务器提供 ipv6 地址,但默认情况下 ipv6 没有分配,需要用户自己配置。本文提供的配置方法基于 Ubuntu 18.04 系统,依据 ikoula 官方文档(官方文档点此直达)。经博主测试,官方文档有个大坑,博主亲自踩坑,现将配置方法分享出来供大家参考。

计算 ipv6 地址

根据 ikoula 官方文档,ikoula 提供的 ipv6 地址格式如下:
ipv6 地址格式:2a00:c70:1:AAAA:BBBB:CCCC:DDDD:YYYY/96
gateway6 地址格式:2a00:c70:1:AAAA:BBBB:CCCC:1:1
其中,AAAA:BBBB:CCCC:DDDD 为当前服务器的 ipv4 地址, YYYY 为任意从 0000FFFF 的合法十六进制数。

根据自己服务器的 ipv4 地址,可计算出 ikoula 分配给当前服务器的 ipv6 地址。例如,当前服务器的 ipv4 地址为 178.170.40.126 ,则相应的 ipv6 地址和 gateway6 地址分别为:
ipv6:2a00:c70:1:178:170:40:126:1/96
gateway6:2a00:c70:1:178:170:40:1:1

配置 ipv6 地址

Ubuntu 18.04 开始使用 netplan 进行网络设置,其配置文件为 /etc/netplan/01-netcfg.yaml ,配置步骤如下:

备份原配置文件

执行如下命令备份原配置文件:

cp /etc/netplan/01-netcfg.yaml /etc/netplan/01-netcfg.yaml.bak

修改配置文件

执行如下命令修改配置文件。注意,下述命令中的 ipv4 和 ipv6 需要修改为自己服务器的 ipv4 和 ipv6,同样的,gateway4 和 gateway6 也需要修改为自己服务器的 gateway4 和 gateway6:

cat > /etc/netplan/01-netcfg.yaml << EOF
network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: no
      dhcp6: no
      addresses: [178.170.40.126/24, '2a00:c70:1:178:170:40:126:1/96']  #此处的 ipv4 和 ipv6 修改为当前服务器的 ipv4 和 ipv6
      gateway4: 178.170.40.1  #此处的 gateway4 修改为当期服务器的 gateway4
      gateway6: 2a00:c70:1:178:170:40:1:1  #此处的 gateway6 修改为当期服务器的 gateway6
      nameservers:
        addresses: [213.246.36.14,213.246.33.144,80.93.83.11]
EOF

应用配置文件

执行如下命令应用配置文件:

netplan apply

按照官方文档,至此便完成了 ipv6 的配置。博主兴冲冲的 ping6 ipv6.google.com ,看看 ipv6 通不通,结果报错如下:

connect: Cannot assign requested address

终端中返回无法分配指定地址的错误。难道需要重启一下服务器?于是博主执行 reboot ,重启服务器,结果服务器再也无法连接上,只能通过网络启动挂载硬盘还原配置(不丢数据)或重置系统(丢数据)的方式解决。博主几经折腾,问题没有解决,仍然无法分配地址,仍然重启失联,可官方文档的配置说明就是这样啊。博主不死心,继续研究,发现 /etc/sysctl.d 目录下有个 40-ikoula.conf 文件,cat /etc/sysctl.d/40-ikoula.conf 一下看看有什么内容,得到的文件内容如下:

#Disable IPv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
net.ipv6.conf.eth0.disable_ipv6 = 1

#Disable Swap
vm.swappiness = 0

#Improve memory management
vm.dirty_ratio = 60
vm.dirty_background_ratio = 2
#No overcommitment of available memory
vm.overcommit_ratio = 0
vm.overcommit_memory = 0

#Set maximum amount of memory allocated to shm to 256MB
kernel.shmmax = 268435456
kernel.shmall = 268435456

#Keep at least 64MB of free RAM space available
vm.min_free_kbytes = 65535

到这里博主明白了,ikoula 的系统模板默认禁用了 ipv6 ,解决方法自然就是启用 ipv6 。

启用 ipv6

终端中执行如下四条命令启用 ipv6 :

sed -i 's/^.*net.ipv6.conf.all.disable_ipv6 = 1/net.ipv6.conf.all.disable_ipv6 = 0/' /etc/sysctl.d/40-ikoula.conf && \
sed -i 's/^.*net.ipv6.conf.default.disable_ipv6 = 1/net.ipv6.conf.default.disable_ipv6 = 0/' /etc/sysctl.d/40-ikoula.conf && \
sed -i 's/^.*net.ipv6.conf.lo.disable_ipv6 = 1/net.ipv6.conf.lo.disable_ipv6 = 0/' /etc/sysctl.d/40-ikoula.conf && \
sed -i 's/^.*net.ipv6.conf.eth0.disable_ipv6 = 1/net.ipv6.conf.eth0.disable_ipv6 = 0/' /etc/sysctl.d/40-ikoula.conf

重启一下服务器,再次执行 ping6 ipv6.google.com ,发现已经通了:

PING ipv6.google.com(par10s28-in-x0e.1e100.net (2a00:1450:4007:80a::200e)) 56 data bytes
64 bytes from par10s28-in-x0e.1e100.net (2a00:1450:4007:80a::200e): icmp_seq=1 ttl=57 time=3.86 ms
64 bytes from par10s28-in-x0e.1e100.net (2a00:1450:4007:80a::200e): icmp_seq=2 ttl=57 time=12.4 ms
64 bytes from par10s28-in-x0e.1e100.net (2a00:1450:4007:80a::200e): icmp_seq=3 ttl=57 time=4.39 ms
64 bytes from par10s28-in-x0e.1e100.net (2a00:1450:4007:80a::200e): icmp_seq=4 ttl=57 time=3.40 ms
64 bytes from par10s28-in-x0e.1e100.net (2a00:1450:4007:80a::200e): icmp_seq=5 ttl=57 time=5.28 ms
64 bytes from par10s28-in-x0e.1e100.net (2a00:1450:4007:80a::200e): icmp_seq=6 ttl=57 time=3.34 ms
64 bytes from par10s28-in-x0e.1e100.net (2a00:1450:4007:80a::200e): icmp_seq=7 ttl=57 time=7.34 ms
64 bytes from par10s28-in-x0e.1e100.net (2a00:1450:4007:80a::200e): icmp_seq=8 ttl=57 time=12.1 ms
64 bytes from par10s28-in-x0e.1e100.net (2a00:1450:4007:80a::200e): icmp_seq=9 ttl=57 time=5.19 ms
^C
--- ipv6.google.com ping statistics ---
9 packets transmitted, 9 received, 0% packet loss, time 8013ms

至此,成功的为 ikoula Ubuntu 18.04 独服配置了 ipv6 地址,踩坑结束。

文章目录