我似乎无法在 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 进行转发,效果非常好!