在双栈(IPv4 + IPv6)的 VPS 上,你希望 出站流量优先使用 IPv4,但 IPv6 仍然可以正常入站,可以通过以下方法实现:
-
方法 1:调整系统的
precedence
优先级Linux 使用
getaddrinfo()
进行域名解析,默认情况下 IPv6 可能优先。可以通过修改gai.conf
使 IPv4 优先:-
编辑
gai.conf
配置文件: -
找到
precedence ::ffff:0:0/96 100
这一行(可能被#
注释掉了),去掉#
号: -
保存并退出(
Ctrl+X
,然后Y
回车)。 -
验证是否生效:
如果 IPv4 结果在前,则修改成功。
方法 2:修改
sysctl
使 IPv4 优先如果
gai.conf
没有效果,还可以调整sysctl
。-
执行以下命令:
-
应用修改:
方法 3:修改
ip route
默认路由你可以手动指定 IPv4 作为默认路由,IPv6 只用于被动监听。
-
查看当前路由:
ip -4 route show ip -6 route show
-
如果 IPv6 默认路由存在,可以降低其优先级:
sudo ip -6 route change default dev eth0 metric 512
(不影响 IPv6 入站)
sudo ip -6 route del default
方法 4:应用
iptables
规则如果你还想进一步限制 VPS 出站 IPv6,确保 IPv6 只能被动接收流量,可以使用
ip6tables
-
阻止所有 IPv6 出站流量(入站不受影响):
如果只是想让 IPv6 仅用于被动监听(不影响 ping),可以允许 DNS 和 ICMP:
-
保存规则:
-
重启后自动应用
最终效果
- IPv4 出站优先
- IPv6 仍然可以用于入站访问
- 系统仍然支持 IPv6,但不会主动用 IPv6 访问外部
你可以尝试
curl -4 ifconfig.me
和curl -6 ifconfig.me
来测试出站 IP。 -
PS:如果你已经执行了 sudo ip -6 route del default
,但现在想恢复 IPv6 默认路由,可以手动添加回去:
sudo ip -6 route add default via 2400:8a20:AAA::1 dev eth0 metric 1024 onlink
如果你希望在重启后仍然保留 IPv6 默认路由,可以修改 /etc/network/interfaces
- 编辑网络配置文件:
- 在
eth0
配置下添加 IPv6 默认路由:
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END