IPv4 与 IPv6 路由配置(流量中转)及网络调试实战指南
在现代网络环境中,同时支持 IPv4 和 IPv6 已成为常态。本文将带你从零开始,掌握如何在 Linux 系统中添加/删除路由、配置虚拟网卡、启用 IPv6 转发,并通过 tcpdump 和 nginx 进行实际测试与调试。
如下图,一个集群中的节点只能通过其中指定出口网关节点转发流量,就需要配置路由
一、IPv4 路由管理
添加特定主机的路由
假设你想让访问 10.1.8.175 的流量通过网关 10.1.12.236 转发,并指定使用 tunl0 接口(常用于 IPIP 隧道),可执行:
sudo ip route add 10.1.8.175 via 10.1.12.236 dev tunl0 onlink
说明:
onlink表示下一跳地址不在本地子网内,但仍可通过指定接口直接通信。
删除路由
若需移除该路由:
sudo ip route del 10.1.8.175 via 10.1.12.236 dev tunl0 onlink
查看当前路由表
使用传统命令查看 IPv4 路由:
route -n
或更推荐使用 ip 命令:
ip route show
二、IPv6 配置与路由
启用 IPv6 转发(临时生效)
为了让主机能够转发 IPv6 流量(如作为路由器或网关),需开启内核转发功能:
sudo sysctl -w net.ipv6.conf.all.forwarding=1
sudo sysctl -w net.ipv6.conf.default.autoconf=1
sudo sysctl -w net.ipv6.conf.all.autoconf=1
验证设置是否生效:
sysctl net.ipv6.conf.all.forwarding
sysctl net.ipv6.conf.default.autoconf
sysctl net.ipv6.conf.all.autoconf
永久生效配置
将上述参数写入 /etc/sysctl.conf:
net.ipv6.conf.all.forwarding = 1
net.ipv6.conf.default.autoconf = 1
net.ipv6.conf.all.autoconf = 1
然后执行 sudo sysctl -p 加载配置。
查看 IPv6 路由表
ip -6 route
# 或
route -A inet6 -n
三、为 IPv6 创建虚拟网卡(VXLAN)
由于 tunl0(IPIP 隧道)不支持 IPv6,我们需要创建一个支持 IPv6 的虚拟接口。这里以 VXLAN 为例:
创建 VXLAN 接口
ip link add vxlan.egress type vxlan id 501 group 229.0.0.1 dev ens192 dstport 4789
id 501:VXLAN 网络标识符(VNI)group 229.0.0.1:组播地址(用于多播发现)dev ens192:底层物理接口dstport 4789:标准 VXLAN 端口
启用接口
ip link set vxlan.egress up
查看接口状态
ip addr show
# 或
ifconfig -a
四、IPv6 路由操作
添加单播主机路由
例如,将访问 10:1:8::77 的流量通过 10:1:8::10 网关转发(注意:此处仍以 tunl0 为例,但实际应使用支持 IPv6 的接口如 vxlan.egress):
sudo ip -6 route add 10:1:8::77/128 via 10:1:8::10 dev tunl0 onlink
⚠️ 注意:
tunl0默认不支持 IPv6。建议将dev改为vxlan.egress或其他支持 IPv6 的接口。
删除 IPv6 路由
ip -6 route del 10:1:8::77/128 via 10:1:8::10 dev tunl0
为 tunl0 配置 IPv6 地址(仅用于测试)
虽然 tunl0 不推荐用于 IPv6,但可临时分配地址用于调试:
sudo ip -6 addr add fd00:2222::1/64 dev tunl0
五、网络抓包调试
抓取指定端口流量(如 50002)
tcpdump -i any 'port 50002'
抓取 ICMP(IPv4 ping)
tcpdump -i vxlan.egress -nn -v 'icmp'
抓取 ICMPv6(IPv6 ping)
tcpdump -i vxlan.egress -nn -v 'icmp6'
-nn:不解析主机名和端口名;-v:详细输出。
六、部署测试服务:Nginx 支持 IPv4/IPv6
安装 Nginx(源码编译)
wget -c http://nginx.org/download/nginx-1.24.0.tar.gz
tar -zxvf nginx-1.24.0.tar.gz
cd nginx-1.24.0
./configure --prefix=/usr/local/nginx
make && make install
配置双栈监听
编辑 /usr/local/nginx/conf/nginx.conf,在 server 块中添加:
listen 50002; # IPv4
listen [::]:50002; # IPv6
启动与管理
# 启动
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
# 重载配置
/usr/local/nginx/sbin/nginx -s reload
# 停止
/usr/local/nginx/sbin/nginx -s stop
# 优雅退出
/usr/local/nginx/sbin/nginx -s quit
现在你可以通过 curl http://[10:1:8::77]:50002 或 telnet 10.1.8.175 50002 测试连通性。
七、内核日志调试
查看追踪日志
dmesg | grep TRACE
清空 dmesg 缓冲区(谨慎使用)
sudo dmesg -C
此操作会清除所有内核日志,建议在复现问题前先备份日志。
总结
本文涵盖了从基础路由配置到高级网络调试的完整流程,适用于搭建 IPv6 网关、隧道环境或混合网络测试平台。关键点包括:
- IPv4/IPv6 路由的增删查;
- 启用 IPv6 转发并持久化;
- 使用 VXLAN 创建支持 IPv6 的虚拟接口;
- 通过
tcpdump实时抓包分析; - 部署双栈 Nginx 服务进行端到端验证。
希望这篇指南能帮助你在复杂的网络环境中快速定位问题、高效完成配置!
作者:钝刀张三
发布日期:2025年11月
适用系统:Linux(Ubuntu/CentOS 等主流发行版)