使用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 

其次我的电脑在另一个networking上的家里有公共IP,但不总是。 他的configuration非常一致,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。

可能吗?

您需要使用防火墙标记以及策略路由 。 首先创build一个通过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