简单的基于策略的路由,用于匹配源包和返回包

我有两个ADSL调制解调器路由器和一个服务器都在同一个静态分配的IP地址范围(192.168.0.1/24)。

Internet 1 -- (1.1.1.1) Modem 1 (192.168.0.1) -- Switch -- (192.168.0.3) Server Internet 2 -- (2.2.2.2) Modem 2 (192.168.0.2) -----/ 

每个调制解调器将端口转发到服务器,例如ssh。 这在一个调制解调器上工作,但不在另一个上 如果我做一个数据包跟踪,ssh数据包到达服务器,并通过默认网关返回,它可能有一个不同的外部IP到原点。 如果它与原点不匹配,则响应将被丢弃,并且ssh连接超时。

例如,如果服务器中的默认网关是192.168.0.1,那么ssh数据包将采用以下path:

 Request: SSH to 1.1.1.1 -> 192.168.0.1 -> 192.168.0.3 Response: 192.168.0.3 -> 192.168.0.1 -> 1.1.1.1 Result: WORKS! :-D Request: SSH to 2.2.2.2 -> 192.168.0.2 -> 192.168.0.3 Response: 192.168.0.3 -> 192.168.0.1 -> 1.1.1.1 Result: WRONG RESPONSE IP (2.2.2.2 != 1.1.1.1) 

通过与IRC ##networking上的人聊天,我明白了我所需要的是“基于源的路由”,一种基于策略的路由。

从我所知道的情况来看,PBR看起来像这样:

 access-list 1 permit 192.168.0.1 access-list 2 permit 192.168.0.2 ! interface async 1 ip policy route-map equal-access ! route-map equal-access permit 10 match ip address 1 set ip default next-hop 192.168.0.1 route-map equal-access permit 20 match ip address 2 set ip default next-hop 192.168.0.2 route-map equal-access permit 30 set default interface null0 

我花了好几个小时看这个教程和例子,但是他们似乎并没有接近我的需求。 具体来说,我似乎无法理解:

  1. 起始IP如何与响应IP相匹配,
  2. 在上面的例子中,“asynchronous”的含义,
  3. 如果上面的例子甚至是远程正确的,我的需求和
  4. 我应该把这个configuration放在一个标准的Ubuntu服务器上?

您需要添加一个额外的IP到服务器(例如192.168.0.4 )和DNAT来到ADSL Modem 2的stream量到新的地址。 这样服务器将能够区分2个上游连接; 目前无法做到这一点,因为它看到的所有stream量都是从192.168.0.3192.168.0.3 ,无论从互联网上的任何源地址,都没有指出数据包经过的是哪个ADSL调制解调器。

通过额外的IP设置,在基于策略的路由中,连接将任何stream量标记为192.168.0.3并带有标记,该标记使用默认路由到ADSL调制解调器1的路由表,并将带有标记的stream量连接标记为192.168.0.4 ADSL Modem 2作为默认网关的路由表。

过去,我使用“ Linux高级路由和stream量控制手册”中的策略路由设置了这一点。

在你的情况,你似乎有一个稍微不同的configuration与中间的开关。 您可以通过添加第二个nic来适应您的configuration。 否则,您可能需要设置多个VLAN来完成您使用单个NIC后的操作。