Linux中让特定IP或网段走特定网关,核心是配置静态路由:用ip route add 172.16.0.0/16 via 192.168.1.200 dev eth0(推荐),或route add -net 172.16.0.0 netmask 255.255.0.0 gw 192.168.1.200;需确保网关可达、接口UP,并通过ip route show和ip route get验证生效。

Linux中让特定IP(或网段)走特定网关,核心是配置静态路由,而不是修改默认网关。系统只允许一个默认网关,但可以为不同目标网络添加多条精确的静态路由规则。
确认基础网络状态
先确保目标网关可达、对应网卡已启用:
- 用 ip addr show 查看网卡名称(如 eth0、ens33)和已配 IP
- 用 ping -c 3 <网关IP> 验证网关连通性(例如 ping -c 3 192.168.1.1)
- 用 ip link show <接口名> 确认接口状态为 UP
添加单个目标IP或网段的静态路由
使用 ip route add 指定目标、下一跳网关和出接口:
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- 让单个IP(如 203.0.113.5)走指定网关:
ip route add 203.0.113.5 via 10.8.0.1 dev tun0 - 让整个网段(如 172.16.0.0/16)走另一网关:
ip route add 172.16.0.0/16 via 192.168.1.200 dev eth0 - 若不指定 dev,内核会自动选择匹配的接口;显式指定更可靠,尤其在多网卡时
使配置永久生效
临时路由在重启或网络服务重载后会丢失,需写入配置文件:
-
CentOS/RHEL:在 /etc/sysconfig/network-scripts/route-eth0(对应接口名)中添加一行:
172.16.0.0/16 via 192.168.1.200 dev eth0 -
Ubuntu/Debian:编辑 /etc/network/interfaces,在对应 iface 段下加:
up ip route add 172.16.0.0/16 via 192.168.1.200 dev eth0 - 保存后执行 systemctl restart networking(Debian系)或 nmcli connection reload && nmcli connection up <连接名>(NetworkManager 环境)
验证与排错
配置后务必检查是否生效:
- 查看当前所有路由:ip route show 或 route -n
- 模拟发包路径:ip route get 203.0.113.5 —— 输出应显示 via 和 dev 与你设置的一致
- 测试实际通信:ping 203.0.113.5,并用 tcpdump -i eth0 host 203.0.113.5 确认流量确实从指定接口发出
- 注意:如果目标IP属于直连子网(如和本机在同一 192.168.1.0/24),内核会优先走直连路由,静态路由不会生效


















