在Linux系统中配置IPv6地址转换涉及多个技术场景,包括内网IPv6地址通过路由器转换为公网IPv6地址(NATv6)、IPv6与IPv4之间的地址转换(NAT64/DNS64)等,本文将详细讲解不同场景下的配置方法,涵盖静态地址分配、动态地址获取、NATv6转发、NAT64/DNS64搭建等关键步骤,并辅以命令示例和配置文件说明,帮助读者全面掌握Linux环境下IPv6地址转换的实践操作。
Linux系统IPv6地址基础配置
在配置地址转换前,需先确保Linux系统正确获取或配置了IPv6地址,IPv6地址配置方式主要有静态配置、无状态地址自动配置(SLAAC)和动态主机配置协议(DHCPv6)三种。
静态配置IPv6地址
静态配置适用于服务器或固定设备,通过ip
命令直接为网络接口分配IPv6地址,为eth0
接口配置全局IPv6地址2001:db8::100/64
和链路本地地址fe80::1/64
:
# 添加全局IPv6地址 sudo ip -6 addr add 2001:db8::100/64 dev eth0 # 添加链路本地地址(通常自动生成,也可手动指定) sudo ip -6 addr add fe80::1/64 dev eth0 scope link # 启用接口 sudo ip link set eth0 up
配置完成后,可通过ip -6 addr show eth0
查看地址信息,或使用ping6
测试连通性。
SLAAC自动配置
SLAAC通过路由器通告(RA)前缀自动生成IPv6地址,需在路由器端启用RA功能,客户端Linux系统默认支持SLAAC,无需额外配置,但需确保网络中存在RA服务器(如Linux路由器运行radvd
服务)。
DHCPv6动态配置
DHCPv6可分配IPv6地址、DNS服务器等信息,需同时配置服务器和客户端。
-
服务器端(安装
dhcp-server6
):
编辑/etc/dhcp/dhcpd6.conf
,定义地址池和选项:subnet6 2001:db8::/64 { range6 2001:db8::100 2001:db8::200; option6 dns-server 2001:db8::53; }
启动服务:
sudo systemctl enable --now dhcpd6
。 -
客户端端:
安装dhcp-client6
,使用dhcp6c
获取地址:# 编辑/etc/dhcp6c.conf interface eth0 { request domain-name-servers; request prefix-delegation; } # 启动服务 sudo systemctl enable --now dhcp6c
客户端可通过
ip -6 addr show
获取动态分配的地址。
IPv6地址转换场景与配置
场景1:NATv6(内网IPv6转公网IPv6)
NATv6将内网私有IPv6地址(如唯一本地地址ULA fd00::/8
)转换为公网IPv6地址,实现多设备共享公网IPv6出口,配置需开启内核IPv6转发,并使用ip6tables
或nftables
进行地址转换。
步骤1:启用IPv6转发
编辑/etc/sysctl.conf
,添加:
net.ipv6.conf.all.forwarding=1
执行sudo sysctl -p
生效。
步骤2:配置SNAT规则
假设内网接口为eth1
(地址fd00::1/64
),公网接口为eth0
(地址2001:db8::1/64``),使用
ip6tables`配置SNAT:
# 安装ip6tables sudo apt install ip6tables-persistent # 清空现有规则 sudo ip6tables -F sudo ip6tables -t nat -F # 配置SNAT:将内网流量源地址转换为公网IPv6 sudo ip6tables -t nat -A POSTROUTING -s fd00::/64 -o eth0 -j SNAT --to-source 2001:db8::1 # 保存规则(Debian/Ubuntu) sudo netfilter-persistent save
验证:内网设备fd00::100
访问外网时,源地址会被转换为2001:db8::1
。
场景2:NAT64/DNS64(IPv6访问IPv4服务)
NAT64允许IPv6-only设备访问IPv4互联网,通过IPv6地址前缀映射IPv4地址(如64:ff9b::/96
),配合DNS64将IPv4域名解析为IPv6地址。
步骤1:启用内核转发
同NATv6,确保net.ipv6.conf.all.forwarding=1
。
步骤2:配置NAT64(使用tayga
工具)
tayga
是用户态NAT64工具,需安装:sudo apt install tayga
。
编辑/etc/tayga.conf
:
config eth0
ipv4-addr 192.168.100.1 # NAT64虚拟IPv4地址
ipv6-addr 64:ff9b::1 # NAT64虚拟IPv6地址
prefix 64:ff9b::/96 # IPv6前缀,用于映射IPv4
dynamic-dir /var/tayga
data-dir /var/tayga
创建虚拟网卡:
sudo tayga --mktun sudo ip addr add 192.168.100.1/24 dev tayga sudo ip link set tayga up
启动tayga
:sudo systemctl enable --now tayga
。
步骤3:配置IP6tables转发
将IPv6流量转发到tayga
虚拟网卡:
sudo ip6tables -t nat -A PREROUTING -s 2001:db8::/64 -d 64:ff9b::/96 -j DNAT --to-destination 192.168.100.1 sudo ip6tables -A FORWARD -i eth0 -o tayga -j ACCEPT sudo ip6tables -A FORWARD -i tayga -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
步骤4:配置DNS64
安装bind9
作为DNS64服务器,编辑/etc/bind/named.conf.local
:
zone "64.ff9b.ip6.arpa" {
type master;
file "/etc/bind/db.64.ff9b.ip6.arpa";
};
创建区域文件/etc/bind/db.64.ff9b.ip6.arpa
:
$TTL 86400
@ IN SOA localhost. root.localhost. (
2024010101 ; Serial
3600 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ) ; Minimum
IN NS localhost.
IN AAAA ::1
1.0.0 IN PTR www.example.com. ; 将IPv4域名映射为IPv6
重启bind9
:sudo systemctl restart bind9
。
客户端配置DNS服务器为168.100.1
后,访问www.example.com
会解析为64:ff9b::c0a8:6401
(168.100.1
的NAT64映射)。
配置验证与故障排查
-
验证地址配置:
使用ip -6 route show
查看路由表,ip -6 neigh show
查看邻居缓存,ping6 2001:db8::1
测试连通性。 -
验证NATv6:
内网设备执行ping6 -I fd00::100 8.8.8.8
,在路由器端通过tcpdump -i eth0 -n ip6
查看数据包源地址是否转换为公网IPv6。 -
验证NAT64:
IPv6客户端执行ping6 64:ff9b::c0a8:6401
,若能通则NAT64配置成功;访问IPv4网站时,通过tcpdump -i tayga -n ip
查看是否有IPv4流量。
配置方法对比
配置方式 | 适用场景 | 优点 | 缺点 |
---|---|---|---|
静态配置 | 服务器、固定设备 | 地址固定,管理简单 | 需手动维护,不适用于动态环境 |
SLAAC | 局域网客户端 | 无需服务器,自动获取 | 无法分配DNS等额外参数 |
DHCPv6 | 需要集中管理的网络 | 可分配地址、DNS、前缀等 | 需部署服务器,增加复杂度 |
NATv6 | 内网IPv6共享公网出口 | 解决IPv6地址不足问题 | 破坏端到端连接,部分应用不兼容 |
NAT64/DNS64 | IPv6访问IPv4服务 | 实现IPv6与IPv4互通 | 需额外DNS支持,性能开销较大 |
相关问答FAQs
Q1:Linux配置NATv6后,内网设备无法访问外网,如何排查?
A:首先检查sysctl
中net.ipv6.conf.all.forwarding
是否为1;其次使用ip6tables -t -nvL
查看SNAT规则是否生效,确认源地址和目标接口是否正确;最后通过tcpdump
抓包,检查内网设备发出的数据包是否到达路由器,以及路由器是否转换源地址并转发,若防火墙(如ufw、firewalld)启用,需确保允许IPv6转发流量。
Q2:NAT64/DNS64配置后,IPv6客户端无法解析IPv4域名,如何解决?
A:首先确认客户端DNS服务器是否指向DNS64服务器(如192.168.100.1);使用dig @192.168.100.1 www.example.com AAAA
检查DNS64是否返回正确的IPv6地址(如64:ff9b::c0a8:6401);若解析失败,检查bind9
日志(/var/log/syslog
)确认区域文件配置是否正确,以及tayga
是否正常运行(systemctl status tayga
),确保客户端到DNS64服务器的IPv6路由可达。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/38007.html