更新
29191222
qbittorrent在201912更新的4.2.1版本中,在“设置”中添加了“高级”选项卡,可以自定义“网络接口”和“绑定可选的IPv6地址”,解决了问题场景的“新申请配置的ipv6并没有替代默认开通的ipv6”的问题。
20191213
如果参照如下方式配置成功,但出现IPv6失联或失效的情况,请参考这篇文章。
问题场景
2019年2月8日起,Online新开通的独服默认开启了IPV6。使用Ubuntu 18.04通过IPV6刷PT,因为这个作业系统可以使用最新版的qbittorrent软体。但是由于qbittorrent有限速缺陷,有一天发现这个IPV6被标记了。于是申请一个新的IPV6,通过目前网络上现有的教程,可以配置成功新的IPV6。问题来了,新申请配置的ipv6并没有替代默认开通的ipv6,而是两者共存。qbittorrent仍然使用系统默认开通的IPV6。
解决思路
官网教程说配置新的IPV6,需要开启SLAAC,否则服务器无法识别默认路由(If disabled, a server will not be able to learn its IPv6 default route)。但是实际上,目前,不管在网页控制台中是否启用“ACTIVATE IPV6 SLAAC”,Online 后台都已经默认开启了SLAAC,并通过路由通告Router Advertisement(RA)配置一个128位的IPV6。
经过多次尝试,解决思路是获取默认路由,申请新IP,配置新IP和路由,具体步骤:
- 获取默认开启的IPV6路由,实际上只要获取IPV6网关地址即可;
- 申请新的IPV6地址,先申请/48段,再继续划分为一个/56,并记录/56 IPV6的DUID,用/48的也行;
- 配置dhclient、dhclient-netplan服务,内容完全照搬大佬的教程;
- 配置netplan:关闭RA,自定义IPV6地址和网关。
操作过程
获取网卡和IPV6路由
系统安装好后,通过以下命令查看IPV6路由,类似如下:
ip -6 route show
2001:1234:5678:1234::/64 dev enp1s0 proto ra metric 100 pref medium
fe80::/64 dev enp1s0 proto kernel metric 256 pref medium
default via fe80::1234:5678:1234:5678 dev enp1s0 proto ra metric 100 mtu 1500 pref medium
获取网卡名称:enp1s0;获得IPV6网关:fe80::1234:5678:1234:5678
申请新的IPV6地址
登录网页控制界面,申请/48段IPV6地址,然后再获取/56段地址,并记录其DUID。比如:
2001:1234:2345:500::/56 | | | 12:34:56:78:90:ab:cd:ef:12:34 |
---|
获取IPV6地址:2001:1234:2345:500::/56,在后续使用时,不存在空格;获取DUID:12:34:56:78:90:ab:cd:ef:12:34。
配置dhclient服务
编写dhclient配置文件
sudo vi /etc/dhcp/dhclient6.conf
内容如下:
interface "enp1s0" {
send dhcp6.client-id 12:34:56:78:90:ab:cd:ef:12:34;
request;
}
将enp1s0和12:34:56:78:90:ab:cd:ef:12:34改为自己获取的网卡名称和DUID。
编写dhclient服务
sudo vi /etc/systemd/system/dhclient.service
内容为:
[Unit]
Description=dhclient for sending DUID IPv6
Wants=network.target
Before=network.target
[Service]
Type=forking
ExecStart=/sbin/dhclient -cf /etc/dhcp/dhclient6.conf -6 -P -v enp1s0
[Install]
WantedBy=multi-user.target
将enp1s0替换为自己的网卡名称
设置开机启动:
sudo systemctl enable dhclient.service
编写dhclient-netplan服务
sudo vi /etc/systemd/system/dhclient-netplan.service
内容如下:
[Unit]
Description=redo netplan apply after dhclient
Wants=dhclient.service
After=dhclient.service
Before=network.target
[Service]
Type=oneshot
ExecStart=/usr/sbin/netplan apply
[Install]
WantedBy=dhclient.service
设置开机启动:
sudo systemctl enable dhclient-netplan.service
修改netplan配置文件
自定义ipv6地址、网关,并关闭路由通告(RA)。
sudo vi /etc/netplan/01-netcfg.yaml
修改后,最终样式如下:
# This file describes the network interfaces available on your system
# For more information, see netplan(5).
network:
version: 2
renderer: networkd
ethernets:
enp1s0:
dhcp4: yes
accept-ra: no
dhcp6: no
addresses:
- 2001:1234:2345:500::/56
gateway6: fe80::1234:5678:1234:5678
将2001:1234:2345:500::/56修改为获取的IPV6地址;将fe80::1234:5678:1234:5678修改为获取的IPV6网关;accept-ra: no的作用是不接受RA通告的IPV6,也就是不获得默认的/128位的IPV6。
重启系统,此时应该就可以了。