Centos7下通过firewall-cmd设置端口转发

本文介绍如何在Centos7中使用firewall-cmd命令进行端口转发,包括开启伪装IP、开放端口、设置端口转发及配置生效等步骤,实现局域网设备透明访问互联网服务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

局域网的设备由于安全原因,不能直接进行互联网连接。但又有第三方的互联网服务需要使用,为此只能通过一台前置机,将本地请求转发到外网服务器上。这种端口转发对局域网内的设备来说是透明的,既不影响设备网络环境,也能正常访问外部服务。Centos7自带的防火墙,firewall-cmd命令就可以直接设置端口转发。

伪装IP

为开启端口转发,需要开启伪装IP这个功能。

$ firewall-cmd --query-masquerade # 检查是否允许伪装IP
$ firewall-cmd --add-masquerade # 允许防火墙伪装IP
# 如果不需要这个功能,可以执行以下命令关闭
$ firewall-cmd --remove-masquerade# 禁止防火墙伪装IP

开放端口

开放要监听的端口(TCP),如18080:

firewall-cmd --permanent --add-port=18080/tcp

--permanent选项表明该规则永久生效。

设置端口转发

如将18080端口的流量转发至192.168.1.100的80端口:

firewall-cmd --permanent --add-forward-port=port=18080:proto=tcp:toaddr=192.168.1.100:toport=80

这里可以根据需要,将本机的端口转发到外网某个IP和端口,实现局域网访问外网服务。端口转发还可以做流量分发,通过防火墙将不同端口的流量转发至不同机器。
注意:这里不支持转发到域名,toaddr仅支持目的地为IP地址!如果要转发到域名,可通过nginx实现。

配置生效

$ firewall-cmd --reload // 重新加载防火墙,使端口转发生效

查看配置

$ firewall-cmd --list-all

配置成功后,就可以通过访问前置机的端口18080,间接访问到192.168.1.100这台主机在80端口上的服务了!

<think>我们正在配置firewalld的端口转发。根据引用,配置端口转发需要几个步骤: 1. 启用masquerade(IP伪装),这是NAT转发的必要条件。 2. 添加端口转发规则,将指定端口的流量转发到目标地址和端口。 3. 重新加载防火墙以使配置生效。 具体步骤如下: 步骤1:启用masquerade(永久生效) ```bash firewall-cmd --add-masquerade --permanent ``` 步骤2:添加端口转发规则(例如,将本机的8001端口转发到192.168.1.100的80端口) ```bash firewall-cmd --add-forward-port=port=8001:proto=tcp:toaddr=192.168.1.100:toport=80 --permanent ``` 注意:这里假设协议为tcp,如果需要udp,则替换proto为udp。 步骤3:重新加载防火墙 ```bash firewall-cmd --reload ``` 步骤4:验证配置 可以使用以下命令查看所有配置: ```bash firewall-cmd --list-all ``` 在输出中,应该可以看到forward-ports部分有我们添加的规则。 另外,引用[3]提到,firewall-cmd不支持转发到域名,只支持IP地址。如果需要转发到域名,可以考虑使用nginx等工具。 引用[4]提到了`firewall-cmd --list-all`的输出含义,其中“target”表示默认目标,但我们在端口转发中更关注的是forward-ports部分。 注意:以上操作需要root权限。 如果后续需要删除端口转发,可以使用: ```bash firewall-cmd --remove-forward-port=port=8001:proto=tcp:toaddr=192.168.1.100:toport=80 --permanent firewall-cmd --reload ``` 总结:配置端口转发的关键是启用masquerade和添加forward-port规则,然后重新加载防火墙。 生成相关问题: 1. 如何验证firewalld端口转发是否生效? 2. 除了firewalld,还有哪些工具可以实现端口转发? 3. 如何配置永久生效的firewalld规则? 4. 防火墙的masquerade功能有什么作用? 5. 如何查看firewalld当前所有的转发规则?</think>### 配置 firewalld 端口转发方法 在 CentOS/RHEL 7+ 系统中,使用 `firewall-cmd` 配置端口转发的完整步骤如下: #### 📌 核心步骤 1. **启用 IP 伪装**(NAT 必备) ```bash firewall-cmd --add-masquerade --permanent # 启用永久伪装[^1] ``` 2. **添加端口转发规则** ```bash # 格式:firewall-cmd --add-forward-port=port=<源端口>:proto=<协议>:toaddr=<目标IP>:toport=<目标端口> --permanent firewall-cmd --add-forward-port=port=8080:proto=tcp:toaddr=192.168.1.100:toport=80 --permanent # 例:8080→192.168.1.100:80[^2] ``` 3. **重载防火墙生效配置** ```bash firewall-cmd --reload # 应用配置[^1][^3] ``` #### 🔍 验证配置 ```bash firewall-cmd --list-all # 查看全部规则[^4] # 输出应包含: # masquerade: yes # forward-ports: port=8080:proto=tcp:toport=80:toaddr=192.168.1.100 ``` #### ⚠️ 注意事项 1. **仅支持 IP 地址** `toaddr` 参数不支持域名,必须使用目标服务器的 IP 地址[^3] 2. **协议选择** 明确指定协议(`tcp/udp`),例如 `proto=tcp` 3. **永久生效** 所有修改必须添加 `--permanent` 参数,否则重启失效 4. **多规则管理** ```bash # 删除转发规则 firewall-cmd --remove-forward-port=port=8080:proto=tcp:toaddr=192.168.1.100:toport=80 --permanent ``` #### 💡 典型应用场景 - 将公网端口映射到内网服务器(如 `80→内网Web服务器`) - 实现流量分发(不同端口转发到不同后端服务器)[^3] - 替代传统 iptables NAT 规则 > **关键点**:转发前需确认 `firewalld` 服务已启用:`systemctl status firewalld`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值