在 Linux 系统中配置 IPv6 地址转换涉及多种场景,包括静态地址配置、动态地址获取(如 SLAAC、DHCPv6)、以及 IPv6 与 IPv4 之间的转换(如 NAT64),以下从基础配置到高级转换场景进行详细说明,涵盖常用命令和配置文件修改方法。
IPv6 地址基础配置
IPv6 地址配置可分为静态配置和动态配置,需根据网络环境选择合适方式,配置前需确保系统内核支持 IPv6(默认大多数 Linux 发行版已支持),可通过 sysctl -a | grep ipv6
检查相关参数(如 net.ipv6.conf.all.disable_ipv6=0
表示启用)。
静态 IPv6 地址配置
静态配置适用于固定网络环境,需手动指定 IPv6 地址、前缀长度、网关等参数。
-
临时配置(立即生效,重启失效):
使用ip
命令配置全局地址和链路本地地址(链路本地地址自动生成,通常以fe80::
开头):# 添加全局 IPv6 地址(示例地址:2001:db8::100/64) ip -6 addr add 2001:db8::100/64 dev eth0 # 添加默认网关(示例网关:2001:db8::1) ip -6 route add default via 2001:db8::1 dev eth0
-
永久配置(重启后生效):
根据发行版不同,修改对应配置文件:- Debian/Ubuntu(netplan):编辑
/etc/netplan/01-netcfg.yaml
,添加如下内容:network: version: 2 ethernets: eth0: addresses: - 2001:db8::100/64 gateway6: 2001:db8::1 nameservers: addresses: [2001:db8::53]
执行
netplan apply
生效。 - RHEL/CentOS(NetworkManager):编辑
/etc/sysconfig/network-scripts/ifcfg-eth0
,添加:IPV6ADDR=2001:db8::100/64 IPV6_DEFAULTGW=2001:db8::1 DNS1=2001:db8::53
重启网络服务:
systemctl restart network
。
- Debian/Ubuntu(netplan):编辑
动态 IPv6 地址配置
动态配置通过协议自动获取地址,包括 SLAAC(无状态地址自动配置)和 DHCPv6(有状态 DHCP)。
-
SLAAC 配置:
SLAAC 依赖路由器发送的 RA(路由器通告)消息自动生成地址(基于前缀和 MAC 地址生成 EUI-64 格式地址)。- 客户端配置:确保系统接受 RA 消息(默认开启),在 Debian/Ubuntu 的 netplan 中添加:
network: version: 2 ethernets: eth0: accept-ra: true # 接受 RA 消息
- 路由器端配置(如 Linux 作为路由器):使用
radvd
工具发送 RA,安装后编辑/etc/radvd.conf
:interface eth0 { AdvSendAdvert on; MinRtrAdvInterval 30; MaxRtrAdvInterval 100; prefix 2001:db8::/64 { AdvOnLink on; AdvAutonomous on; }; }
启动服务:
systemctl start radvd
。
- 客户端配置:确保系统接受 RA 消息(默认开启),在 Debian/Ubuntu 的 netplan 中添加:
-
DHCPv6 配置:
DHCPv6 可分配地址及其他参数(如 DNS、NTP),分有状态(分配地址)和无状态(仅分配参数)。- 客户端配置(netplan):
network: version: 2 ethernets: eth0: dhcp6: true # 启用 DHCPv6
- 服务器端配置:使用
dhcpd6
(ISC DHCPv6),编辑/etc/dhcp/dhcpd6.conf
:subnet6 2001:db8::/64 { range6 2001:db8::100 2001:db8::200; option6 dns-server 2001:db8::53; }
启动服务:
systemctl start dhcpd6
。
- 客户端配置(netplan):
IPv6 地址转换场景
NAT64(IPv6 到 IPv4 转换)
NAT64 允许 IPv6 客户端访问 IPv4 网络,通常结合 DNS64(将 AAAA 查询转换为 A 记录)使用。
- 配置步骤:
- 安装
nat64
工具(如dnsmasq
支持 NAT64):apt install dnsmasq # Debian/Ubuntu
- 编辑
/etc/dnsmasq.conf
,添加:# 启用 DNS64(前缀示例:64:ff9b::/96) dns64=64:ff9b::/96 # 监听 IPv6 地址 listen-address=2001:db8::1
- 启用 IP 转发:
sysctl -w net.ipv6.conf.all.forwarding=1
- 配置 SNAT(使用
ip6tables
):ip6tables -t nat -A POSTROUTING -s 2001:db8::/64 -o eth1 -j MASQUERADE
- 安装
双栈配置(IPv4+IPv6 同时启用)
双栈环境下,主机同时配置 IPv4 和 IPv6 地址,实现双协议通信。
- 配置示例(netplan):
network: version: 2 ethernets: eth0: addresses: - 192.168.1.100/24 # IPv4 地址 - 2001:db8::100/64 # IPv6 地址 gateway4: 192.168.1.1 gateway6: 2001:db8::1 nameservers: addresses: [8.8.8.8, 2001:db8::53]
IPv6 配置方式对比
配置方式 | 适用场景 | 命令/配置文件 | 优点 | 缺点 |
---|---|---|---|---|
静态配置 | 固定网络、服务器环境 | ip 命令、netplan/YAML |
配置固定,依赖低 | 需手动维护,网络变更时调整麻烦 |
SLAAC | 有路由器 RA 通告的局域网 | radvd 客户端 | 自动配置,无需服务器 | 依赖 RA 消息,地址可预测(EUI-64) |
DHCPv6 | 需集中管理地址/参数 | dhcpd6 客户端 | 灵活分配地址,支持参数扩展 | 需 DHCPv6 服务器,增加网络复杂度 |
NAT64 | IPv6 访问 IPv4 网络 | dnsmasq、ip6tables | 解决 IPv6 孤岛问题 | 增加延迟,不端到端连接 |
相关问答 FAQs
Q1:如何查看 Linux 系统当前的 IPv6 地址配置?
A:可通过以下命令查看:
ip -6 addr show
:显示所有接口的 IPv6 地址(包括全局地址、链路本地地址等)。ip -6 route show
:查看 IPv6 路由表,包括默认网关和直连网络。ping6 -c 4 2001:db8::1
:测试与目标 IPv6 地址的连通性(需安装iputils-inet6
包)。
Q2:IPv6 配置后无法通信,如何排查?
A:按以下步骤排查:
- 检查地址配置:确认 IPv6 地址已正确添加(
ip -6 addr dev eth0
),无重复或冲突。 - 检查网关和路由:确认默认网关正确(
ip -6 route
),且网口可达(ping6 -c 2 2001:db8::1
)。 - 检查防火墙:临时关闭防火墙(
systemctl stop firewalld
或ufw disable
),测试是否为策略拦截。 - 检查 RA/DHCPv6:若为动态配置,确认路由器 RA 消息或 DHCPv6 服务器正常(使用
tcpdump -i eth6 icmpv6
捕获 RA 消息)。 - 检查内核参数:确认 IPv6 未被禁用(
sysctl net.ipv6.conf.all.disable_ipv6
为 0)。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/38011.html