在 Linux 中使用 ip 命令添加多条路由示例

举报
Tiamo_T 发表于 2022/09/14 23:42:39 2022/09/14
【摘要】 除了默认路由,您还可以配置其他路由。

除了默认路由,您还可以配置其他路由。

例如,您的服务器可能有 2 个接口(eth0 和 eth1)。默认情况下,无论您在 eth1 上配置了什么 IP 地址,所有流量都通过接口 eth0 路由。

要通过 eth1 路由传入和传出流量,除了默认路由 (eth0),您还需要为 eth1 添加其他路由。

在本文中,让我们使用以下示例:

  • eth0 已配置 IP 地址为 19.86.101.54,网络掩码为 255.255.255.0,默认网关为 19.86.101.1
  • eth1 已配置 IP 地址为 19.86.100.176,网络掩码为 255.255.255.0,其网关 IP 地址为 19.86.100.1

您可以使用ifconfig 命令查看接口卡的当前 IP 地址,如下所示。

# ifconfig -a
eth0      Link encap:Ethernet  HWaddr 00:50:56:8E:0B:EC
          inet addr:19.86.101.54  Bcast:19.86.101.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3735 errors:0 dropped:0 overruns:0 frame:0
          TX packets:336 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:295679 (288.7 Kb)  TX bytes:50312 (49.1 Kb)

eth1      Link encap:Ethernet  HWaddr 00:50:56:8E:27:0D
          inet addr:19.86.100.176  Bcast:19.86.100.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:14 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:840 (840.0 b)  TX bytes:0 (0.0 b)

此外,netstat 命令输出表明默认网关指向 eth0,

# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         19.86.101.1     0.0.0.0         UG        0 0          0 eth0
19.86.100.0     0.0.0.0         255.255.255.0   U         0 0          0 eth1
19.86.101.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0
127.0.0.0       0.0.0.0         255.0.0.0       U         0 0          0 lo
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0

通过上述设置,您可能能够 ping 两个网关并与其他设备通信而不会出现任何问题。但是,请记住,默认情况下,所有流量都通过 eth0 路由。

当您从网络外部 ping IP 地址 19.86.100.176 时,您可能会注意到它无法 ping。

为了实现这一点,您需要在路由表中创建一个新策略。路由表位于 /etc/iproute2/rt_tables。配置前的初始规则文件可能如下所示。

# cat /etc/iproute2/rt_tables
#
# reserved values
#
255     local
254     main
253     default
0       unspec
#
# local
#
#1      inr.ruhep
#

要查看所有当前规则,请使用 ip 命令,如下所示:

# ip rule show
0:      from all lookup local
32766:  from all lookup main
32767:  from all lookup default

首先,在进行任何更改之前备份 rt_Tables。

cd /etc/iproute2
cp rt_tables rt_tables.orig

接下来,在 /etc/iproute2/rt_tables 文件中创建一个新的策略路由表条目:

echo "1 admin" >> /etc/iproute2/rt_tables

现在在 admin 表中添加路由条目。

ip route add 19.86.100.0/24 dev eth1 src 19.86.100.176 table admin
ip route add default via 19.86.100.1 dev eth1 table admin

在上面的例子中:

  • 在第一个 ip 命令中,我们将子网 19.86.100.0 添加到管理表中,子网掩码为 255.255.255.0,源 IP 地址为 19.86.100.176 和设备 eth1。
  • 在第二个 ip 命令中,我们将路由 19.86.100.1 添加到 admin 表中。这样,管理表中定义的所有规则都通过设备 eth1 路由流量。

上述命令执行成功后,您需要指示操作系统如何使用该表。

在“ip rule show”中,您可能会注意到“32766: from all lookup main”这一行。这是指示操作系统路由“主”表中定义的所有流量的行,该表是默认网关。

所有规则都按升序执行。因此,我们将在“主”表上方添加规则条目。

ip rule add from 19.86.100.176/24 table admin
ip rule add to 19.86.100.176/24 table admin
ip route flush cache

在上面的例子中:

  • 第一个命令添加了所有到 eth1 的 IP 的流量都需要使用“admin”路由表而不是“main”路由表的规则。
  • 第二条命令添加了规则,即所有来自 eth1 的 IP 的传出流量都需要使用“admin”路由表而不是“main”路由表。
  • 第三条命令用于提交前面命令中的所有这些更改

最后,使用以下命令验证您的更改是否正确:

# ip rule show
0:      from all lookup local
32764:  from all to 19.86.100.176/24 lookup admin
32765:  from 19.86.100.176/24 lookup admin
32766:  from all lookup main
32767:  from all lookup default

此时,您应该能够从外部网络 ping IP 地址 19.86.100.176 并查看所有应该使用 eth1 的流量是否按预期工作。

要使这些更改在重新启动后保持不变,您可以将这些命令添加到 /etc/init.d/boot.local(对于 SUSE Linux)或 /etc/rc.d/rc.local(对于 Redhat、CentOS)。

如果您想在不同的子网上再配置一个 IP 地址,请重复上述所有步骤,但使用不同的表名。代替“admin”表,使用“admin-new”表。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。