我目前正在尝试将我的服务器设置为基于容器,以限制所有程序的 RAM 和 CPU 使用率。我的问题是,我想让不同容器中的所有应用程序在不同端口上监听相同的 IP,但保持灵活性,并让其他容器具有特殊 IP,并对这些 IP 拥有完全访问权限。其他 IP 位于 eth0 的别名上(eth0:0、eth0:1 等)。
+----+ +----+ +----+
|IP 1| |IP 1| |IP 2| IP
|WEB | | TS | |GAME| Application
| 80 | |9987| |ALL | Port(s)
+----+ +----+ +----+
| | |
+-----+------+
|
+------+
|SERVER|
+--+---+
|
+---+----+
|Internet|
+--------+
我搜索了很多,但没能找到任何对我有帮助的东西。很抱歉,这是重复的,我就是找不到任何东西……可能是因为我搜索了错误的关键词,或者因为这是不可能的……无论如何,谢谢你的阅读!
答案1
您正在寻找的技术称为目标 NAT。在 Linux 系统上,可以借助 iptables 来实现。
由于您的问题没有提供您计划使用的容器技术的任何详细信息,因此这取决于这些技术如何连接到本地网络和主机系统本身 - 通常使用桥接接口和容器的虚拟网络接口。
在这种情况下,您可以看看这里: http://www.netfilter.org/documentation/HOWTO/NAT-HOWTO-6.html#ss6.2
将目标地址更改为 5.6.7.8
iptables -t nat -A PREROUTING -i eth0 -j DNAT --to 5.6.7.8
将目标地址更改为 5.6.7.8、5.6.7.9 或 5.6.7.10
iptables -t nat -A PREROUTING -i eth0 -j DNAT --到 5.6.7.8-5.6.7.10
将 Web 流量的目标地址更改为 5.6.7.8,端口 8080
iptables -t nat -A PREROUTING -p tcp --dport 80 -i eth0 -j DNAT --to 5.6.7.8:8080
然后,您可以在主机服务器上设置一些 iptables DNAT 规则,这些规则会将某些端口或某些 IP 地址上的传入数据包重写为桥接虚拟网络上的目标。
但是,您还必须设置一些源 NAT 规则,以便来自这些容器的流量也更改为与这些容器应该具有的外部世界的 IP 地址相匹配。