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

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

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

这无法通过简单的子网规则来完成,因为实际上应用程序应该能够决定使用哪个网关。

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

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

是否可以使用 iptables 和 iproute2 设置路由规则来管理它?如何告诉应用程序使用哪条路由?

我尝试过这个:
我在 /etc/iproute2/rt_tables 中添加:100 out2
ip rule add prio 200 from 10.0.0.2 lookup out2
ip route add 10.0.0.0/24 dev eth0 src 10.0.0.2 table out2
ip route add default via 10.0.0.100 dev eth0 src 10.0.0.2 table out2
仍然“telnet -b 10.0.0.2 www.google.com 80”返回“网络不可达”

答案1

我能想到一种方法来做到这一点,如下所示。

  1. 在您的 NIC 上定义两个 IP 地址,如 10.0.0.1 和 10.0.0.2。这应该很简单直接。可以使用 来完成ifconfig
  2. 配置基于源的路由,以便每个源 IP 都被路由到其中一个默认网关。此链接可以帮你。
  3. 最后,您可以告诉应用程序使用bind地址 10.0.0.1 或 10.0.0.2 之一。这样,您可以根据所选的源 IP 选择其中一个网关。要测试这一点,您可以使用telnetwith-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,如上所述。

答案2

另一种选择。许多 CLI 实用程序使用环境变量来进行此类配置,http_proxy 可能与您的情况相关, http://www.cyberciti.biz/faq/linux-unix-set-proxy-environment-variable/

相关内容