我可以配置 iptables 根据目标 IP 选择网络接口来连接互联网吗?

我可以配置 iptables 根据目标 IP 选择网络接口来连接互联网吗?

现在,我的 ubuntu 中安装了两块网卡。一块连接到局域网 (NIC 1),另一块连接到互联网 (NIC2)。我们已配置 iptables 以将所有传入连接转发到 NIC1 到 NIC2。我们想设置另一块 NIC(例如 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/解决了我的问题。

答案1

你正在寻找的可能是成立在Linux高级路由和流量控制文档中。虽然不太容易理解。

答案2

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

无法提供详细设置,我在 OpenBSD 上做路由器已有多年。Linux 执行该任务太复杂,并且随着条目数量的增加,性能会迅速下降iptables

答案3

是否可以将来自 NIC1 的所有传入连接(例如 www.google.com)仅引导至 NIC3,而将其他连接(例如 www.a.com、www.b.com、www.c.com)引导至 NIC2?

答案是,有点,但这不是个好主意。Iptables 位于第 3 层/第 4 层,因此实际上并不是为处理 DNS 名称而设计的。如果我没记错的话,如果您使用 DNS 名称而不是 IP 地址或网络块指定重定向或转发规则,iptables 将接受该信息并尽职尽责地尝试正确解析这些名称。

这种方法存在一些问题:

  • 这是个安全问题。主机可以通过操纵 DNS 来操纵防火墙处理流量的方式。这比你想象的要容易。你引入了不必要的复杂性。不必要的复杂性最终会给你带来麻烦。
  • iptables 需要在某个时候进行 DNS 查找,以确定这些域名解析到哪个 IP。我不确定 iptables 何时进行 DNS 查找,但如果是在加载时进行,那么您可以预期 IP 地址会随着时间的推移而过时,尤其是对于像 google 这样的大域名。此外,iptables 将在启动顺序中在名称服务之前加载,我不确定这会如何影响事情。如果它是即时的,您将增加相当多的开销,因为每个数据包都需要进行 DNS 查找。

你真正需要的是熟悉第 7 层协议(即 HTTP)的负载平衡解决方案。我认为乌贼可能可以配置为执行此操作 - 至少这是一个很好的起点。

编辑:看起来 Squid 不会做你想做的事(它对 HTTP 进行反向代理负载平衡)。我不确定你为什么要进行第 7 层感知出站负载平衡 - 你实际上试图解决什么问题?

相关内容