如何在 Linux 中添加路由
Route 命令用于显示/操作 IP 路由表。它主要用于通过接口设置到特定主机或网络的静态路由。
在本文中,我们将了解如何使用 route 命令在 Linux 中操作路由表。
我们将首先通过一些基本的路由命令示例来解释路由是如何完成的,然后我们将使用一个示例网络架构来解释如何在您的网络中设置路由。
一、路由是如何完成的?
1.显示现有路线
route 命令默认会显示内核路由表条目的详细信息。在本例中,执行 route 命令的系统的 ip-address 为 192.168.1.157
$ route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.0 * 255.255.255.0 U 0 0 0 eth0
上述命令显示,如果目的地在网络范围 192.168.1.0 – 192.168.1.255 内,则网关为 *,即 0.0.0.0。
当在这个 IP 范围内发送数据包时,通过 ARP 协议找到目标的 MAC 地址,并将数据包发送到 MAC 地址。
为了将数据包发送到不在此 IP 范围内的目的地,数据包将被转发到默认网关,该网关决定该数据包的进一步路由。我们很快就会看到这一点。
默认情况下,route 命令在其输出中显示主机名。我们可以使用 -n 选项请求它显示数字 IP 地址,如下所示。
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
0.0.0.0 192.168.1.10 0.0.0.0 UG 0 0 0 eth0
2. 添加默认网关
我们可以指定必须将不在网络内的数据包转发到网关地址。
以下 route add 命令将默认网关设置为 192.168.1.10。
$ route add default gw 192.168.1.10
现在 route 命令将显示以下条目。
$ route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.0 * 255.255.255.0 U 0 0 0 eth0
default gateway.co.in 0.0.0.0 UG 0 0 0 eth0
现在我们刚刚为我们的机器添加了一个默认网关。为了验证它是否正常工作,ping 一些外部主机(例如,google.com)以发送 ICMP 数据包。
$ ping www.google.com
以下是执行上述 ping 命令时发生的事件序列。
- 首先它会查询 DNS 服务器以获取 google.com 的 IP 地址(例如:74.125.236.34)
- 目标地址 ( 74.125.236.34 ) 不在网络范围内。
- 因此,在第 3 层(IP 标头)中,DESTINATION IP 将设置为“74.125.236.34”。
- 在第 2 层,DESTINATION MAC 地址将填写为默认网关的 MAC 地址(192.168.1.10 的 MAC)。如前所述,将使用 ARP 找到 MAC。
- 当数据包发出时,网络交换机(工作在第 2 层)将数据包发送到默认网关,因为目标 MAC 是网关的 MAC。
- 一旦网关收到数据包,根据其路由表,它将进一步转发数据包。
上面的 2 个示例可以很好地了解路由是如何在网络中完成的。现在我们将看到 route 命令可用的其他命令行选项。
3.列出内核的路由缓存信息
内核维护路由缓存信息以更快地路由数据包。我们可以使用 -C 标志列出内核的路由缓存信息。
$ route -Cn
Kernel IP routing cache
Source Destination Gateway Flags Metric Ref Use Iface
192.168.1.157 192.168.1.51 192.168.1.51 0 0 1 eth0
192.168.1.157 74.125.236.69 192.168.1.10 0 0 0 eth0
.
.
.
4. 拒绝路由到特定主机或网络
有时我们可能想要拒绝将数据包路由到特定的主机/网络。为此,请添加以下条目。
$ route add -host 192.168.1.51 reject
正如您在下面看到的,我们无法访问该特定主机(即我们刚刚拒绝的 0.51 主机)。
$ ping 192.168.1.51
connect: Network is unreachable
但是我们仍然可以访问网络中的其他主机(例如,仍然可以访问 .52 主机)。
$ ping 192.168.1.53
PING 192.168.1.53 (192.168.1.53) 56(84) bytes of data.
64 bytes from 192.168.1.53: icmp_seq=1 ttl=64 time=7.77 ms
如果要拒绝整个网络 ( 192.168.1.1 – 192.168.1.255 ),请添加以下条目。
$ route add -net 192.168.1.0 netmask 255.255.255.0 reject
现在,您无法访问该网络中的任何主机(例如:.51、.52、.53 等)
$ ping 192.168.1.51
connect: Network is unreachable
$ ping 192.168.1.52
connect: Network is unreachable
$ ping 192.168.1.53
connect: Network is unreachable
二、示例网络架构(了解路由)
让我们在其余示例中使用以下示例网络架构。
在下图中,我们有 2 个单独的网络(192.168.1.0 和 192.168.3.0,子网掩码为 255.255.255.0)。
我们还有一台带有 3 个网卡的“网关”机器。第一张卡连接到 192.168.1.0,第二张卡连接到 192.168.3.0,第三张卡连接到外部世界。
5. 使 192.168.3.* 可从 192.168.1.* 访问
现在我们需要添加一个路由条目,以便我们能够 ping 192.168.3。来自 192.168.1 的系列 IP 地址。系列。我们的共同点是 GATEWAY 机器。
因此,在 192.168.1.* 网络中的每台机器上,将添加一个默认网关,如下所示。
$ route add default gw 192.168.1.10
现在当 192.168.1.1 ping 192.168.3.1 时,它将通过 192.168.1.10 进入 GATEWAY。
在 GATEWAY 中,添加以下路由条目。
$ route add -net 192.168.3.0 netmask 255.255.255.0 gw 192.168.3.10
现在所有发往 192.168.3.* 网络的数据包都将通过 192.168.3.10 接口转发,然后将数据包传递到寻址机器。
6. 使 192.168.1.* 可从 192.168.3.* 访问
这与我们之前所做的非常相似。
因此,在 192.168.3.* 网络中的每台机器上,将添加一个默认网关,如下所示。
$ route add default gw 192.168.3.10
在 GATEWAY 中,添加以下路由条目。
$ route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.10
现在 192.168.3.* 机器可以 ping 192.168.1.* 机器。
7.允许互联网访问(外部世界)
在前面的两个示例中,我们将 2 个不同的网络互连起来。
现在我们需要从这两个不同的网络访问互联网。为此,我们可以向连接到外部世界的 125.250.60.59 添加默认路由(当没有匹配的路由规则时),如下所示。
$ route add default gw 125.250.60.59
这是它的工作原理:
- 现在,当您尝试从任何这些机器(例如,从 192.168.3.2)访问 Internet(例如:ping google.com)时,以下是发生的事件顺序。
- 由于目的地(google.com)不在3.*系列中,所以会通过3.10接口转发到GATEWAY
- 在 GATEWAY 中,它检查目的地是否在 1.* 范围内。在这个例子中,它不是。
- 然后检查目的地是否在 2.* 范围内。在这个例子中,它不是
- 最后,它采用默认路由转发数据包(即使用连接到外部世界的 125.250.60.59 接口)。
- 点赞
- 收藏
- 关注作者
评论(0)