首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Firewalld端口转发Proxmox使端口无法用于其他连接。

Firewalld端口转发Proxmox使端口无法用于其他连接。
EN

Server Fault用户
提问于 2021-10-14 13:37:25
回答 1查看 1.3K关注 0票数 0

我有一个由hetzner托管的服务器,它有一个公共ip地址,运行proxmox和一些VM。此ip地址配置在/etc/接口中,如下所示:

代码语言:javascript
运行
复制
auto enp35s0
iface enp35s0 inet static
    address {{my-public-ip}}/{{subnet}}
    gateway {{hetzner-gateway}}
    up route add -net {{hetzner-ip}} netmask 255.255.255.192 gw {{hetzner-gateway}} dev enp35s0

这个配置是由hetzner完成的。

因为我不想从hetzner那里获得额外的ip地址,所以我伪装成内部VM-Network的ip:

代码语言:javascript
运行
复制
auto vmbr0
iface vmbr0 inet static
    address 172.16.0.1/24
    bridge-ports none
    bridge-stp off
    bridge-fd 0

    post-up   echo 1 > /proc/sys/net/ipv4/ip_forward
    post-up   iptables -t nat -A POSTROUTING -s '172.16.0.0/24' -o enp35s0 -j MASQUERADE
    post-down iptables -t nat -D POSTROUTING -s '172.16.0.0/24' -o enp35s0 -j MASQUERADE

有了这个,我的虚拟机就可以上网,并且可以互相联系。

因为iptables端口转发对我来说有点复杂,所以我已经开始使用firewalld了。在这里,我将我的enp35s0接口分配给外部区域,vmbr0分配给受信任的。我知道,也许我应该把它分配给内部,但目前它并没有真正的改变(或者我认为在我的问题案例中是这样的)。

我现在有一个在VM中运行的服务,ip 172.16.0.3位于端口38080。为了达到这个服务,我在firewalld中添加了一个端口转发规则:port=38080:proto=tcp:toport=38080:toaddr=172.16.0.3。这样,我就可以从这台服务器机器之外获得该服务。现在的问题是,如果我使用像uptime-kuma这样的软件并在同一台物理机器上的VM中运行它,我就无法在端口38080上到达该服务,因为端口转发只针对外部请求。这里重要的是,uptime使用的主机名是FQDN,它被解析为我的主机的公共ip地址。因此,为了实现这一点,我向firewalld的可信区域添加了相同的端口转发规则,因为我的vmbr0接口就在那里,从该接口得到了请求。现在,这种连接确实起作用了,我的软件(正常运行时间-库马)可以到达我的服务。

现在最大的问题是,每个来自虚拟网络内部的请求--它想要使用端口38080 --都被重定向到那个VM (172.16.0.3),甚至那些到一个完全不同的服务器上的请求。

如果请求实际上是针对主机的,我如何告诉firewalld只重定向该通信量?

EN

回答 1

Server Fault用户

回答已采纳

发布于 2021-10-20 12:11:15

因此,我无法真正找到解决firewalld行为的方法,但我发现了其他一些东西,使得在受信任区域中的端口转发规则变得不必要。通过将解析到主机的公共IP的FQDN添加到VM内的/etc/ host文件中,我不再需要转发端口,因为它会立即再次连接到自己(这是我最初想要的)。通过使用该端口,不再需要在受信任区域内进行转发规则,我可以再次使用这些端口处理外部请求。

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1080546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档