linux路由

Catalogue
  1. 1. 简介
    1. 1.1. 路由表详解
    2. 1.2. Flags 含义:
  2. 2. linux内核的路由种类
    1. 2.1. 默认路由
    2. 2.2. 主机路由
    3. 2.3. 网络路由
    4. 2.4. 示意图
    5. 2.5. 访问一个ip的流程
  3. 3. 有关linux路由的命令
    1. 3.1. 查看路由
    2. 3.2. 路由的添加与删除
    3. 3.3. 启动、关闭与配置装置的相关信息
    4. 3.4. 更改【网卡代号、 MAC 地址信息】
    5. 3.5. 清空路由表
    6. 3.6. rt_tables
    7. 3.7. 增加网关
    8. 3.8. 网关只能加路由条目里已有的路由网段里的一个IP (ping不通此IP都可以) 加网关不需要指定子网掩码
  4. 4. 参考链接

简介

比如说进一栋大楼找一个人,你要先找大爷问问,有没有这个人,大爷就是路由表,你问的人就是网络地址,如果有的话,大爷会说这个人在402室,402就是那个网卡

找一个路由表看一下吧

路由表详解

介绍路由表之前需要知道一些ip的常识

ip地址是一个网卡在网络世界的通讯地址,也就是:街道地址+门牌号

例如:小树林67号、小池塘67号,都是67号,但是街道不同,在外面你说你家门牌号是67号人家不一定知道是哪里,但你说你家在小树林,那就知道了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
route -n

Destination Gateway Genmask Flags Iface
0.0.0.0 192.168.10.1 0.0.0.0 UG em1
100.82.128.1 0.0.0.0 255.255.255.255 UH ppp1
100.82.128.1 0.0.0.0 255.255.255.255 UH ppp2
100.82.128.1 0.0.0.0 255.255.255.255 UH ppp3
100.82.128.1 0.0.0.0 255.255.255.255 UH ppp4
100.82.128.1 0.0.0.0 255.255.255.255 UH ppp5


Destination: 目标网络或目标主机。 Destination 为 default(0.0.0.0)时,表示这个是默认网关,所有数据都发到这个网关(这里是192.168.10.1)

这个可以是网络地址(街道)、主机地址、拨号网络播出ip的网关
比如:
IP:100.82.243.66 网关:100.82.128.1/32
掩码是32,代表只有一台主机


Gateway: 网关地址,0.0.0.0 表示当前记录对应的 Destination 跟本机在同一个网段,通信时不需要经过网关

Genmask: Destination 字段的网络掩码,Destination 是主机时需要设置为 255.255.255.255,是默认路由时会设置为 0.0.0.0

Flags: 标记,含义参考表格后面的解释

Iface: 这个路由传递封包的接口。网卡名字,例如 ppp1

Destination, Genmask:这两个玩意儿就是分别是 network 与 netmask,这两个可以组成一个完整的网络
Gateway:该网域是通过那个 gateway 连接出去的? 如果显示 0.0.0.0 表示该路由是直接由本机传送,亦即可以透过局域网络的 MAC 直接传讯; 如果有显示 IP 的话,表示该路由需要经过路由器 (通讯闸) 的帮忙才能够传送出去。

Flags 含义:

  • U (route is up):该路由是启动的;
  • H (target is a host):目标是一部主机 (IP) 而非网域;
  • G (use gateway):需要透过外部的主机 (gateway) 来转递封包;
  • R (reinstate route for dynamic routing):使用动态路由时,恢复路由信息的旗标;
  • D (dynamically installed by daemon or redirect):已经由服务或转 port 功能配置为动态路由
  • M (modified from routing daemon or redirect):路由已经被修改了;
  • ! (reject route):这个路由将不会被接受(用来抵挡不安全的网域!)

linux内核的路由种类

默认路由

当目标主机的ip,或者是目标主机的网络地址不在路由表中,数据包就会发送到默认路由(默认网关)上

默认路由的 Destination 是 default 或 0.0.0.0

1
2
3
4
route -n

Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.10.1 0.0.0.0 UG 100 0 0 em1

主机路由

主机可以到达的网络。下面示例中,对于 10.0.0.0/24 这个网络,通过网关 10.139.128.1 网关路由

1
2
3
4
route -n

Destination Gateway Genmask Flags Metric Ref Use Iface
10.0.0.0 10.139.128.1 255.255.255.0 UG 0 0 0 eth0

网络路由

意思就是主机能把数据包送到那个网络,或者说能从那个网络接收数据包

1
2
3
4
route -n

Destination Gateway Genmask Flags Metric Ref Use Iface
39.165.91.0 0.0.0.0 255.255.255.128 U 0 0 0 ppp0

这里的 39.165.91.0 就是网络地址

示意图

avatar

问题1: 按上面的路由表来看,如果要访问10.1.1.1这个IP,请问会怎么走?

答: 会通过10.1.1.0/255.255.255.0这个路由条目后面指示的ens33网卡去寻找10.1.1.1。

问题2: 按上面的路由表来看,如果要访问119.75.217.26这个IP,请问会怎么走?

答: 会通过网关10.1.1.2去寻找。

问题3: 为什么route -n能看到这几条路由(不同机器可能还不一样)

答:因为本机ens33这个网卡有10.1.1.0/24这个网段的IP,所以就会默认产生类似下面的路由条目

10.1.1.0 0.0.0.0 255.255.255.0 U 0 0 0 ens33

169.254.0.0/24是保留网关

10.1.1.2是配置的网关

访问一个ip的流程

