配置Linux静态路由
与其他操作系统不同,Linux系统作为常见的服务器操作系统,其可能会遇到更多样的网络环境。除了常见服务器使用的Internet网络连接外,通常还会有公司内部网络,远程访问相关的网络等,此时就需要正确设置路由,否则就无法正确访问。本节将简要介绍如何在Linux系统中设置静态路由。
配置网络接口地址
设置静态路由的前提是网络接口上配置有IP地址等信息,否则路由条目无法生效。在网络接口上配置单个IP地址的相关知识已在第1章中介绍过,此处介绍如何在同一接口上配置多个IP地址的方法。
(1)使用子接口
使用子接口在网络接口上配置多个IP地址是一个比较常见的做法,子接口名字形如:ens33:1,其中ens33是网络接口的名称,“:1”则表示这是一个子接口。配置过程如【示例1-1】所示。
【示例1-1】
[root@node1 ~]# ifconfig ens33:1 172.16.45.134/24 up
[root@node1 ~]# ifconfig ens33:1
ens33:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.16.45.134 netmask 255.255.255.0 broadcast 172.16.45.255
ether 00:0c:29:37:b3:0d txqueuelen 1000 (Ethernet)
使用以上命令配置的子接口将在重启后消失,如需要在重启后继续生效则需要将上述命令写入文件/etc/ec.local中。
(2)使用多配置
CentOS 7允许在一个网络接口上配置多个不同IP地址、子网掩码、网关和DNS服务器地址等,但同时只能激活一个配置。多配置在图形界面中可以单击“Application”,然后在弹出的菜单中一次单击“System tools”、“Settings”,打开设置界面,如图1.1所示。
在设置界面中可以找到CentOS 7中几乎所有的常规设置,此时单击“Network”弹出网络设置界面,如图1.2所示。
在网络设置界面中可以看到网络接口相关设置,此时可以单击“Add Profile”按钮为已连接网络连接添加配置文件。添加配置文件界面如图1.3所示。
在新配置中可以添加诸如802.1x、IPv4等类型网络,以常见的IPv4网络为例,可以在左侧选择IPv4,然后在右侧的“Addresses”中选择“Manual”。然后就可以在下面填入IP地址、子网掩码、网关、DNS、静态路由等信息。
多次添加即可在同一个网络连接上添加多个配置文件,这些配置文件可以在网络设置界面的右侧看到,如图1.4所示。
添加了多配置文件后,接下来的任务就是切换配置文件让不同的配置文件在不同的网络环境中生效。切换配置文件需要单击桌面右上角的联网图标菜单,将弹出所有的配置文件列表,如图1.5所示。
此时只需要单击对应的配置文件名称,就可以让相应的配置文件生效,如果系统重启则采用上一次生效的配置文件。
接口IP地址与直联路由
无论使用哪种方式为网络接口配置IP地址等信息,只要网络接口接入某个子网,路由表都会立即为子网添加相应的直联路由。可以使用route
命令查看路由表验证,如【示例1-2】所示。
【示例1-2】
[root@node1 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.139.2 0.0.0.0 UG 100 0 0 ens33
192.168.139.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
在【示例1-2】的命令输出中第二条就是与192.168.139.0
子网的直联路由,这是由接口ens33的IP配置决定的。如果此接口的IP地址发生变化或有新的接口拥有了IP地址,路由表中的直联路由也会发生变化,如【示例1-3】所示。
【示例1-3】
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.139.2 0.0.0.0 UG 100 0 0 ens33
172.16.0.0 0.0.0.0 255.255.255.0 U 0 0 0 ens33
192.168.139.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
由以上示例可以看到当接口的IP地址发生改变后,路由表中的直联路由也发生了改变。
route
命令
在Linux系统中,查看、添加、删除路由的是route
命令。其添加删除路由时的基本格式如【示例1-4】所示。
【示例1-4】
route add|dell [-net|-host] ipaddress1 netmask netmask gw ipaddress2|dev
各项参数含义如下:
- add|del:表示添加或删除一个路由条目。
- -net|-host:路由条目的目的地是一个或一台主机
- ipaddress1:目标子网的子网号或目标主机的IP地址。
- netmask:目标子网或主机的子网掩码,当目标为主机时,子网掩码长度应为32位。
- gw:用于指定下一跳地址或下一跳设备。通常将Linux作为一台路由器使用时才会使用下一跳设备。
除以上列举的参数之外,还有一个用于显示路由表的选项n
,此选项表示使用IP地址显示而不尝试使用域名。IP地址转换为域名需要解析,因此使用选项**n**
可以快速显示路由表,如【示例1-5】所示。
【示例1-5】
[root@node1 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.139.2 0.0.0.0 UG 100 0 0 ens33
172.16.0.0 0.0.0.0 255.255.255.0 U 0 0 0 ens33
172.16.0.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
192.168.139.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
【示例1-5】所示的命令输出了系统内核的路由表,路由表中的几个字段含义如下:
- Destination:目标网络号或目标主机IP地址,
default/0.0.0.0
表示这是一条默认路由。 - Gateway:网关地址即下一跳地址,其中
0.0.0.0
或“*”表示主机与该子网直接相联无需下一跳地址(直联路由)。 - Genmask:子网对应的子网掩码。
- Flags:路由标记。
- Metric:路由条目的代价值。Metric数值越高代价越大,此值一般在有多条到目标网络的路由时才起作用。
- Ref:路由条目被引用的次数。
- Use:路由条目被路由软件查找的次数。
- Iface:到达目标网络使用的本地接口。
在上面的字段中,Flags路由标记用于指示路由条目的状态,常见的状态标记及含义如下:
- U:当前路由处于活动状态(可用状态)。
- H:路由条目的目标是主机而不是子网。
- G:指向默认网关的路由。
- R:恢复动态路由产生的路由。
- D:由后台程序动态产生的。
- M:此条目经过了后台程序的修改。
- C:缓存的路由条目。
- !:拒绝路由。
route
命令还可以用于添加默认路由(通常称为默认网关),但更多的是用于添加静态路由,使用方法如【示例1-6】所示。
【示例1-6】
#添加删除默认路由
[root@node1 ~]# route add default gw 192.168.139.2
[root@node1 ~]# route del default gw 192.168.139.2
#添加、删除到网络的路由
#子网掩码采用不同的形式,因此以下两条语句的功能相同
[root@node1 ~]# route add -net 192.168.1.0/24 gw 192.168.139.2
[root@node1 ~]# route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.139.2
[root@node1 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.139.2 0.0.0.0 UG 100 0 0 ens33
192.168.1.0 192.168.139.2 255.255.255.0 UG 0 0 0 ens33
192.168.139.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
#添加删除到主机的路由
[root@node1 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.139.2 0.0.0.0 UG 100 0 0 ens33
192.168.1.0 192.168.139.2 255.255.255.0 UG 0 0 0 ens33
192.168.100.80 192.168.139.2 255.255.255.255 UGH 0 0 0 ens33
192.168.139.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
[root@node1 ~]# route del -host 192.168.100.80
Linux路由器配置实例
学习完之前的基本知识后,可以利用Linux来制作一个路由器。本小节将简单介绍路由器包括的功能及如何将Linux配置成一个实用的路由器。
一个实用的路由器最起码应该包括DHCP、数据包转发、NAT等,DHCP用来位子网中的计算机分配IP地址、网关、DNS等信息;数据包转发是路由器的核心功能,用来将数据包准确地转发到相应的子网;NAT功能用来作地址转换,即将子网发往外部网络的数据包地址作转换。在Linux系统上配置路由器可以采取两种方案,其一是使用Linux自身的内核转发功能、配置DHCP服务并使用防火墙的地址伪装作NAT功能;其二是使用其他路由器软件,例如著名的Zebra等。本小节将采用Linux内核的数据包转发功能作为示例讲解。
在本小节的路由器配置中,采用的拓扑图如图1.6所示,路由器的一端连接子网192.168.0.0/24
。
在开始配置路由器之前,需要先为路由器和子网计算机上的网络连接正确配置IP地址,确保路由器能正常访问外部网络。配置子网计算机时,默认网关应该为192.168.0.1
。配置完IP地址后,接下来需要配置内核转发,让内核具有转发数据包的功能,如【示例1-7】所示。
【示例1-7】
#添加内核转发参数
cat /etc/systcl.conf
......
net.ipv4.ip_forward = 1
#让内核参数生效
sysctl -p
net.ipv4.ip_forward = 1
这样Linux就具备了数据包转发功能,接下来需要让Linux防火墙具备NAT功能,这个功能通常由防火墙iptables
来完成,如【示例1-8】所示。
【示例1-8】
#禁用并停止firewalld
systemctl disable firewalld
systemctl stop firewalld
#安装iptables防火墙
yum install -y iptables-services
#启用并开启iptables
systemctl start iptables
systemctl enable iptables
#在ens33接口上开启地址伪装
iptables -t nat -I POSTROUTING -o ens33 -j MASQUERADE
接下来就可以在子网计算机上访问外部网络了,可以通过ping
命令、curl
访问网址等方式验证。