如何设置和测试静态网络路由

admin4个月前笔记25

RHCE(Red Hat Certified Engineer,红帽认证工程师)是红帽公司的一个认证,红帽向企业社区贡献开源操作系统和软件,同时它还给公司提供训练、支持和咨询服务。

image.png

在 RHCE 的第一和第二部分,我们会介绍一些基本的但典型的情形,也就是静态路由原理、包过滤和网络地址转换。

请注意我们不会作深入的介绍,但以这种方式组织内容能帮助你开始第一步并继续后面的内容。

红帽企业版 Linux 7 中的静态路由

我们在该篇指南中会考虑以下场景。我们有一台 RHEL 7,连接到 1号路由器 [192.168.0.1] 以访问因特网以及 192.168.0.0/24 中的其它机器。

第二个路由器(2号路由器)有两个网卡:enp0s3 同样连接到路由器1号以访问互联网,及与 RHEL 7 和同一网络中的其它机器通讯,另外一个网卡(enp0s8)用于授权访问内部服务所在的 10.0.0.0/24 网络,例如 web 或数据库服务器。

该场景可以用下面的示意图表示:

image.png

静态路由网络示意图

在这篇文章中我们会集中介绍在 RHEL 7 中设置路由表,确保它能通过1号路由器访问因特网以及通过2号路由器访问内部网络。

在 RHEL 7 中,你可以通过命令行用ip 命令配置和显示设备和路由。这些更改能在运行的系统中及时生效,但由于重启后不会保存,我们会使用/etc/sysconfig/network-scripts目录下的ifcfg-enp0sX和route-enp0sX文件永久保存我们的配置。

首先,让我们打印出当前的路由表:

# ip route show

image.png

检查当前路由表

从上面的输出中,我们可以得出以下结论:

  • 默认网关的 IP 是 192.168.0.1,可以通过网卡 enp0s3 访问。

  • 系统启动的时候,它启用了到 169.254.0.0/16 的 zeroconf 路由(只是在本例中)。也就是说,如果机器设置通过 DHCP 获取 IP 地址,但是由于某些原因失败了,它就会在上述网段中自动分配到一个地址。这一行的意思是,该路由会允许我们通过 enp0s3 和其它没有从 DHCP 服务器中成功获得 IP 地址的机器机器相连接。

  • 最后,但同样重要的是,我们也可以通过 IP 地址是 192.168.0.18 的 enp0s3 与 192.168.0.0/24 网络中的其它机器连接。

下面是这样的配置中你需要做的一些典型任务。除非另有说明,下面的任务都在2号路由器上进行。

确保正确安装了所有网卡:

# ip link show

如果有某块网卡停用了,启动它:

# ip link set dev enp0s8 up

分配 10.0.0.0/24 网络中的一个 IP 地址给它:

# ip addr add 10.0.0.17 dev enp0s8

噢!我们分配了一个错误的 IP 地址。我们需要删除之前分配的那个并添加正确的地址(10.0.0.18):

# ip addr del 10.0.0.17 dev enp0s8
# ip addr add 10.0.0.18 dev enp0s8

现在,请注意你只能添加一个通过网关到目标网络的路由,网关需要可以访问到。因为这个原因,我们需要在 192.168.0.0/24 范围中给 enp0s3 分配一个 IP 地址,这样我们的 RHEL 7 才能连接到它:

# ip addr add 192.168.0.19 dev enp0s3

最后,我们需要启用包转发:

# echo "1" > /proc/sys/net/ipv4/ip_forward

并停用/取消防火墙(从现在开始,直到下一篇文章中我们介绍了包过滤):

# systemctl stop firewalld
# systemctl disable firewalld

回到我们的 RHEL 7(192.168.0.18),让我们配置一个通过 192.168.0.19(2号路由器的 enp0s3)到 10.0.0.0/24 的路由:

# ip route add 10.0.0.0/24 via 192.168.0.19

之后,路由表看起来像下面这样:

# ip route show

image.png

确认网络路由表

同样,在你尝试连接的 10.0.0.0/24 网络的机器中添加对应的路由:

# ip route add 192.168.0.0/24 via 10.0.0.18

你可以使用 ping 测试基本连接:

在 RHEL 7 中运行:

# ping -c 4 10.0.0.20

10.0.0.20 是 10.0.0.0/24 网络中一个 web 服务器的 IP 地址。

在 web 服务器(10.0.0.20)中运行

