Linux配置IPv6需确保全局单播地址生效,而非仅链路本地地址fe80::;必须同时满足:ipv6模块已加载、sysctl net.ipv6.conf.all.disable_ipv6=0、/proc/sys/net/ipv6/conf/all/disable_ipv6=0;临时配置用ip-6 addr add和route add;永久配置依发行版修改Netplan或ifcfg文件并应用。

Linux 中配置 IPv6 地址与网络参数,关键不是看到 fe80:: 链路本地地址,而是确保全局单播地址(如 2001:db8::/64)真正生效、可路由。链路本地地址是内核自动添加的,即使 IPv6 协议栈被禁用,它也可能显示出来——这会误导你认为 IPv6 已就绪。
确认 IPv6 协议栈是否真正启用
必须同时满足以下三项,缺一不可:
-
lsmod | grep ipv6有输出(说明ipv6内核模块已加载) -
sysctl net.ipv6.conf.all.disable_ipv6返回 0 -
cat /proc/sys/net/ipv6/conf/all/disable_ipv6显示 0
任一为 1,ping6 ::1 或 curl -6 https://ipv6.google.com 都会失败。
临时配置 IPv6 地址与路由(重启失效)
适合快速验证或调试:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
- 加载模块:
sudo modprobe ipv6 - 开启全局协议栈:
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=0 - 启用回环和物理接口(如
ens33):sudo sysctl -w net.ipv6.conf.lo.disable_ipv6=0sudo sysctl -w net.ipv6.conf.ens33.disable_ipv6=0 - 添加全局单播地址(示例):
sudo ip -6 addr add 2001:db8::100/64 dev ens33 - 添加默认网关:
sudo ip -6 route add default via 2001:db8::1 dev ens33 - 检查是否成功:
ip -6 addr show dev ens33→ 必须看到scope global;仅scope link无法跨网段通信
永久配置 IPv6(按发行版区分)
修改配置文件后,务必执行对应命令应用变更:
-
Ubuntu/Debian(Netplan):编辑
/etc/netplan/*.yaml,在对应接口下添加:addresses: [2001:db8::100/64]gateway6: 2001:db8::1nameservers: {addresses: [2001:4860:4860::8888, 2001:4860:4860::8844]}
执行sudo netplan apply -
RHEL/CentOS/Rocky(network-scripts):编辑
/etc/sysconfig/network-scripts/ifcfg-ens33,确保包含:IPV6INIT=yesIPV6ADDR=2001:db8::100/64IPV6_DEFAULTGW=2001:db8::1IPV6_AUTOCONF=no
执行sudo systemctl restart network -
使用 NetworkManager 的系统(如较新 RHEL/CentOS):
nmcli connection modify ens33 ipv6.method manual ipv6.addresses "2001:db8::100/64" ipv6.gateway 2001:db8::1nmcli connection up ens33
验证配置是否生效
完成配置后,逐项确认:
- 查地址:
ip -6 addr show dev ens33 | grep "inet6.*global"(必须含scope global) - 查路由:
ip -6 route | grep "^default"(应显示默认网关) - 测试连通:
ping6 -c 3 2001:4860:4860::8888 - 测试 DNS:
dig AAAA google.com @2001:4860:4860::8888
不复杂但容易忽略。










