Linux NAT原理与运维实战
概述
Network Address Translation - 网络地址转换技术深度解析
NAT基本原理
NAT = Network Address Translation 网络地址转换技术
核心概念:NAT是一种网络技术,用于修改网络数据包的IP地址信息,使私有网络中的多个设备能够共享一个公共IP地址访问互联网。
NAT工作流程: 内网设备(192.168.1.100:5000) ↓ 发送请求 ↓ NAT路由器(公网IP:8080) ↓ 转换地址 ↓ 外网服务器(8.8.8.8:80)
静态NAT (Static NAT)
内网IP与公网IP一对一地址映射,适用于需要固定公网地址的服务器。
iptables -t nat -A PREROUTING -d 公网IP -j DNAT --to-destination 内网IP iptables -t nat -A POSTROUTING -s 内网IP -j SNAT --to-source 公网IP
动态NAT (Dynamic NAT)
多对多地址池映射,内网IP从公网IP地址池中动态选择进行映射。
PAT/NAPT (端口地址转换)
多对一端口映射,内网IP映射到公网IP不同端口,最常用的NAT类型。
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
基础配置命令
# 启用IP转发 echo 1 > /proc/sys/net/ipv4/ip_forward # 永久生效 echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf # 基本SNAT配置 iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 公网IP # MASQUERADE配置(推荐用于DHCP环境) iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
端口转发配置
# 将公网80端口转发到内网Web服务器 iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:80 # SSH端口转发示例 iptables -t nat -A PREROUTING -p tcp --dport 2222 -j DNAT --to-destination 192.168.1.50:22
连接跟踪监控
# 查看当前连接跟踪表 cat /proc/net/nf_conntrack # 实时监控新建连接 conntrack -E -e NEW # 查看连接统计 cat /proc/sys/net/netfilter/nf_conntrack_count cat /proc/sys/net/netfilter/nf_conntrack_max
最大连接数
65536
当前连接
连接使用率
性能分析工具
# 使用ss查看网络连接状态 ss -tuln | grep :80 # netstat查看NAT统计 netstat -nat | grep ESTABLISHED | wc -l # 使用tcpdump抓包分析 tcpdump -i any -n host 192.168.1.100
常见问题诊断
问题1: 内网无法访问外网
# 检查步骤 1. 确认IP转发是否开启 cat /proc/sys/net/ipv4/ip_forward 2. 检查NAT规则 iptables -t nat -L -v -n 3. 检查路由表 route -n 或 ip route show 4. 测试DNS解析 nslookup google.com
问题2: 端口转发不生效
# 排查命令 # 检查FORWARD链规则 iptables -L FORWARD -v -n # 允许转发流量 iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT iptables -A FORWARD -i eth1 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
问题3: 连接跟踪表满
# 调整连接跟踪参数 echo 131072 > /proc/sys/net/netfilter/nf_conntrack_max echo 7200 > /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_established
防火墙安全配置
# 基本安全规则 # 丢弃无效连接 iptables -A INPUT -m state --state INVALID -j DROP # 限制连接频率 iptables -A INPUT -p tcp --dport 22 -m limit --limit 3/min -j ACCEPT # 防止DDoS攻击 iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT
NAT安全最佳实践
限制转发规则的源地址范围
定期审计NAT规则和端口转发
启用连接跟踪日志记录
使用fail2ban防护SSH等服务
定期更新系统和iptables
# 启用日志记录 iptables -A FORWARD -j LOG --log-prefix "NAT-FORWARD: " # 查看日志 tail -f /var/log/syslog | grep "NAT-FORWARD"