Linux 路由管理
路由相关概念
-
路由:用于确定数据包从源计算机传输到目标计算机的路径
-
路由器:是一个网络设备,用于接收来自一个网络的数据包并决定如何将它们传输到另一个网络。
-
路由表:存储在路由器或计算机中的一组规则,指导数据包如何到达其目的地。
路由的组成
路由信息由目标地址、子网掩码和下一跳等信息组成。
-
目标地址:表示数据包应该被送达的地方
-
子网掩码:是用来区分目标地址是网络地址还是主机地址
-
下一跳:当数据包需要被传递给另一个路由器时,这个路由器的IP地址就是下一跳。
说明:路由很重要,如果路由错误,即使处于同一网段的设备也无法通信。因为数据包的转发是靠路由来决定的
查看路由信息
可以通过route或者 ip route来查看当前Linux主机的路由信息
通过 route 查看
route -n
# 不加 -n 选项,会显示主机名,加上 -n选项会显示具体的IP地址
说明:
-
Destination:目标地址
-
Gateway:下一跳的地址。如果目的地是直接连接的,Gateway字段为0.0.0.0
-
Genmask:子网掩码(CIDR表示法中,0.0.0.0/0,表示任意目标地址。)
-
Flags:标志 U:路由是活跃的 G:路由使用了网关 H:该路由是到一个主机的,而不是到一个网络。
-
Metric:度量值。表示到达目的地的代价或距离。到达同一目标地址的路由,metric越小越优先
-
Use:该路由被使用的次数(这个值一般不准确,即使路由实际上已经被使用也是0)
-
Iface:指示哪个网络接口用于该路由
例如:
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.1 0.0.0.0 UG 100 0 0 ens160
表示当一个数据包的目标地址不匹配路由表中的任何其他特定路由时,会使用这个默认路由。此时数据包会通过接口ens160发送到网关192.168.0.1
通过 ip route 查看
ip route show
说明:
-
default:表示这是默认路由
-
via:指定数据包的下一跳,如果是默认路由,via指定的就是网关地址
-
dev:指定通过哪个网络接口发送数据包
-
proto:描述了路由的来源或如何得到这条路由 proto kernel表示路由是由内核自动添加 proto static表示路由是静态配置
-
metric:在到同一目标的多条路由时,metric值较小的路由会被首先选择
-
scope link:表明该路由是直连路由
例如:
192.168.0.0/21 dev ens160 proto kernel scope link src 192.168.0.104 metric 100
表示目标地址是192.168.0.0/21的数据包会通过ens160这个网卡进行发送,发送数据包时,源IP地址默认设置为192.168.0.104。scope link表示这个路由条目是直连的。
添加路由
通过 route 添加路由
通过route添加路由的时候,需要加三个必要数据
-
目标地址或目标网络
-
下一跳的地址
-
发送数据包的网络接口
命令格式:
# 目标网络:
route add -net x.x.x.x netmask x.x.x.x gw x.x.x.x dev xxx
# 目标主机:
route add -host x.x.x.x gw x.x.x.x dev xxx
例如:目标地址是192.168.1.3 下一跳地址是:172.16.0.1
route add -host 192.168.1.3 gw 172.16.0.1 dev eth0
例如:目标网络是192.168.0.0,下一跳地址是:172.16.0.1;
route add -net 192.168.0.0 netmask 255.255.255.0 gw 172.16.0.1 dev eth0
例如:添加默认路由,网关:172.16.0.1
默认路由:不知道的网络就通过默认路由来选择路径。
route add -net 0.0.0.0 netmask 0.0.0.0 gw 172.16.0.1
通过 ip route 添加路由
命令格式:
# 目标主机:
ip route add x.x.x.x via x.x.x.x dev xxx
# 目标网络:
ip route add x.x.x.x/x via x.x.x.x dev xxx
例如:目标主机:10.10.10.5 吓一跳地址:192.168.1.1
sudo ip route add 10.10.10.5 via 192.168.1.1 dev eth0
例如:目标网络:10.10.10.0/24
sudo ip route add 10.10.10.0/24 via 192.168.1.1 dev eth0
例如:添加静态路由
sudo ip route add 0.0.0.0/0 via 192.168.1.1 dev eth0
删除路由
通过 route 删除路由
格式:
说明:使用route del删除路由的时候一般指定目标地址或者网络就行了,但是可以提供一个额外的匹配条件(gw),确保删除正确的路由条目。
# 目标主机:
route del -host x.x.x.x gw x.x.x.x
# 目标网络:
route del -net x.x.x.x netmask x.x.x.x gw x.x.x.x
例如:
route del -host 192.168.1.3 gw 172.16.0.1
例如:
route del -net 192.168.0.0 netmask 255.255.255.0 gw 172.16.0.1
使用 ip route 删除路由
格式:
# 目标主机
ip route del x.x.x.x via x.x.x.x
# 目标网络
ip route del x.x.x.x/x via x.x.x.x
例如:删除到特定主机的路由:
sudo ip route del 10.10.10.5 via 192.168.1.1
例如:删除到特定网络的路由:
sudo ip route del 10.10.10.0/24 via 192.168.1.1
路由配置文件
像通过route或者ip route添加的路由信息都是临时生效的,即重启系统后就没了,一种解决方法就是写入rc.local文件中。还有种方法就是更改Linux主机中关于路由的配置文件,这样也能实现持久生效。
Red Hat系列
配置文件:/etc/sysconfig/network-scripts/route-接口名
配置文件格式:
# host或者net via 下一跳
10.10.10.0/24 via 192.168.1.254
ubuntu1604
在网络配置文件中通过 post-up或者 post-down命令来添加或者删除路由
iface eth0 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
post-up route add -net 10.10.10.0 netmask 255.255.255.0 gw 192.168.1.254
pre-down route del -net 10.10.10.0 netmask 255.255.255.0 gw 192.168.1.254
ubuntu1804
因为ubuntu1804及后面的版本使用了netplan作为网络配置的工具。所以是通过修改相关的yaml文件来实现的,配置文件位于 /etc/netplan/ 下
例如:
network:
version: 2
renderer: networkd
ethernets:
ens160:
addresses:
- 192.168.1.100/24
gateway4: 192.168.1.1
routes: # 添加路由信息
- to: 10.10.10.0/24
via: 192.168.1.254
如果系统使用的网络管理工具是系统使用NetworkManager,一般通过它提供的nmcli或者直接使用图形界面来进行路由的管理。
说明:通过修改配置文件的方式管理路由,需要重启对应的服务才会让配置生效。
例如centos6需要重启network服务才能生效
sudo service network restart