如何通过特定接口路由传入连接?

如何通过特定接口路由传入连接?

我有多个以太网卡,其上配置了两组不同的网络。

的输出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。

也许我在这里遗漏了一些东西......如果这不是您想听到的,我认为您需要绘制您的网络拓扑或向我们提供更多信息。

相关内容