# ping -c 192.168.0.18

192.168.0.18 也就是我们的 RHEL 7 机器的 IP 地址。

另外,我们还可以使用tcpdump(需要通过yum install tcpdump安装)来检查我们 RHEL 7 和 10.0.0.20 中 web 服务器之间的 TCP 双向通信。

首先在第一台机器中启用日志:

# tcpdump -qnnvvv -i enp0s3 host 10.0.0.20

在同一个系统上的另一个终端,让我们通过 telnet 连接到 web 服务器的 80 号端口(假设 Apache 正在监听该端口;否则应在下面命令中使用正确的监听端口):

# telnet 10.0.0.20 80

tcpdump 日志看起来像下面这样:

image.png

检查服务器之间的网络连接

通过查看我们 RHEL 7(192.168.0.18)和 web 服务器(10.0.0.20)之间的双向通信,可以看出已经正确地初始化了连接。

请注意你重启系统后会丢失这些更改。如果你想把它们永久保存下来,你需要在我们运行上面的命令的相同系统中编辑(如果不存在的话就创建)以下的文件。

尽管对于我们的测试例子不是严格要求,你需要知道 /etc/sysconfig/network 包含了一些系统范围的网络参数。一个典型的 /etc/sysconfig/network看起来类似下面这样:

# Enable networking on this system?
NETWORKING=yes
# Hostname. Should match the value in /etc/hostname
HOSTNAME=yourhostnamehere
# Default gateway
GATEWAY=XXX.XXX.XXX.XXX
# Device used to connect to default gateway. Replace X with the appropriate number.
GATEWAYDEV=enp0sX

当需要为每个网卡设置特定的变量和值时(正如我们在2号路由器上面做的),你需要编辑/etc/sysconfig/network-scripts/ifcfg-enp0s3和/etc/sysconfig/network-scripts/ifcfg-enp0s8文件。

下面是我们的例子,

TYPE=Ethernet
BOOTPROTO=static
IPADDR=192.168.0.19
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
NAME=enp0s3
ONBOOT=yes

以及

TYPE=Ethernet
BOOTPROTO=static
IPADDR=10.0.0.18
NETMASK=255.255.255.0
GATEWAY=10.0.0.1
NAME=enp0s8
ONBOOT=yes

其分别对应 enp0s3 和 enp0s8。

由于要为我们的客户端机器(192.168.0.18)进行路由,我们需要编辑/etc/sysconfig/network-scripts/route-enp0s3:

10.0.0.0/24 via 192.168.0.19 dev enp0s3

现在reboot你的系统,就可以在路由表中看到该路由规则。


相关文章

du 命令秘籍

du命令是检查硬盘使用情况,统计文件或目录及子目录使用硬盘的空间大小。参数的不同组合,可以更快的提高工作效率,以下仅列出了经常使用到的参数,如需更详细的信息,请用man du命令来获得。1.命令格式d...

深入的理解UDP编程

深入的理解UDP编程

什么是UDP?UDP是User Datagram Protocol(用户数据报协议)的缩写,它是一个简单的协议,简单到UDP规范RFC0768只有区区3页。UDP是工作在IP层之上的传输层协议,UDP...

Dos一键清理系统垃圾教程

del 命令的参数/F 强制删除只读文件。/S 从所有子目录删除指定文件。/Q 安静模式。删除全局通配符时,不要求确认。rd 命令的参数/s 除目录本身外,还将删除指定目录下的所有子目录和文...

从 0 开始了解 Docker

从 0 开始了解 Docker

序Docker 自开源以来受到了各大公司的广泛关注,或许现在互联网公司的运维体系不承载在 Docker(或 Pouch 等)之上都不好意思说自己的互联网公司。本文会简单介绍下 Docker 的基础概念...

如何用zabbix创建自定义监控项

如何用zabbix创建自定义监控项

背景:zabbix本身提供了很多可选的监控项,可以满足绝大部分的监控需求。有时候由于业务需求,需要自定义监控项。 下面以创建mysql自定义监控项为例,分享如何创建zabbix自定义监控项。环境说明:...

Linux系统中设置开机自动运行的两种方法

Linux系统中设置开机自动运行的两种方法

有时可能会需要在重启时或者每次系统启动时运行某些命令或者脚本。我们要怎样做呢?本文中我们就对此进行讨论。 我们会用两种方法来描述如何在 CentOS/RHEL 以及 Ubuntu 系统上做到...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。