我有一个简单的配置。
所以我有一个结构:
- Proxmox 主机操作系统(vmbr0、vmbr1)
- 容器 1(eth0)
- 容器 2(eth0)
Proxmox 网络:
vmbr0
Link encap: Ethernet
inet addr: 136.136.136.161
Bcast: 136.136.136.191
Mask: 255.255.255.192
vmbr1
Link encap: Ethernet
inet addr: 192.168.1.254
Bcast: 136.136.1.255
Mask: 255.255.255.0
容器1网络:
eth0
Link encap: Ethernet
inet addr: 136.211.123.180
Bcast: 136.211.123.180
Mask: 255.255.255.255
容器2网络:
eth0
Link encap: Ethernet
inet addr: 192.168.1.1
Bcast: 192.168.1.255
Mask: 255.255.255.0
proxmox 的正常 iptables 如下所示。(TeamSpeak³ 示例转发 udp 端口 9987)
~# iptables -L -t nat
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT udp -- anywhere anywhere udp dpt:9987 to:192.168.1.1:9987
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 192.168.1.0/24 anywhere
这是通过以下方式添加的:
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o vmbr0 -j MASQUERADE
iptables -t nat -A PREROUTING -i vmbr0 -p udp -m udp --dport 9987 -j DNAT --to-destination 192.168.1.1:9987
现在的问题是如何从容器 1 转发到容器 2?
目前,请求会发送到 Proxmox Host,然后它们会通过 iptables 将这些请求转发到容器。但是容器 1 分配了一个静态 IP 地址,因为通常所有端口都应该转到此服务器。- 除了一些我想转发到另一个容器的端口。
那么如何将对容器1的另一个静态IP地址的请求转发到容器2呢?
容器 2 是 TS³ 容器。容器 1 是“静态 IP 地址”容器。proxmox 主机也有一个自己的 IP 地址,目前用于所有这些请求。
提前感谢您的任何想法。
答案1
我只需在主机操作系统 vmbr0 接口上设置公共 .180 地址,然后在主机操作系统上进行端口转发。
我看不出在这里使用单独的虚拟机有什么意义。如果您确实想使用单独的虚拟机来增加复杂性,那么您可以尝试一下。
您的容器 1 网络设置很奇怪,您无法136.211.123.128/255.255.255.192
从该容器访问网络中的任何其他主机。您应该使用与主机操作系统相同的网络掩码和广播地址。
对于实际的转发,你需要为容器 1 添加第二个接口,该接口桥接到vmbr1
。然后你可以在容器 1 中制定端口转发规则:
iptables -t nat -A PRETROUTING -i eth0 -p udp -m udp --dport 9987 -j DNAT --to-destination 192.168.1.1:9987
这样,容器1在内网和外网都有接口,就可以进行端口转发了。