在网络世界中,网络地址转换(NAT)是一项基础且至关重要的技术,它允许多台设备共享一个公网IP地址访问互联网,从而有效节约了日益枯竭的IPv4地址资源,并为内部网络提供了一层天然的安全屏障,对于许多仍在使用稳定可靠的CentOS 6.5系统的服务器或网关设备来说,配置NAT是一项常见且实用的任务,本文将详细介绍如何在CentOS 6.5系统上,利用其内置的iptables防火墙工具,一步步搭建一个功能完善的NAT服务器。

理解NAT的基本原理
在深入配置之前,我们首先需要理解NAT的工作机制,想象一个场景:您的内部局域网(网段为192.168.1.0/24)中有多台计算机,它们都使用私有IP地址,这些地址无法直接在互联网上路由,当其中一台主机(如192.168.1.100)想要访问外部网站(如Google)时,数据包会首先发送到充当网关的CentOS服务器,NAT服务器接收到这个数据包后,会执行以下关键操作:
- 替换源地址:它会将数据包的源IP地址(192.168.1.100)替换为服务器自身的公网IP地址。
- 记录转换信息:在自己的NAT转换表中记录下这个映射关系(内部IP:端口 -> 公网IP:新端口)。
- 转发数据包:将修改后的数据包发送到互联网。
当Google的服务器响应请求时,数据包的目标地址是CentOS服务器的公网IP,服务器收到后,会查询其NAT转换表,找到对应的内部主机,然后将目标IP地址替换回原来的192.168.1.100,最后将数据包转发给内网主机,整个过程对内网用户是透明的。
环境准备与前提条件
要成功配置CentOS 6.5 NAT,您需要确保以下条件已经满足:
- 一台安装了CentOS 6.5的计算机:这将作为我们的NAT网关服务器。
- 两块网卡(NIC):
- 一块连接到外网(
eth0),配置有公网IP地址、子网掩码、网关和DNS。 - 另一块连接到内网(
eth1),配置一个私有IP地址,作为内网主机的网关。
- 一块连接到外网(
- Root权限:所有的配置都需要管理员权限。
- 内网客户端:至少一台用于测试NAT功能的内网计算机,其网关和DNS应指向CentOS服务器的内网IP。
假设我们的网络环境如下:
: 公网IP为 45.67.89: 私有IP为 168.1.1- 内网网段:
168.1.0/24
核心配置步骤
配置过程主要分为四个核心步骤:开启内核IP转发、设置iptables的NAT规则、配置数据包转发规则以及保存配置。
第一步:开启IP转发功能
Linux内核本身支持IP转发,但默认是关闭的,我们必须手动启用它,让系统具备在不同网络接口间转发数据包的能力。
临时开启:执行以下命令可以立即生效,但重启后会失效。
echo 1 > /proc/sys/net/ipv4/ip_forward
永久开启:为了确保系统重启后配置依然有效,需要修改
/etc/sysctl.conf文件,使用vi或nano编辑器打开该文件,找到或添加以下行:net.ipv4.ip_forward = 1保存并退出后,执行
sysctl -p命令使配置立即生效。
第二步:配置iptables NAT规则
iptables是CentOS 6.5默认的防火墙工具,其强大的NAT功能主要通过nat表来实现,我们需要在POSTROUTING链中添加规则,对所有从内网接口(eth1)进入、并从外网接口(eth0)发出的数据包进行源地址转换。
这里我们使用MASQUERADE(伪装)目标,它特别适用于外网IP地址是动态获取(如拨号上网)的场景,如果您的公网IP是固定的,使用SNAT目标效率会稍高一些。
执行以下命令:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
命令解析:
-t nat: 指定操作nat表。-A POSTROUTING: 将规则追加到POSTROUTING链的末尾,这个链用于对即将离开本机的数据包进行修改。-o eth0: 指定规则仅对从eth0接口出去的数据包生效。-j MASQUERADE: 指定规则的动作(跳转目标)为MASQUERADE,即动态源地址转换。
第三步:配置FORWARD链规则
仅仅配置NAT规则是不够的,因为iptables的filter表默认会阻止转发的数据包,我们必须在FORWARD链中明确允许数据包在内网和外网之间通行。
我们需要添加两条规则:一条允许从内网到外网的新连接,另一条允许与已建立连接相关的返回流量。
# 允许从内网(eth1)到外网(eth0)的转发 iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT # 允许从外网返回的、与已建立连接相关的数据包转发到内网 iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
命令解析:
-A FORWARD: 在FORWARD链中追加规则。-i eth1 -o eth0: 匹配从eth1进入、从eth0出去的数据包。-m state --state RELATED,ESTABLISHED: 使用状态检测模块,匹配状态为RELATED(相关)或ESTABLISHED(已建立)的数据包,这是保证返回流量能正确进入内网的关键,极大地增强了安全性。
第四步:保存iptables配置
所有iptables命令都是在内存中临时生效的,一旦服务器重启,所有规则都会丢失,CentOS 6.5提供了一个便捷的服务来保存规则。
service iptables save
执行此命令后,当前的iptables规则集会被保存到/etc/sysconfig/iptables文件中,系统下次启动时,iptables服务会自动加载此文件中的规则。

为了确保服务开机自启,可以执行:
chkconfig iptables on
配置验证与排错
配置完成后,我们需要进行验证,在内网客户端上(确保其网关和DNS已设置为168.1.1):
- Ping外网IP:
ping 8.8.8.8,如果能够通,说明基本的网络连通性和转发没有问题。 - 解析域名:
ping www.baidu.com,如果能够通,说明DNS配置也正确。 - 查看出口IP:
curl ifconfig.me或访问一些显示IP的网站,如果显示的是您服务器的公网IP45.67.89,那么恭喜您,NAT配置完全成功!
如果遇到问题,可以按以下思路排查:
- 在CentOS服务器上检查
iptables -L -n -v,确认规则是否正确加载且匹配计数器在增长。 - 检查IP转发是否开启:
cat /proc/sys/net/ipv4/ip_forward,输出应为1。 - 检查内外网网卡IP配置是否正确,
ifconfig命令可以查看。 - 确认内网客户端的网关和DNS设置无误。
为了更清晰地展示核心规则,下表进行了小编总结:
| 表 | 链 | 规则示例 | 说明 |
|---|---|---|---|
| nat | POSTROUTING | iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE | 对从外网接口eth0出去的数据包进行源地址伪装 |
| filter | FORWARD | iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT | 允许从内网到外网的新连接转发 |
| filter | FORWARD | iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT | 允许已建立连接的返回流量转发回内网 |
相关问答FAQs
问题1:我的内网机器可以Ping通网关(CentOS服务器),但无法访问互联网,是什么原因?
解答:这是一个非常典型的问题,能够Ping通网关说明内网客户端与服务器之间的二层网络(链路层)是通畅的,无法访问外网通常指向两个可能:一是服务器的IP转发功能未开启;二是iptables的FORWARD链规则阻止了流量,请首先使用 cat /proc/sys/net/ipv4/ip_forward 确认内核转发已启用(输出为1),使用 iptables -L -n -v 查看FORWARD链的策略和规则,确保存在允许从内网到外网以及允许返回流量(RELATED,ESTABLISHED状态)的规则,很多时候,问题出在忘记配置FORWARD链的第二条规则,导致返回的数据包被丢弃。
解答:MASQUERADE(伪装)和SNAT(源地址转换)都用于修改数据包的源IP地址,但它们的工作方式和适用场景有所不同。
:它会自动检查数据包出接口( -o参数指定的网卡)的当前IP地址,并将其作为新的源地址,这个操作需要消耗一些额外的资源来动态查询接口地址,它最适用于外网IP地址不固定的场景,例如家庭宽带通过PPPoE拨号获取IP。:它需要您在规则中明确指定一个固定的IP地址作为新的源地址(使用 --to-source参数),由于地址是静态的,系统不需要每次都去查询,因此处理效率比MASQUERADE稍高,它只适用于外网IP地址是固定不变的场景。
选择建议:如果您的服务器公网IP是静态的,推荐使用SNAT以获得最佳性能,如果公网IP是动态的,或者您不确定,使用MASQUERADE是更安全、更通用的选择,对于大多数家庭和小型办公环境,MASQUERADE是首选。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复