我有两个 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 服务器上的哪里?
答案1
您需要向服务器添加一个额外的 IP(例如192.168.0.4
),并将进入 ADSL 调制解调器 2 的流量通过 DNAT 转移到新地址。这样,服务器将能够区分两个上游连接;目前它无法做到这一点,因为它看到的所有流量都发往192.168.0.3
互联网上的任何源地址,而没有迹象表明数据包经过了哪个 ADSL 调制解调器。
通过附加 IP 设置,在基于策略的路由中,您可以将任何流量标记为192.168.0.3
使用默认路由到 ADSL 调制解调器 1 的路由表,并将任何流量标记为192.168.0.4
使用以 ADSL 调制解调器 2 作为默认网关的路由表。
答案2
我以前曾使用策略路由设置过Linux 高级路由和流量控制指南。
就您而言,您的配置似乎略有不同,中间有一个交换机。您可以根据建议调整配置,例如添加第二个网卡。否则,您可能需要设置多个 VLAN 才能使用单个网卡完成您的任务。