logo NodeSeekbeta

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

先说命令:

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较新系统没有问题
脚本未在ipv6 only小鸡上测试,不知道会变成什么样

123
  • sed -i 's/#precedence ::ffff:0:0\/96  100/precedence ::ffff:0:0\/96  100/' /etc/gai.conf
    
  • 帮顶

  • 帮顶

  • bd xhj003

  • 绑定

  • 感谢vpsex老师,学会了

  • 支持

  • @lea #4 也挺好的,纯净的系统都是默认有个

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

    这个被注释掉的配置项在里面的

    我在命令中则是又多针对了几种情况

  • 好活

  • 学习

123

你好啊,陌生人!

我的朋友,看起来你是新来的,如果想参与到讨论中,点击下面的按钮!

📈用户数目📈

目前论坛共有15411位seeker

🎉欢迎新用户🎉