当两个服务器无法直接通信(即无法通过网络互相发送数据包),我们可以使用路由来实现它们之间的互通。
想象一下,你和你的朋友住在不同的城市,你们想要相互发送信件。但是,你们之间没有直接的邮递路径,因此你们需要找到一种方法来确保信件能够顺利传递。这就需要一个邮递员(路由器)来帮助你们传递信件。
在计算机网络中,路由的概念类似于上述的邮递员。当两台服务器无法直接通信时,我们可以配置路由来指示数据包的传输路径。路由器负责接收从源服务器发出的数据包,并根据路由表中的配置将其转发到目标服务器。通过这种方式,数据包可以通过多个中间节点(路由器)在网络中传输,最终到达目标服务器。
在linux中,路由可以氛围主机路由和网络路由两种类型,他们之间的区别在于路由表项中的目的地址是主机地址还是网络地址
主机路由:目标地址是一个具体的主机地址,例如,如果你要将数据包发送到某个也定的计算机,你需要使用主机路由
网络路由:目的地地址是一个网络地址,寄一个IP地址范围,例如,如果你要将数据包发送到某个局域网或者互联网上的认个计算机,你需要使用网络路由
route -n 命令显示当前系统的路由表,他列出了所有的的已知路由表项,包括主机路由和网络路由,其中,每个路由表项包含以下信息
目标地址:这是路由表所描述的目标地址,可以是一个主机地址或者是一个网络地址
子网掩码:这是用于确定目标地址所属网络的子网掩码
网关地址:这是路由表项所指向的的网关地址,如果目标地址与本地网络不在同一个子网中,则需要通过网关进行转发
接口名称:组合式该路由表项所关联的网络接口名称,用于指示数据包应该从哪个网络接口发送
再出现到以下的情况中才会使用户到添加删除路由等配置
1·链接到其他网络:当你计算机需要与其他网络进行通信时,你可能需要添加路由,例如:如果你的计算机链接到一个新的局域网或者VPN,并且你需要访问该网络上的计算机,你可以使用route add命令将目标网络的路由添加到路由表中
2·网络分段:当你的网络被分成多个子网时,你可以需要添加路由来实现不同子网之间的通信,通过添加适当地路由表项,你的计算机可以找到真确的路径将数据包发送到=目标子网
3·默认网关设置:默认网关是指计算机要发送的目标地址不属于任何已知网络时,数据包将被发送到默认网关,如果你的需要更改默认网关,你可以使用route add命令将默认网关的路由添加到路由表中
4·多网卡配置:如果你的计算机具有多个网络接口,每个接口连接到不同的网络,你可能需要添加路由来制定从那个接口发送数据包,通过添加适当地路由表项,你可以控制数据包的出口接口
配置静态路由
route 命令
设置和查看路由表都可以用route命令设置内核路由表的命令格式是
# route [add|del] [-net|-host] target [netmask Nm] [gw Gw] [[dev] If]其中:
add : 添加一条路由规则
del : 删除一条路由规则
-net : 目的地址是一个网络
-host : 目的地址是一个主机
target : 目的网络或主机
netmask : 目的地址的网络掩码
gw : 路由数据包通过的网关
dev : 为路由指定的网络接口
route 命令使用举例
添加到主机的路由
# route add -host 192.168.1.2 dev eth0:0
# route add -host 10.20.30.148 gw 10.20.30.40添加到网络的路由
# route add -net 10.20.30.40 netmask 255.255.255.248 eth0
# route add -net 10.20.30.48 netmask 255.255.255.248 gw 10.20.30.41
# route add -net 192.168.1.0/24 eth1添加默认路由
# route add default gw 192.168.1.1删除路由
# route del -host 192.168.1.2 dev eth0:0
# route del -host 10.20.30.148 gw 10.20.30.40
# route del -net 10.20.30.40 netmask 255.255.255.248 eth0
# route del -net 10.20.30.48 netmask 255.255.255.248 gw 10.20.30.41
# route del -net 192.168.1.0/24 eth1
# route del default gw 192.168.1.1
设置包转发
在Cent OS 中默认的内核配置已经包含了路由功能,但默认并没有在系统时启用此功能,开始linux的路由功能可以通过调整内核的网络参数来实现,要配置和调整内核参数可以使用sysctl命令。例如:要开启linux内核的数据包转发功能可以使用如下的命令。
# sysctl -w net.
ipv4.ip_forward=1这样设置之后,当前系统就能实现包转发,但下次启动计算机时将失效。为了使在下次启动计算机时仍然有效,需要将下面的行写入配置文件/etc/sysctl.conf。# vi /etc/sysctl.confnet.ipv4.ip_forward = 1用户还可以使用如下的命令查看当前系统是否支持包转发。
# sysctl net.ipv4.ip_forward
下面是我自己画的脑补图,便于理解
/etc/sysconfig/static-routes ——永久性路由
any net x.x.x.x/24 gw x.x.x.x
route add -net x.x.x.x/24 gw x.x.x.x ——临时路由
如果说允许的情况下可以重启网络
systemctl restart network ——centos7.5以上的版本
service network restart ——centos7.5一下的版本
有疑问的请留言,大家一起解决!