我的 ISP 为我提供了一个 187.xx224/29 子网。网关是 187.xx225 我有一台带有 6 个以太网端口的 Ubuntu 服务器。该服务器执行 NAT 路由并充当 Web 服务器。我的计划是拥有和eth1
拥有eth2
单独的 WAN IP:分别为 187.xx226 和 187.xx227。我希望 NAT 流量通过 187.xx226,而 Web 服务器和其他本地应用程序应在 187.xx227 上监听。但两者的网关将是相同的 187.xx225。eth0
,eth3
并eth4
面向 3 个不同的 NAT 网络。截至目前,NAT 工作正常,但来自 NAT 网络的流量和 Web 服务器流量仅通过转发eth1
。所以我的问题是如何设置路由和默认网关以便通过路由 Web 服务器流量eth2
。
编辑 1:我在 eth1 上进行大量流量整形,它充当 NAT 网络的上行链路。我不希望 Web 服务器受其影响。我的用户进行大量 bittorrent 下载,并且总是访问可疑网站。由于 IPeth1
与其关联的域,我发现它非常危险。我计划将域附加的 IP 移动到eth2
并为其提供匿名 IP eth1
(NAT 网络的 WAN 链接)。我正在寻找的解决方案是,如果 Web 服务器的请求通过eth2
,则回复应该从同一接口发出。
答案1
如前所述,您真正能够完成所要做的事情的唯一方法是使用策略路由 - 它允许您设置多个路由表。如果不“虚拟化”路由表,您将无法真正获得所需的结果,因为您实际上无法在同一路由表中的同一子网上拥有两个具有 IP 的 NIC。您一次只能在路由表中拥有一个活动的默认网关,并且它将始终尝试从其中指定的接口传出。
这将要求您的 Linux 内核支持策略路由。您还需要 iproute2 实用程序(可能包含在您的发行版中或通过包管理安装)。
以下是我找到的一些不错的参考资料:
- http://kindlund.wordpress.com/2007/11/19/configuring-multiple-default-routes-in-linux/
- http://linux-ip.net/html/routing-tables.html
- http://www.policyrouting.org/PolicyRoutingBook/ONLINE/CH05.web.html(有点重)
如何自动化所有启动操作取决于所使用的 Linux 发行版。
全面披露 - 我从我发布的第一个链接中摘录了大部分内容。我在虚拟机中对其进行了一些测试,它似乎可以工作,但您的情况可能会有所不同,特别是因为您已经在进行 NAT 和流量整形。
如果你有iproute2在您的系统上安装实用程序后,您就可以设置新的路由表了。在 /etc/iproute2/rt_tables 中,您可以添加类似于以下行的内容:
1 servers
这实际上创建了一个名为“服务器”的新路由表(至少在本例中是这样)。要设置路由表,您需要定义本地子网路由和默认路由。
ip route add 187.x.x.224/29 dev eth2 src 187.x.x.227 table servers
ip route add default via 187.x.x.225 dev eth2 table servers
它应该被设置,但你需要使用ip 规则命令:
ip rule add from 187.x.x.227/32 table servers
ip rule add to 187.x.x.227/32 table servers
完成所有这些操作后,你应该可以执行ip 规则显示并查看默认路由表规则上方的策略路由规则集。然后可以执行ip 规则刷新缓存以确保更改得到落实。
答案2
将 上的度量设置eth1
为高于 上的度量eth2
。您可以使用 来执行此操作ifconfig eth1 metric XX
。
目前还不清楚你这样做的目的是什么,所以请注意,这将使系统使用eth2
代替 eth1
针对所有传出流量。两个接口之间的负载平衡和链路聚合更为复杂。此外,据我所知,除非您的应用程序可以绑定到特定地址,否则您将无法控制给定应用程序对给定地址的响应级别。
答案3
我认为,要实现您想要的功能,您需要创建 2 个单独的路由表。一个路由表(用于 NAT 流量)指定最优先的接口作为 eth1 以到达网关;您可以使用策略路由将第二个路由表用于以 Web 服务器 IP 为源的流量。第二个路由表与第一个路由表相同,但具有一个度量标准,即优先使用 eth2 接口到达网关。