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

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

我有一个简单的配置。

思维导图展示一切事物的样子

所以我有一个结构:

  • 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在内网和外网都有接口,就可以进行端口转发了。

相关内容