必须用dev参数绑定物理网卡,如sudo route add -net 192.168.50.0/24 gw 192.168.1.254 dev ens33,且dev后须为真实启用的接口名;-host与dev组合时不可加gw,否则内核拒绝添加。
要在linux中让特定网段流量强制走指定物理网卡(比如ens33或eth0),必须在route add命令中明确绑定接口,否则系统可能因多网卡环境选错出口导致通信失败。
用dev参数绑定出站网卡
route add命令不支持if参数,【必须使用dev而非if】。if是Windows route命令的写法,在Linux下无效,输错会报“SIOCADDRT: No such device”错误。
执行:sudo route add -net 192.168.50.0/24 gw 192.168.1.254 dev ens33
这条命令表示:所有发往192.168.50.0/24的数据包,下一跳是192.168.1.254,且只允许从ens33网卡发出。dev后面必须跟当前系统真实存在的接口名,可用ip link show确认。
主机路由+dev的组合用法
方法一:直接指定单台设备走某网卡
sudo route add -host 10.0.0.100 gw 10.0.0.1 dev eth0
方法二:不设网关,仅限直连主机(适用于同一子网内设备)
sudo route add -host 192.168.10.5 dev bond0
注意:-host + dev组合时不能带gw,否则内核会拒绝添加——直连主机不需要网关跳转。
验证与排错步骤
第一步:添加后立即执行route -n | grep "192.168.50.0",确认输出行末尾显示的是ens33而非*或UG
第二步:用tcpdump -i ens33 host 192.168.50.10抓包,验证流量是否真从该接口发出
第三步:若ping不通目标,检查该网卡是否已up(ip link show ens33 | grep "state UP"),【down状态的网卡无法作为dev参数生效】











