Centos 7 端口转发与firewalld 不工作

Centos 7 端口转发与firewalld 不工作

我似乎无法在 Centos 7 下进行基于防火墙的端口转发。我将 192.168.0.148:905 转发到 192.168.56.102:22。当我尝试 ssh 到 192.168.0.148 -p 905 时,我收到“连接被拒绝”。

以下是一些相关设置:

[root@GraceDev3 log]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: br0
  sources:
  services: ssh dhcpv6-client https
  ports: 3389/tcp 905/tcp 908/tcp
  protocols:
  masquerade: yes
  forward-ports: port=905:proto=tcp:toport=22:toaddr=192.168.56.102
        port=908:proto=tcp:toport=22:toaddr=192.168.56.105
  source-ports:
  icmp-blocks:
  rich rules:

转发端口:

[root@GraceDev3 log]# cat /proc/sys/net/ipv4/ip_forward
1

192.168.0.148 端口 22 上的 tcpdump 显示 ssh 请求到达。 Firewalld 日志未显示任何数据包被丢弃。我缺少什么?我注意到其他人也遇到了同样的问题,但我还没有找到任何解决方案。

答案1

或许是下列的是一个解释:

“NetworkManager 通知firewalld 接口的区域。您可以使用NetworkManager、firewall-config 工具或firewall-cmd 命令行工具将区域分配给接口。后两者仅编辑相应的NetworkManager 配置文件。如果您使用firewall-cmd或firewall-config更改接口的区域,请求将转发到NetworkManager并且不会由⁠firewalld处理。”

我尝试转发的机器是虚拟机管理程序,并且我已禁用 NetworkManager。这似乎会扰乱区域配置。将尝试解决该问题并进行报告。 (或者切换到 iptables,我想我明白了!)

PS:我无法证明上述是问题的根源,尽管它看起来确实有可能。切换到 iptables 确实允许端口转发工作。就我而言,我在目标计算机上也有直接的互联网连接(不允许端口 22 入站)。这意味着返回数据包在返回过程中从未更正其 NAT。这对我来说太复杂了,所以我改用 ssh 而不是 netfilter 进行转发,效果非常好!

相关内容