我可以configurationiptables根据目标IPselect一个networking接口来连接互联网吗?

现在,在我的Ubuntu有两个网卡安装。 一个连接到局域网(NIC 1),另一个连接到互联网(NIC2)。 我们已经configurationiptables将所有传入的连接转发到NIC1到NIC2。 我们想设置另一个网卡(比如NIC3),它将通过另一个单独的宽带连接连接到互联网。

是否有可能将所有来自NIC1的传入连接(例如www.google.com)仅指向NIC3,而其他人则将www.a.com,www.b.com,www.c.com指向NIC2?

我可以通过只更改iptables或我应该寻找其他选项吗?


这http://www.cyberciti.biz/faq/linux-route-add/解决了我的问题。

您可以在“Linux高级路由和stream量控制”文档中find您要查找的内容。 尽pipe这并不容易理解。

它可以通过iproute2而不是iptablesiptables来pipe理,仅用于标记数据包。 通过Linux高级路由和stream量控制 ,特别是多个路由表。 为每个路由案例创build单独的路由表,从而创build出接口。 然后添加规则将数据包指向特定的路由表。 规则可以基于iptables包标记创build。

无法提供详细设置,我在OpenBSD上做了多年的路由器。 在这个任务上,Linux太复杂了,随着iptables数量的不断增加,性能迅速iptables

是否有可能将所有来自NIC1的传入连接(例如www.google.com)仅指向NIC3,而其他人则将www.a.com,www.b.com,www.c.com指向NIC2?

答案是有点,但这是一个坏主意。 Iptables生活在Layer-3 / Layer-4,因此并不是真正用于处理DNS名称的。 如果我正确地记得,如果您指定使用DNS名称而不是IP地址或networking块的redirect或转发规则,iptables将接受该信息并尽力合理地parsing这些名称。

这种方法有几个问题:

  • 这是一个安全问题。 主机可以通过操纵DNS来操纵防火墙如何处理stream量。 这比您想象的要容易得多。 你引入的复杂性是不需要的。 复杂性是不必要的,最终会咬你。
  • iptables将需要在某个时候进行DNS查询,以确定这些域名的parsing成哪些IP。 我不确定iptables是在什么时候进行DNS查询,但是如果是在加载时间,那么您可以预期IP地址随着时间的推移会变陈旧,特别是对于像google这样的大型域名。 此外,iptables将在启动顺序中的名称服务之前加载,我不知道这将如何影响的事情。 如果它是即时的,则会增加相当多的开销,因为每个数据包都需要DNS查找。

你真正需要的是一种在七层协议中熟悉的负载均衡解决scheme,即HTTP。 我认为Squid可能会被configuration为这样做 – 至less它是一个开始的好地方。

编辑:看起来不像鱿鱼会做你想做的(它确实反向HTTP代理负载平衡)。 我不知道为什么你要第7层意识到出站负载平衡 – 你究竟在试图解决什么问题?