在现代网络架构中,CentOS 7 服务器常作为网关或边界设备,承担着连接内部私有网络与外部公共网络的重任,网络地址转换(NAT)映射技术在其中扮演了至关重要的角色,它允许外部用户通过访问服务器的公网IP及特定端口,进而穿透到内网的特定服务上,极大地增强了内网服务的可访问性与安全性,本文将详细介绍如何在 CentOS 7 系统上,使用其默认的 firewalld
防火墙工具来配置 NAT 端口映射。
核心概念与准备工作
在开始配置之前,我们需要理解两个核心概念:IP转发和防火墙区域。
- IP 转发:这是Linux内核的一项功能,它允许系统充当路由器,将从一个网络接口接收到的数据包转发到另一个网络接口,NAT功能依赖于IP转发,必须首先启用。
- FirewallD 区域:
firewalld
使用“区域”来管理信任级别和网络规则,典型的配置中,连接公网的网卡(如eth0
)会分配到external
或public
区域,而连接内网的网卡(如eth1
)则分配到internal
或trusted
区域,我们的NAT规则将主要在公网接口所在的区域(通常是external
)上配置。
准备工作包括确保您拥有一台至少有两块网卡的CentOS 7服务器,一块连接外网,拥有公网IP;另一块连接内网,并已配置好内网IP地址,您需要拥有 root
权限或 sudo
权限来执行命令。
使用 firewalld 实现 NAT 映射的详细步骤
我们将通过一个具体场景来演示:将外部访问服务器公网IP的 80
端口(HTTP)流量,映射到内网IP为 168.1.100
的服务器的 8080
端口。
步骤 1:开启内核 IP 转发
这是所有NAT操作的基础,临时开启IP转发以测试效果:
sysctl -w net.ipv4.ip_forward=1
为了确保服务器重启后设置依然生效,需要编辑 /etc/sysctl.conf
文件:
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf sysctl -p
执行 sysctl -p
会立即加载配置文件中的设置,无需重启。
步骤 2:配置 firewalld 防火墙规则
我们使用 firewalld
命令行工具 firewall-cmd
来创建NAT规则。
确认公网网卡(如 eth0
)所在的区域,假设它在 external
区域。
我们需要在该区域上启用“伪装”(Masquerade),这实际上是源地址转换(SNAT),它使得内网主机可以通过服务器的公网IP访问外网。
firewall-cmd --zone=external --add-masquerade --permanent
添加核心的端口转发规则,这条规则告诉 firewalld
:将进入 external
区域的、目标为TCP 80
端口的流量,转发到内网地址 168.1.100
的 8080
端口。
firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.100 --permanent
参数解析:
--zone=external
: 指定规则应用的区域。--add-forward-port
: 表示添加端口转发规则。port=80
: 外部访问的端口。proto=tcp
: 协议类型,可以是tcp
或udp
。toport=8080
: 目标内网服务器的端口。toaddr=192.168.1.100
: 目标内网服务器的IP地址。--permanent
: 使规则永久生效,否则重启后失效。
步骤 3:重载防火墙使规则生效
所有添加的带有 --permanent
标志的规则都需要重新加载防火墙服务才能生效。
firewall-cmd --reload
至此,NAT映射配置已全部完成,您可以从外部网络访问服务器的公网IP地址的80端口,请求将被顺利转发到内网的 168.1.100:8080
。
为了便于理解和记忆,下表小编总结了核心命令:
功能 | 命令示例 | 说明 |
---|---|---|
开启IP转发 | sysctl -w net.ipv4.ip_forward=1 | 临时生效,用于测试 |
永久开启IP转发 | echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf | 编辑配置文件,重启后依然有效 |
启用IP伪装 | firewall-cmd --zone=external --add-masquerade --permanent | 允许内网通过该服务器访问外网 |
添加端口映射 | firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.100 --permanent | 将外网流量转发到内网指定主机 |
重载防火墙 | firewall-cmd --reload | 应用所有已保存的永久规则 |
规则验证与故障排查
配置完成后,可以通过以下命令查看 external
区域的所有规则,确认我们的设置是否已成功添加:
firewall-cmd --list-all --zone=external
输出中应包含 masquerade: yes
和 forward-ports
相关的条目。
如果无法访问,请从以下几方面排查:
- IP转发是否开启:使用
sysctl net.ipv4.ip_forward
检查,输出应为net.ipv4.ip_forward = 1
。 - 防火墙区域:确认公网网卡确实在您配置规则的
external
区域。 - 内网服务器:确保内网
168.1.100
的服务正在8080
端口上监听,并且其自身的防火墙(如有)允许来自CentOS网关的流量访问。 - 网络连通性:从CentOS服务器本身
ping
内网IP和公网网关,确保基础网络无障碍。
相关问答 FAQs
问:NAT 映射和端口转发有什么区别?
答:这是一个常见的问题,端口转发是NAT(网络地址转换)技术的一种具体实现,NAT是一个更广泛的概念,它主要分为两种:源地址转换(SNAT)和目标地址转换(DNAT),我们常说的“IP伪装”就是SNAT的一种,它让多个内网主机共享一个公网IP去访问互联网,而“端口转发”或“端口映射”则是DNAT的典型应用,它修改数据包的目标IP地址和端口,将外部流量引导至内网特定主机,您可以将端口转发理解为NAT家族中用于实现外部访问内部服务的关键技术。
问:如何确认系统的 IP 转发功能是否已经成功开启?
答:确认IP转发功能是否开启非常简单,您只需要在终端中执行以下命令:sysctl net.ipv4.ip_forward
如果系统已经成功开启IP转发,命令的输出将会是:net.ipv4.ip_forward = 1
如果输出是 net.ipv4.ip_forward = 0
,则表示功能未开启,您需要按照本文“步骤1”中的方法进行配置,这个命令是进行网络故障排查时的首要检查点之一。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复