在Linux上select应用程序级别的网关

我想决定应用程序级别使用哪个网关连接到互联网。

它不能通过简单的子网规则来完成,因为它确实是应该能够决定使用哪个网关的应用程序。

例如,我想使用curl下载一些东西,我想指定某种方式使用哪个网关。

它是一个只有一个网卡的Linux机箱,IP地址为10.0.0.1。 有两个或两个以上的网关(不同的ISP):例如10.0.0.100和10.0.0.101。

是否有可能设置路由规则iptables和iproute2来pipe理? 如何告诉应用程序使用哪条路线?

我试过这个:
我在/ etc / iproute2 / rt_tables中添加了:100 out2
ip规则从10.0.0.2查找out2添加prio 200
ip route add 10.0.0.0/24 dev eth0 src 10.0.0.2 table out2
ip route add default 10.0.0.100 dev eth0 src 10.0.0.2 table out2
仍然“telnet -b 10.0.0.2 www.google.com 80”返回“networking不可达”

我可以想办法做到这一点,如下所示。

  1. 在你的网卡上定义两个IP地址,例如10.0.0.1&10.0.0.2。 这应该是简单而直接的。 这可以使用ifconfig来完成。
  2. configuration基于源的路由,使每个源IP路由到其中一个默认网关。 这个链接可以帮助你。
  3. 最后,您可以告诉您的应用程序使用bind地址10.0.0.1或10.0.0.2中的一个。 这样,您可以select其中一个网关,具体取决于所选的源IP。 要testing这个,你可以使用telnet-b source_ip选项。

以下是我以前用来启用基于源路由的命令:

 $ sudo ip rule add from 10.0.0.2 tab 1 priority 500 $ sudo ip route add default via 10.0.0.101 dev eth0 tab 1 $ sudo ip route flush cache 

如果你的默认网关设置为10.0.0.100,那么这应该适合你。 从10.0.0.1发送的数据包应发送到默认网关,10.0.0.2发送的数据包应按照上面的指示发送到第二个网关10.0.0.101。

另外一个select。 很多CLI utilitise使用环境variables来做这种types的configuration,http_proxy可能与你的情况有关, http: //www.cyberciti.biz/faq/linux-unix-set-proxy-environment-variable/