检查当前路由情况
route -n
或者netstat -r
Destination 和 Genmask表明了某个IP应该走哪一条路由。所以Desination这里是一个网段地址,可以看到后面是0. 只要是mask部分有有效的值就可以了。
例如,baidu.com【220.181.38.148】
这里匹配的就是第一条default路由规则,它会被路由到172.16.98.10这个网关地址, 从eth0物理网口出去。
每一个网口(网卡)有自己的内网网络,第二行表示eth0是172.16.95网段的;第三行表示eth1是192.168.8.0网段的。 gateway是0.0.0.0表示不再转发消息了。
Flags
- U 已经启动的
- G 应使用制定的网关
- D 动态添加
- M 修改的
- R 恢复的
添加/删除路由
Add
route add -net 172.16.162.41 netmask 255.255.0.0 gw 172.16.98.10 metric 0 dev eth1
Remove
route del -net 172.16.162.41 netmask 255.255.0.0
添加的原则
路由添加是树状结构,本质上是在这颗路由树上做添加,所以新增加的路由规则必须满足如下两个条件:
- 新增的路由目的地址的网段要表述准确
- 新增的路由跳转网关必须可以访问到已经存在的树的节点
具体以下面的常见问题来举例
常见问题
【问题1】route: netmask and route address conflict
这个问题一般是因为Destination 和 Genmask没有正确表示一个有效的网段。
比如下面的命令,
因为Destination 172.16.126.110 的有效部分超过了掩码 255.255.255.0部分,所以报netmask and route address conflict
需要把172.16.126.110改为172.16.126.0即可。
【问题2】route: SIOCADDRT: Network is unreachable
如果gw的地址在树上任何一个节点都找不到,那么该路由肯定不可达
如何eth口不支持该网关地址的路由,那么该路由也不可达
这里的192.168.0.1在已存在的路由中(eth1 是192.168.8.0/24),所以这里走不通。
如果改为192.168.8.1,就可以成功设置。