当在一台linux机器上要访问一个目标ip时,请记住linux以下四步口诀(linux默认的是单路由表),如果本机有目标ip,则会直接访问本地; 如果本地没有目标ip,则看第2步

  1. 用route -n查看路由,如果路由条目里包含了目标ip的网段,则数据包就会从对应路由条目后面的网卡出去
  2. 如果没有对应网段的路由条目,则全部都走网关
  3. 如果网关也没有,则报错:网络不可达

(注意: 当不能直接到达目标ip, 那么每到达一个机器都会重复上面四步,直到找到目标)

有关linux路由的命令

查看路由

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@linux ~]# ip route show  <==单纯的显示出路由的配置而已
[root@linux ~]# ip route [add|del] [IP或网域] [via gateway] [dev 装置]
参数:
show :单纯的显示出路由表,也可以使用 list ;
add|del :添加 (add) 或删除 (del) 路由的意思。
IP或网域:可使用 192.168.50.0/24 之类的网域或者是单纯的 IP ;
via :从那个 gateway 出去,不一定需要;
dev :由那个装置连出去,这就需要了!
mtu :可以额外的配置 MTU 的数值喔!

范例一:显示出目前的路由数据
[root@linux ~]# ip route show
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.2
169.254.0.0/16 dev eth1 scope link
default via 192.168.1.254 dev eth1

如上表所示,最简单的功能就是显示出目前的路由信息,其实跟 route 这个命令相同啦! 指示必须要注意几个小东西:

  • proto:此路由的路由协议,主要有 redirect, kernel, boot, static, ra 等, 其中 kernel 指的是直接由核心判断自动配置。
  • scope:路由的范围,主要是 link ,亦即是与本装置有关的直接联机。

路由的添加与删除

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
范例二:添加路由,主要是本机直接可沟通的网域
[root@linux ~]# ip route add 192.168.5.0/24 dev eth0
# 针对本机直接沟通的网域配置好路由,不需要透过外部的路由器
[root@linux ~]# ip route show
192.168.5.0/24 dev eth0 scope link
....以下省略....

范例三:添加可以通往外部的路由,需透过 router 喔!
[root@linux ~]# ip route add 192.168.10.0/24 via 192.168.5.100 dev eth0
[root@linux ~]# ip route show
192.168.5.0/24 dev eth0 scope link
....其他省略....
192.168.10.0/24 via 192.168.5.100 dev eth0
# 仔细看喔,因为我有 192.168.5.0/24 的路由存在 (我的网卡直接联系),
# 所以才可以将 192.168.10.0/24 的路由丢给 192.168.5.100
# 那部主机来帮忙传递喔!与之前提到的 route 命令是一样的限制!

范例四:添加默认路由
[root@linux ~]# ip route add default via 192.168.1.2 dev eth0
# 那个 192.168.1.2 就是我的默认路由器 (gateway) 的意思啊! ^_^
# 真的记得,只要一个默认路由就 OK !

范例五:删除路由
[root@linux ~]# ip route del 192.168.10.0/24
[root@linux ~]# ip route del 192.168.5.0/24

启动、关闭与配置装置的相关信息

1
2
3
4
5
6
7
8
9
[root@linux ~]# ip link set eth0 up
# 启动 eth0 这个装置接口

[root@linux ~]# ip link set eth0 down
# 关闭 eth0 这个装置接口

[root@linux ~]# ip link set eth0 mtu 1000
# 更改 MTU 的值,达到 1000 bytes
# MTU:网络上传送的最大数据包

更改【网卡代号、 MAC 地址信息】

配置前要先关闭该网络卡,否则不会成功

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
范例三:修改网络卡代号、MAC 等参数
[root@linux ~]# ip link set eth0 name vbird
SIOCSIFNAME: Device or resource busy
# 因为该装置目前是启动的,所以不能这样做配置。你应该要这样做:

[root@linux ~]# ip link set eth0 down <==关闭界面
[root@linux ~]# ip link set eth0 name vbird <==重新配置
[root@linux ~]# ip link show <==观察一下
2. vbird: <BROADCAST,MILTICASE> mtu 900 qdisc pfifo_fast qlen 1000
link/ehter 00:40:d0:13:c3:46 brd ff:ff:ff:ff:ff:ff
# 怕了吧!连网络卡代号都可以改变!不过,玩玩后记得改回来啊!
# 因为我们的 ifcfg-eth0 还是使用原本的装置代号!避免有问题,要改回来
[root@linux ~]# ip link set vbird name eth0 <==界面改回来

[root@linux ~]# ip link set eth0 address aa:aa:aa:aa:aa:aa
[root@linux ~]# ip link show eth0
# 如果你的网络卡支持硬件地址 (MAC) 可以更改的话,
# 那么上面这个动作就可以更改你的网络卡地址了!厉害吧!
# 不过,还是那句老话,测试完之后请立刻改回来啊!

清空路由表

1
ip route flush table enp1s0f0

rt_tables

文件位置:/etc/iproute2/rt_tables

rt_tables就是给路由表命名的东西

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
cat /etc/iproute2/rt_tables 
#
# reserved values
#
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep
250 mgt
10 ppp0
11 ppp1

11————-ppp1

优先级——–路由表名字

一个路由表可以有多个路由

一个路由表可以有多个路由规则

增加网关

1
2
ip route add default via 117.158.200.129 dev enp1s0f0 src 117.158.200.187 table enp1s0f0
ip route add default via 网关 dev 网卡名 src 网卡IP table 路由表名

网关只能加路由条目里已有的路由网段里的一个IP (ping不通此IP都可以) 加网关不需要指定子网掩码

临时配置与删除(立即生效,重启网络服务就没了)

1
2
route add default gw x.x.x.x  
route del default gw x.x.x.x

参考链接

linux网络科普:路由器,集线器,交换机,网桥,光猫有啥区别?