在主机操作系统上将端口从一个桥接接口转发到访客容器

我有一个简单的configuration。

心智地图如何看起来像一切

所以我有一个结构:

  • Proxmox主机操作系统(vmbr0,vmbr1)
    • 容器1(eth0)
    • 容器2(eth0)

Proxmoxnetworking

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 

容器1networking:

 eth0 Link encap: Ethernet inet addr: 136.211.123.180 Bcast: 136.211.123.180 Mask: 255.255.255.255 

容器2networking:

 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主机的那一刻,他们会通过iptables将这个请求转发给容器。 但容器1有一个静态IP地址分配,因为通常所有的端口应该去这个服务器。 – 除了我要转发到另一个容器的less数几个。

那么如何将请求转发到容器1的另一个静态IP地址到容器2呢?

容器2是TS³容器。 容器1是“静态IP地址”容器。 而proxmox主机也有一个自己的IP地址,目前用于所有这些请求。

感谢提前任何想法。

我只需在主机操作系统vmbr0接口上设置公共.180地址,然后在主机操作系统上进行端口转发。

我看不到在这里有单独的虚拟机的点。 如果你真的想要一个单独的虚拟机来增加复杂性,那么你可以试试这个。

您的容器1的networking设置很奇怪,您不能从该容器访问136.211.123.128/255.255.255.192networking中的任何其他主机。 您应该使用与主机操作系统中使用的相同的networking掩码和广播地址。

对于实际的转发,您需要将第二个接口添加到容器1,将其桥接到vmbr1 。 然后,您可以在容器1中创build一个端口转发规则:

 iptables -t nat -A PRETROUTING -i eth0 -p udp -m udp --dport 9987 -j DNAT --to-destination 192.168.1.1:9987 

因此,容器1在外部和内部networking都有一个接口,然后它可以使端口向前。