一行命令降低 IPv6 出站优先级

#RePost #Script #Network

https://www.nodeseek.com/post-73797-1

命令:

sed -Ei '/^[[:space:]]*#?[[:space:]]*precedence[[:space:]]+::ffff:0:0\/96[[:space:]]+100\b.*?$/ {s/.+100\b([[:space:]]*#.*)?$/precedence ::ffff:0:0\/96  100\1/; :a;n;b a}; /^[[:space:]]*precedence[[:space:]]+::ffff:0:0\/96[[:space:]]+[0-9]+.*$/ {s/^.*precedence.+::ffff:0:0\/96[^0-9]+([0-9]+).*$/precedence ::ffff:0:0\/96  100\t#原值为 \1/; :a;n;ba;}; $aprecedence ::ffff:0:0\/96  100' /etc/gai.conf


这个命令干了什么?

这个命令对/etc/gai.conf文件做了修改,由于是系统文件,请确保拥有足够的权限运行此命令

运行该命令会处理以下4种情况:

1. 遇到已经设定过ipv4最高优先级配置时,结束执行,不做任何修改
2. 在遇到被注释掉的ipv4优先级配置时,将取消其注释,同时保留该行配置文件的注释
3. 当遇到设定值非100的优先级设置时,将优先级设置为100并注明原值为多少
4. 当没有发现被注释掉的ipv4优先级配置时,在配置文件末尾添加配置

命令将会为/etc/gai.conf 文件配置以下值:

precedence ::ffff:0:0\/96  100


这行配置有什么用

::ffff:0:0/96 是ipv4的ipv6映射地址

这行配置将ipv4作为最高的优先级

为什么选择优先v4出站

现在主流系统都默认优先使用v6出站

但是一般来说网站对v4的支持效果更好,连接速度更佳(有时候v6去目标网站会绕路)

相信单这一点对于MJJ来说就已经够了

而且降低v6优先级并不是关闭v6,仍然能够访问v6 only网站

为什么不使用更简单点的命令

一寸长一寸强!

echo "precedence ::ffff:0:0\/96  100" >> /etc/gai.conf


这行命令当然可以实现降低v6优先级的效果

但是

1. 如果不小心重复运行将会导致配置文件底下出现多行相同配置项,影响美观(强迫症患者)
2. 如果已经配置过ipv4优先级了(比方说设置为60),那么直接用上面的echo命令会出现冲突

如何查看命令效果

使用

ping google.com


如果是ipv6优先,则会ping 到google的ipv6地址

v4优先则ping v4的地址

以下是v6出站示例

ping google.com
PING google.com(hkg12s13-in-x0e.1e100.net (2404:6800:4005:808::200e)) 56 data bytes
64 bytes from hkg12s37-in-x0e.1e100.net (2404:6800:4005:808::200e): icmp_seq=1 ttl=119 time=0.341 ms
64 bytes from hkg12s37-in-x0e.1e100.net (2404:6800:4005:808::200e): icmp_seq=2 ttl=119 time=0.350 ms
64 bytes from hkg12s37-in-x0e.1e100.net (2404:6800:4005:808::200e): icmp_seq=3 ttl=119 time=1.01 ms
64 bytes from hkg12s13-in-x0e.1e100.net (2404:6800:4005:808::200e): icmp_seq=4 ttl=119 time=0.325 ms
64 bytes from hkg12s37-in-x0e.1e100.net (2404:6800:4005:808::200e): icmp_seq=5 ttl=119 time=0.369 ms


使用命令之后可以看到出站变成v4优先了

ping google.com
PING google.com (142.250.204.78) 56(84) bytes of data.
64 bytes from hkg07s39-in-f14.1e100.net (142.250.204.78): icmp_seq=1 ttl=59 time=0.797 ms
64 bytes from hkg07s39-in-f14.1e100.net (142.250.204.78): icmp_seq=2 ttl=59 time=0.805 ms
64 bytes from hkg07s39-in-f14.1e100.net (142.250.204.78): icmp_seq=3 ttl=59 time=0.828 ms
64 bytes from hkg07s39-in-f14.1e100.net (142.250.204.78): icmp_seq=4 ttl=59 time=0.886 ms
64 bytes from hkg07s39-in-f14.1e100.net (142.250.204.78): icmp_seq=5 ttl=59 time=0.887 ms


注意

如果商家镜像中该配置文件的末尾已经有了该配置项(例如v.ps)脚本会将前面被注释掉的

#precedence ::ffff:0:0/96  100


给取消注释,导致有两个相同的配置。这是没有办法的,无法通过单单一行命令应对这种情况 ;_;

该命令可能不适配老系统,可能不适配redhet系(未测试)

经测试大便11/12没有问题,ubuntu较新系统没有问题
 
 
Back to Top
OKHK