通过特定的接口路由应用程序stream

第一个问题在这里,所以请容易:

我有一个debian Linux 5.0服务器与两个公共接口。 我想通过一个接口从应用程序的一个实例路由出站stream量,通过第二个接口路由第二个实例的出站stream量。 有一些挑战:

  • 应用程序的两个实例都使用相同的协议
  • 应用程序的两个实例都可以访问整个互联网(不能基于destnetworking路由)
  • 我无法更改应用程序的代码
  • 我不认为一种典型的负载均衡所有stream量的方法是行之有效的,因为在出​​站stream量中访问的目标服务器相对较less,所有的stream量确实需要在这些相对较less的服务器上相当均匀地分配。

我可以运行两个虚拟化的服务器,并绑定到不同的接口,但我正在寻找一个更简单的解决scheme,也许使用iproute或iptables

任何想法对我? 在此先感谢 – 我很乐意回答任何问题。

你看过iptables中的owner模块,可能与源NAT规则结合?

这使您可以根据UID,GID,PID,SID和命令名称设置OUTPUT链规则。

我相信最好的select是将每个应用程序绑定到不同的IP,并使用基于源的路由来更改来自该源IP的接口数据包。

一般的想法是你可以创build多个并行路由表('ip route'有一个可选的'表'参数)。 然后,你添加一条规则,说:“如果它来自IP [xxxx],然后使用表[foo]”。

所以:

  • 在/ etc / iproute2 / rt_tables中创build路由表[foo1,foo2]
  • 填充路由表(类似于“ip route add default gateway 1.2.3.4 dev eth0 table foo1”,对于foo2也是如此)
  • 根据源IP创build规则说哪个表使用 – “ip规则从1.2.3.2/32表foo1添加”,“ip规则从1.2.3.3/32表添加foo2”。

我没有具体的testing这些例子,但是我以前用过类似的方法。

在linux中支持将应用程序绑定到特定的IP(例如由Apache使用)。 如果你的应用程序不支持这个,你是不幸的。

我不知道任何Linux内核模块(因为这是你所需要的),即使它试图绑定到一个接口,将特定的应用程序绑定到接口。 使用虚拟机是一种可能性。

以太网接口绑定( http://www.cyberciti.biz/howto/question/static/linux-ethernet-bonding-driver-howto.php )是我可以根据您的要求提出的最接近的东西, 。 但是,那么你只能在同一个ip的多个接口上运行应用程序的一个实例。