2024-05-16

Ubuntu 系统关闭某块网卡的IPv6连接

Ubuntu 系统有两块网卡,同时接入联通移动两家宽带,联通有公网IPv4,上行40m,移动只有公网IPv6,但上行带宽有100m。我们想让其中一块网卡只提供联通IPv4接入(利用其公网IPv4地址),另一块网卡只提供移动IPv6接入(利用其100m高速上行带宽)。

关闭IPv4比较简单,只要在 Ubuntu 系统自带的网络配置工具 netplan 的配置文件里使用“dhcp4: false”参数,接口就获取不到IPv4地址了,或者设置静态IPv4地址,同时不设置默认路由或网关(“gateway4”参数已废弃),接口也就无法接入Internet了。

对于IPv6来说,只设置“dhcp6: false”是不够的,因为接口还可以通过路由器通告RA,以无状态SLAAC方式自动配置IPv6地址,导致IPv6关不掉,系统产生两个IPv6默认网关,造成困扰。

其实netplan还有一个很有用的参数:“accept-ra”,在netplan配置文件的相应接口下,添加如下参数:

accept-ra: false

这样,该接口就无法通过SLAAC方式获得IPv6地址和默认路由了,配合 “dhcp6: false”使用效果更佳。

PS:之前一直是通过在/etc/sysctl.conf中加入“net.ipv6.conf.eno1.disable_ipv6=1”的方式关闭某块网卡的IPv6功能,但这个配置在重启系统后会失效,因此还需配合开机自启动脚本,系统运行途中遇到重启网络服务还是会失效,可靠性不高。

2024-05-15

为 Ubuntu 设置简短酷炫的自定义IPv6后缀

我们利用家庭宽带搭建 Ubuntu 服务器,其IPv6地址通常采用SLAAC无状态方式配置,由网卡MAC地址变换而来,较为冗长,对外提供服务时看起来不够酷炫。
IPv6前缀由运营商动态分配,这个我们动不了,那么怎样在保持自动获取前缀的同时,自定义一个后缀(即接口ID)呢?有以下两个办法:

方法一:通过路由器的DHCPv6分配静态后缀。这要求路由器支持此功能,比如采用OpenWRT系统的路由器。经过实际测试,这种方式有的时候会失效。而且局域网内某些设备只支持SLAAC方式获取IPv6地址,所以必须同时打开RA,导致服务器同时获取到多个IPv6地址,不利于动态域名解析配置。

方法二:利用 Ubuntu 自带网络配置工具 netplan 配置自定义后缀。这种方式不受路由器影响,只要路由器不开启DHCPv6服务,就可以让 Ubuntu 服务器只获得唯一一个IPv6地址,运行稳定可靠。

下面介绍第二种方法。只需要利用 netplan 的一个参数“ipv6-address-token”。

打开"/etc/netplan"目录下的配置文件,类似于这样“00-installer-config.yaml”,在相应网络接口下增加如下参数:
ipv6-address-token: "::a"
就可以得到类似“2408:8200:1234:3210::a”这样的IPv6地址。

或者这样:
ipv6-address-token: "::b:0:0:0"
就可以得到类似“2408:8200:1234:3210:b::”这样的IPv6地址。

“ipv6-address-token”的值要求是一个完整的IPv6地址,前缀部分应全部写0(不是0也不会起作用),后缀部分不能全为0,否则不生效,遵循IPv6地址缩写规则。

netplan配置文件的层级关系判断严格,必须注意每行参数的缩进。配置文件修改完成后务必用“netplan apply”命令应用配置,这样如果有错误会给出提示,千万不要直接重启,否则一旦配置文件有误将会与服务器失联。

Ubuntu 系统关闭某块网卡的IPv6连接

Ubuntu 系统有两块网卡,同时接入联通移动两家宽带,联通有公网IPv4,上行40m,移动只有公网IPv6,但上行带宽有100m。我们想让其中一块网卡只提供联通IPv4接入(利用其公网IPv4地址),另一块网卡只提供移动IPv6接入(利用其100m高速上行带宽)。 关闭IPv4...