根据目标端口选择网关

根据目标端口选择网关

我找到了一个与我类似的问题,但它没有提供我想要的答案。

我在一所学校工作,学校有两个不同的互联网连接,连接到两个独立的 NAT 路由器。在我的网络上,我配置了一个 Linux 服务器,使用其中一个作为默认网关。但是,默认路由器没有直接连接到互联网,我无法在其上配置端口转发。另一个是,但那个仅供特定用途使用,因为连接速度要慢得多。

两个路由器都在同一个网络中,一个路由器的 IP 地址为 192.168.1.1,另一个路由器的 IP 地址为 192.168.1.20。不直接连接到互联网的默认路由器的 IP 地址为 192.168.1.1。

我的问题是,如果默认网关是 192.168.1.1,那么如何让 Linux 服务器使用 192.168.1.20 作为网关,当连接到特定端口的网络接口(进行 NAT 的接口)时,响应这些连接(如 SSH),而不设置到 192.168.1.20 的永久路由?

我提前谢谢你。

答案1

您需要使用带有连接标记的连接跟踪、多个路由表,并根据 MA​​C 地址识别“上游”路由器。

如果可以的话,将 2 个路由器分成不同的网络,即使它们仍然位于同一第 2 层。这将使事情变得更容易(见下文)。

基本上,你需要:

  1. 创建 2 个新路​​由表,一个具有通过 ISP1(192.168.1.1)的默认路由,另一个具有通过 ISP2(192.168.1.20)的默认路由
  2. 将主路由表中的默认路由更改为throw
  3. 使用 iptables mangle 表根据传入路由器标记连接。在您的实例中,您需要识别每个路由器的 mac 地址,以正确标记每个连接。

iptables 规则正确标记每个连接:

iptables -t mangle -A PREROUTING -m conntrack --ctstate NEW -m mac --mac aa:aa:aa:aa:aa:aa -j CONNMARK --set-mark 100
iptables -t mangle -A PREROUTING -m conntrack --ctstate NEW -m mac --mac bb:bb:bb:bb:bb:bb -j CONNMARK --set-mark 200

这是未经测试的;我总是使用单独的接口,这样我就可以使用-i eth1-i eth2不是-m mac --mac语法。

完整的信息和所有详细的细节太多了,无法在这里回答,但一旦你理解了,这是一个很好的指南:http://www.cyber.com.au/~twb/doc/dual-uplink.txt

相关内容