双栈vps 设置ipv4 优先出站,ipv6 可以正常入栈

双栈vps 设置ipv4 优先出站,ipv6 可以正常入栈

在双栈(IPv4 + IPv6)的 VPS 上,你希望 出站流量优先使用 IPv4,但 IPv6 仍然可以正常入站,可以通过以下方法实现:

  1. 方法 1:调整系统的 precedence 优先级

    Linux 使用 getaddrinfo() 进行域名解析,默认情况下 IPv6 可能优先。可以通过修改 gai.conf 使 IPv4 优先:

    1. 编辑 gai.conf 配置文件

      sudo nano /etc/gai.conf
    2. 找到 precedence ::ffff:0:0/96 100 这一行(可能被 # 注释掉了),去掉 # 号:

      precedence ::ffff:0:0/96 100
    3. 保存并退出Ctrl+X,然后 Y 回车)。

    4. 验证是否生效

      getent ahosts google.com

      如果 IPv4 结果在前,则修改成功。


    方法 2:修改 sysctl 使 IPv4 优先

    如果 gai.conf 没有效果,还可以调整 sysctl

    1. 执行以下命令

      echo "net.ipv6.conf.all.disable_ipv6 = 0" | sudo tee -a /etc/sysctl.conf
      echo "net.ipv6.conf.default.disable_ipv6 = 0" | sudo tee -a /etc/sysctl.conf
      echo "net.ipv6.conf.lo.disable_ipv6 = 0" | sudo tee -a /etc/sysctl.conf
      echo "net.ipv6.conf.all.prefer_ipv4 = 1" | sudo tee -a /etc/sysctl.conf
    2. 应用修改

      sudo sysctl -p

    方法 3:修改 ip route 默认路由

    你可以手动指定 IPv4 作为默认路由,IPv6 只用于被动监听。

    1. 查看当前路由

      ip -4 route show ip -6 route show
    2. 如果 IPv6 默认路由存在,可以降低其优先级

      sudo ip -6 route change default dev eth0 metric 512

      (不影响 IPv6 入站)

      sudo ip -6 route del default

    方法 4:应用 iptables 规则

    如果你还想进一步限制 VPS 出站 IPv6,确保 IPv6 只能被动接收流量,可以使用 ip6tables

    1. 阻止所有 IPv6 出站流量(入站不受影响)

      sudo ip6tables -A OUTPUT -o eth0 -j DROP

      如果只是想让 IPv6 仅用于被动监听(不影响 ping),可以允许 DNS 和 ICMP:

      sudo ip6tables -A OUTPUT -p icmpv6 -j ACCEPT sudo ip6tables -A OUTPUT -p udp --dport 53 -j ACCEPT
    2. 保存规则

      sudo ip6tables-save | sudo tee /etc/ip6tables.rules
    3. 重启后自动应用

      echo "ip6tables-restore < /etc/ip6tables.rules" | sudo tee -a /etc/rc.local sudo chmod +x /etc/rc.local

    最终效果

    • IPv4 出站优先
    • IPv6 仍然可以用于入站访问
    • 系统仍然支持 IPv6,但不会主动用 IPv6 访问外部

    你可以尝试 curl -4 ifconfig.mecurl -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

  • 编辑网络配置文件
    sudo nano /etc/network/interfaces
  • eth0 配置下添加 IPv6 默认路由
    auto eth0
    iface eth0 inet6 static
        address 2400:8a20:AAA::63  # 你的 IPv6 地址
        netmask 48
        gateway 2400:8a20:AAA::1

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享