主题
Linux IPv4-IPv6 双栈网络如何设置IPv4优先出网
1. 检查当前网络配置
bash
# 查看系统支持的 IP 协议版本
ip a2. 通过内核关闭 IPv6
这种方法会完全禁用系统的 IPv6 功能,强制所有网络连接使用 IPv4。
2.1. 临时关闭 IPv6(重启后失效)
- 检查当前 IPv6 状态:
bash
ip a如果看到类似 inet6 的条目,说明 IPv6 正在启用。
- 临时关闭 IPv6:
bash
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1 #net.ipv6.conf.all.disable_ipv6=1 关闭所有网络接口的 IPv6
sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1 #net.ipv6.conf.default.disable_ipv6=1 为新创建的网络接口默认关闭 IPv6- 验证是否关闭成功:
bash
ip a此时应该看不到任何 inet6 的条目。
2.2. 永久关闭 IPv6(重启后依然有效)
- 编辑 sysctl 配置文件:
bash
sudo nano /etc/sysctl.conf- 在文件末尾添加以下内容:
plaintext
# 关闭所有接口的 IPv6
net.ipv6.conf.all.disable_ipv6 = 1 #net.ipv6.conf.all.disable_ipv6 = 1:关闭所有现有网络接口的 IPv6
# 为新接口默认关闭 IPv6
net.ipv6.conf.default.disable_ipv6 = 1 #net.ipv6.conf.default.disable_ipv6 = 1:对未来新增的网络接口默认关闭 IPv6
# 关闭回环接口的 IPv6
net.ipv6.conf.lo.disable_ipv6 = 1 #net.ipv6.conf.lo.disable_ipv6 = 1:关闭本地回环接口的 IPv6- 使配置生效:
bash
sudo sysctl -p- 验证配置:
bash
ip a确认没有 inet6 条目,或者使用以下命令检查:
bash
cat /proc/sys/net/ipv6/conf/all/disable_ipv6如果返回 1,表示 IPv6 已成功关闭。
3. 调整网络协议优先级
这种方法不会完全禁用 IPv6,而是让系统优先选择 IPv4 协议。
3.1. 检查当前优先级
- 查看当前的网络协议优先级:
bash
cat /etc/gai.conf这个文件控制着 getaddrinfo () 函数的行为,该函数用于将域名解析为 IP 地址。
3.2. 临时调整优先级
- 备份原始配置文件:
bash
sudo cp /etc/gai.conf /etc/gai.conf.bak- 编辑 gai.conf 文件:
bash
sudo nano /etc/gai.conf- 找到以下行并修改:
plaintext
# precedence ::ffff:0:0/96 100修改为:
plaintext
precedence ::ffff:0:0/96 100- 保存文件并退出。
4. 验证方法
使用 ping 命令
bash
ping www.baidu.com查看输出中的 IP 地址,如果是 IPv4 地址(如 172.217.168.142),则表示 IPv4 优先。
5. 注意事项
- 方法一(关闭 IPv6) 更彻底,但可能会影响某些依赖 IPv6 的应用程序。
- 方法二(调整优先级) 更灵活,允许系统在需要时仍可使用 IPv6。
- 如果使用方法一,某些现代应用程序可能会出现警告或功能受限。
- 在云服务器环境中,某些管理工具可能依赖 IPv6,关闭前请确认不会影响服务器管理。

