在 Linux 中使用 ip 命令添加多条路由示例
除了默认路由,您还可以配置其他路由。
例如,您的服务器可能有 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”表。
- 点赞
- 收藏
- 关注作者
评论(0)