使用 2 个 ISP 进行自定义(基于端口或协议)路由

使用 2 个 ISP 进行自定义(基于端口或协议)路由

我办公室里的Linux计算机:

> uname -a 
Linux 3.2.0-2-686-pae #1 SMP Tue Mar 20 19:48:26 UTC 2012 i686 GNU/Linux.

它有 2 个 ISP,第一个是静态 IP 和默认路由:

> ip ro
default via 19.11.20.15 dev vlan40
19.11.20.0/27 dev vlan40  proto kernel  scope link  src 19.11.20.20

第二个是 gprs 调制解调器。我没有使用默认路由来调用 wvdial:

> ip ro
10.64.64.64 dev ppp0  proto kernel  scope link  src 10.68.173.91

其次,我家里另一个网络上的计算机有公共 IP,但并不总是在线。他的配置非常相似,Debian Linux。

我的任务是通过 ssh 访问第一台计算机,即使第一个 ISP 失败。

今天我使用了如下命令:

ip ro add 46.48.10.56 via 10.64.64.64
while true ; do  ssh -R2221:127.0.0.1:22 [email protected]; done

之后,我可以通过ssh -p 2221 127.0.0.1第二个 ISP 和调制解调器连接到办公室。

它很好,但是很慢而且昂贵,因为我在这两台计算机之间不仅使用 ssh,还使用 ​​vnc、http 等。

这就是为什么我要使用 ISP1 来执行除 ssh 之外的任何操作,并使用 ISP2 来执行 ssh 操作。

是否可以?

答案1

你需要使用防火墙标记随着策略路由. 首先创建一个通过 ISP2 路由的新路由表:

echo 12 isp2 >> /etc/iproute2/rt_tables
ip route add default via 10.64.64.64 table isp2

(第一个命令只需要运行一次。)然后添加一个路由策略规则,以便将此新表用于具有特定防火墙标记的数据包:

ip rule add fwmark 2 lookup isp2

最后,使用 iptables 标记您想要特殊路由的数据包:

iptables -t mangle -A OUTPUT -p tcp --dport ssh -j MARK --set-mark 2

编辑:我不确定是否有更好的方法来做到这一点,但我需要通过端口路由源 NAT 数据包:

iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

相关内容