我有两个 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 数据包将采用以下路径:
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
我花了很多时间查看这方面的教程和示例,但它们似乎并没有满足我的需求。具体来说,我似乎无法理解:
- 原始 IP 如何与响应 IP 匹配,
- 上面例子中'async'的含义,
- 如果上面的例子完全符合我的需要,并且
- 我应该把这个配置放在标准的 Ubuntu 服务器上的什么地方?
您需要向服务器添加一个额外的 IP(例如
192.168.0.4
)并将进入 ADSL 调制解调器 2 的流量 DNAT 到新地址。这样服务器将能够区分 2 个上游连接;目前它不能这样做,因为它看到的所有流量都注定192.168.0.3
来自互联网上的任何源地址,而没有指示数据包遍历哪个 ADSL 调制解调器。通过额外的 IP 设置,在基于策略的路由中,您
192.168.0.3
可以使用使用默认路由到 ADSL 调制解调器 1 的路由表的标记连接任何流量,并将连接标记流量192.168.0.4
使用带有 ADSL 调制解调器的路由表的标记2 作为默认网关。我过去使用Linux Advanced Routing and Traffic Control Howto中的策略路由来设置它。
在您的情况下,您的配置似乎略有不同,中间有一个开关。您可以通过添加第二个 nic 来调整您的配置以适应建议。否则,您可能需要设置多个 VLAN 才能使用单个网卡完成您的目标。