Linux默认路由与直连路由

Linux配置好ip,掩码,网关之后默认会建立两条路由(除去169.254.0.0这条),如下所示:
Linux默认路由与直连路由
(这两条路由无需我们手工创建,Linux配置好网卡,重启之后默认就会建立这两条路由,缺一不可。这样就可以访问baidu.com这样的外网或者内网地址了)
这两条路由有不同的使用方法,我们依次来看看每一条路由。
首先第一条路由,网关为192.168.50.2,这条路由表示通向外部地址的路由,比如当你访问非局域网的其他地址的时候,默认走的路由。举个例子,比如你要访问外网baidu.com,那么此时走的就是默认路由,默认路由中,这个出口地址Gateway就是我们在网卡里面配置的网关地址,而且默认路由的Gateway也必须指向这个网关地址才可以。
现在我们删除掉这个默认路由地址:

route del default gw 192.168.50.2 dev ens33

然后再来访问baidu.com看看
Linux默认路由与直连路由
可以看到效果如上所示,所有的外网地址根本没有办法访问,因为没有默认路由了。
那就意味着此时只能访问内部地址了,我这个内网地址里面还有其他的主机,比如192.168.50.10 192.168.50.131,我们来访问一下看看,
Linux默认路由与直连路由
可以看到确实是可以访问内网地址的,而且我的xshell也还能通过ssh连接到这个系统里面。
当然,网关的地址也是可以ping通的,比如:
Linux默认路由与直连路由
话说以后遇到可以ping通网关而不能访问外网的问题,可以找路由来解决。

通过上面的例子我们就可以看出来访问外网走的是默认路由,而访问内网不走这个默认路由。所以我们接下来实验一下删除第二条路由(destnation为192.168.50.0这条路由)看看效果
我这里先把默认路由加上去。

route add default gw 192.168.50.2 dev ens33

Linux默认路由与直连路由
现在删除第二条路由,这个我们就要在vmware的控制终端里面测试了,否则在xshell里面删除的话直接终端就掉了

# 执行下面这个指令
[root@localhost ~]# route del -net 192.168.50.0/24 gw 0.0.0.0 dev ens33

Linux默认路由与直连路由
此时就剩下默认路由了。
现在先访问baidu.com等地址
Linux默认路由与直连路由
发现都是ok的。再来访问一些内网地址
Linux默认路由与直连路由
发现也都是可以访问本地局域网里面的其他设备的。
发现第二条路由是否存在都无所谓。当然也有一点点的作用的,那就是没有了第二条路由,我们宿主机就无法通过vmnet8与Linux虚拟机进行通信了(这里我们的实验是windows的宿主机搭建vmware安装Linux虚拟机,nat网络模型)。
除此之外,第二条路由无需我们手工创建,这个路由是在建立局域网的时候自动创建的,自动指向本地局域网环境的一个路由(也称为直连路由)。还有,这条路由的网关是0.0.0.0,其实并没有什么用,只是为了不为空默认写的0.0.0.0,无需理会
但是,我们最好是加上直连路由。
有时候你会遇到添加默认路由失败的例子,比如这个,我先把所有的路由删除光了,现在直接添加默认路由的话是失败的
Linux默认路由与直连路由
必须提前存在直连路由,然后才能添加默认路由。

演示一个直连路由的例子。

# 准备一台主机A,额外添加一个ip地址
ifconfig ens33:1 192.168.0.7
# 此时再查看路由,发现系统自动给我们创建了一个192.168.0.0的直连路由
[root@@@node1 ~]# route -n
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 ens33

现在我们再找局域网的其他一台主机B,直接ping这个ip地址192.168.0.7,会发现根本不能通,是因为其他主机B没有到达192.168.0.7的路由,这里我们给主机B加一个直连路由

route add -net 192.168.0.0/24 dev ens33
# 此时再去ping,发现可以ping通192.168.0.7了

Linux默认路由与直连路由

上一篇:TCP/IP协议栈在Linux内核中的运行时序分析


下一篇:Linux权限详解