性能·网络 / 命令文档

Linux NAT原理与运维实战

$ nat 12 个章节 Linux 命令详解

概述

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维护一个连接跟踪表,记录内网地址和端口到外网地址和端口的映射关系。

静态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

注意:MASQUERADE适用于动态IP环境,SNAT适用于静态IP环境。

基础配置命令

# 启用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
使用iptables-save保存规则: iptables-save > /etc/iptables/rules.v4

连接跟踪监控

# 查看当前连接跟踪表
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链被阻止 • 目标服务未启动 • 内网路由配置错误
# 排查命令
# 检查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"

同分类 · 其他命令文档