前两天工作中发现一个问题,我在执行一下命令时,报错:SIOCADDRT: No such process
sudo route add default gw xx.xx.xx.xx
这条命令的作用是添加gw后面的Ip地址为默认网关。
要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现(一个子网是一个房间的话,路由器或者网关就是一扇门,你可以通过这扇面在两个房间之间通行)。由于历史的原因,许多有关TCP/IP的文献曾经把网络层使用的路由器称为网关,在今天很多局域网采用都是路由来接入网络,因此通常指的网关就是路由器的IP。我这边这条命令就是为了给服务器添加网关,然后让外网能够通过网关访问到这台服务器。
为什么添加不了网关呢?在网上查阅资料发现以下内容。以下是作者原文:
在添加一个新的网段时,它的出口地址应该是当前ip routing table表中的当前有的地址,否则会出现这个错误:SIOCADDRT: 没有那个进程。第一点中使用第二个命令时,网关是默认的default gw,因此可以使用了。突然间想起鸟哥私房菜里的那句话了。
“透过 route add 来增加一个路由!请注意,这个路由必须要能够与你互通”和“你只要记得,当出现『SIOCADDRT: Network is unreachable』 这个错误时,肯定是由于 gw 后面接的 IP 无法直接与你的网域连通 (Gateway 不在你的网域内), 所以,赶紧检查一下是否输入错误啊!加油吧!”这两句话很经典阿,之前看到却不细想。
就是在报这个错误的时候说明的是输入的ip是错误的,自己ping一下应该就能证实这一点。ping不通,除了你ip输错了外还会有别的原因导致的,比如我遇到这个问题的原因是主机的网口坏了。
当然这时候就会有疑问了,我怎么查看当前主机路由呢?用route -n命令就可以了。
路由表内容说明:
Destination:目标网络或主机。
Gateway:网关地址。
Genmask:目标网络的网络掩码。"255.255.255.255"表示一个主机。"0.0.0.0"表示网关。
Flags:标记。
U、路由被启用。
H、目标是一个主机
G、使用网关。