我有多个以太网卡,其上配置了两组不同的网络。
的输出route -n
如下:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.3.1 0.0.0.0 UG 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth1
192.168.1.0 0.0.0.0 255.255.255.0 U 1 0 0 eth1
192.168.3.0 0.0.0.0 255.255.255.0 U 1 0 0 eth0
传出连接没有问题。问题出在传入连接上:我该如何路由传入流量以通过 192.168.1.X ?
我想补充的另一件事是,我需要传出连接通过 192.168.3.1。
答案1
我自己找到了解决方案:多个上行链路/提供商的路由
一种常见的配置如下,其中有两个提供商将本地网络(甚至单台机器)连接到大型互联网。
________
+------------+ /
| | |
+-------------+ Provider 1 +-------
__ | | | /
___/ \_ +------+-------+ +------------+ |
_/ \__ | if1 | /
/ \ | | |
| Local network -----+ Linux router | | Internet
\_ __/ | | |
\__ __/ | if2 | \
\___/ +------+-------+ +------------+ |
| | | \
+-------------+ Provider 2 +-------
| | |
+------------+ \________
如何对通过特定提供商(比如提供商 1)传入的数据包的答案进行路由,然后通过同一提供商将其传回。
让我们首先设置一些符号名称。让 $IF1 成为第一个接口的名称(上图中的 if1),让 $IF2 成为第二个接口的名称。然后让 $IP1 成为与 $IF1 关联的 IP 地址,让 $IP2 成为与 $IF2 关联的 IP 地址。接下来,让 $P1 成为提供商 1 的网关的 IP 地址,让 $P2 成为提供商 2 的网关的 IP 地址。最后,让 $P1_NET 成为 $P1 所在的 IP 网络,让 $P2_NET 成为 $P2 所在的 IP 网络。
可以创建两个附加路由表,例如 T1 和 T2。这些路由表添加到 /etc/iproute2/rt_tables 中。然后,您可以在这些表中设置路由,如下所示:
ip route add $P1_NET dev $IF1 src $IP1 table T1
ip route add default via $P1 table T1
ip route add $P2_NET dev $IF2 src $IP2 table T2
ip route add default via $P2 table T2
没什么特别的,只需构建到网关的路由并通过该网关构建默认路由,就像在单个上游提供商的情况下所做的那样,但将路由放在每个提供商的单独表中。请注意,网络路由就足够了,因为它告诉您如何找到该网络中的任何主机,其中包括网关,如上所述。接下来,您设置主路由表。通过连接到该邻居的接口将事物路由到直接邻居是一个好主意。请注意“src”参数,它们确保选择了正确的传出 IP 地址。
ip route add $P1_NET dev $IF1 src $IP1
ip route add $P2_NET dev $IF2 src $IP2
然后,选择默认路由:ip route add default via $P1
接下来,设置路由规则。这些规则实际上会选择要使用哪个路由表进行路由。如果您已经有相应的源地址,则需要确保路由出给定的接口:ip rule add from $IP1 table T1 ip rule add from $IP2 table T2
答案2
您不会将传入路由到特定路由 - 您会将传出路由...
以您为目标的最后一跳(路由器或其他)将决定您在哪个接口上联系...例如,如果从 192.168.1.x 建立连接,它将不会路由到连接到 192.168.3.x 的 nic。
也许我在这里遗漏了一些东西......如果这不是您想听到的,我认为您需要绘制您的网络拓扑或向我们提供更多信息。