我有两个网关,分别属于不同的 ISP,其中一个被定义为 LAN 用户的默认网关,另一个被定义为服务器和 VPN 流量的默认网关。这是使用 DHCP 配置的常规路由表完成的。
现在,我希望安装在 LAN 用户笔记本电脑上的 Google Drive 和其他一些软件流量(这些用户笔记本电脑使用大量上传流量)始终使用未定义为其默认网关的其他 ISP。我该如何实现这一点?
我最初的想法是使用 IPTABLES 或 squid。
我一直在尝试
iptables -t nat -A PREROUTING -d GOOGLE_IP -j DNAT --to-destination MY_SECOND_ISP
iptables -t nat -A POSTROUTING -s MY_SECOND_ISP -j SNAT --to-source GOOGLE_IP
iptables -t nat -A POSTROUTING -s MY_SECOND_ISP -j MASQUERADE
但它不起作用。当我测试它时,流量转到默认网关
知道如何使用 iptables、shorewall 或 squid 来做到这一点吗?
答案1
假设 LAN 默认网关 (GW1) LAN IP 为 192.168.1.1 且服务器默认网关 (GW2) LAN IP 为 192.168.1.2,即 LAN 看到同一网段上的两个路由器。
您可以在 GW1 上配置静态路由,将目的地为 GOOGLE_IP 的流量指向下一跳 GW2 LAN IP 地址。
如果 GW1 是思科:ip route GOOGLE_IP 255.255.255.255 GW2_LAN_IP
如果 GW1 是 Linux:ip route add GOOGLE_IP/32 gw GW2_LAN_IP
这样,当局域网内任意一台主机向GOOGLE_IP发送流量时,流量都会流向GW1。
然后 GW1 上的静态路由会将流量转发到 GW2。
然后,GW2 会将流量从其 WAN 接口转发出去。
从互联网到 GW2 的返回流量将被转发到 LAN,并到达主机。
这样,您只需在 GW1 上创建一次路由,它就可以适用于所有 LAN 主机。
答案2
由于像 Google Drive 这样的服务都在云端,而且它们的 IP 可能随时发生变化,我相信您的方法迟早会停止工作。
还有另一种方法可以通过在客户操作系统级别进行 DSCP 标记来区分您想要的应用程序的流量。
DSCP 标记将“附加”在数据包本身上,这样您就可以将这些数据包与路由器上的 iptables 匹配,并通过 VPN 或您喜欢的任何其他网关对其进行路由。
这样,您就说例如 googledrive.exe(或任何您想要的应用程序)无论尝试连接到哪里,都将始终通过 VPN 进行路由。
以下是有关如何使用 Windows 设置自定义 DSCP 标记的一些说明 https://support.timso.com/index.php?/Knowledgebase/Article/View/24/3/windows-7-and-implementing-qos
您可以使用 iptables 的 --dscp match 选项来匹配 dscp 标记。
http://www.iptables.info/en/iptables-matches.html#DSCPMATCH
当然,以上所有方法都不能回答您的原始问题。您仍然需要使策略路由正常工作。