NAT ALG(Application Layer Gateway,应用层网关)是防火墙/NAT设备上的一种特殊功能,它能够深度解析特定应用层协议,并在NAT转换时同步修改应用层数据中嵌入的IP地址和端口信息,从而让这些应用协议能够正常穿越NAT。
一句话理解:
NAT ALG就像一个"协议翻译官",它知道FTP、SIP等协议在"说什么",并在NAT转换时帮它们"改口供",让协议信息在NAT前后保持一致。
问题:FTP在主动模式下穿越NAT时为什么需要ALG,而被动模式不需要
https://chat.deepseek.com/share/7r1jcp13ybwciar997
没有ALG时,双向NAT如何彻底破坏FTP通信
https://chat.deepseek.com/share/gdfn0mko3rgygviyet
哪台设备在NAT后面,哪个就去做NAT ALG,如果两个都在,则两个都做NAT ALG。
ALG部署位置总结表
| 模式 | 数据连接发起方 | 数据连接接收方 | ALG部署位置 |
|---|---|---|---|
| 主动模式 | 服务器 | 客户端 | 客户端侧的NAT设备 |
| 被动模式 | 客户端 | 服务器 | 服务器侧的NAT设备 |
部署ALG位置详解
https://chat.deepseek.com/share/t125m4632far0grnvj
ALG和ASPF (分析)
两种模式对比表
| 对比点 | 独立ASPF模式 | NAT ALG模式 |
|---|---|---|
| 有无NAT | 无NAT转换 | 有NAT转换 |
| 主要任务 | 动态放行多通道端口 | 修改应用层数据+动态放行端口 |
| 修改数据? | ❌ 不修改应用层数据 | ✅ 修改应用层数据中的IP地址 |
| 典型场景 | 内网访问内网服务器 | 内网访问外网服务器 |
| Server-Map | 简单放行规则 | 包含NAT转换的复杂规则 |
| 解决的问题 | 防火墙的状态检测问题 | NAT穿越+防火墙状态检测 |
详解
https://chat.deepseek.com/share/xv9h99hu6s20v0jpqy
alc num 2000 rule permit int g0/0/0 nat outbound 2000这是路由器在接口下面配置nat(Easy IP)
https://chat.deepseek.com/share/bf3tu4fphjuvp2jocq
R4上要做Nat Server
# R4上配置 int g0/0/0 nat server protocol tcp global 100.1.1.4 ftp inside 172.16.1.1 ftp # 为了做测试,可以做ICMP的nat server int g0/0/0 nat server protocol icmp global 100.1.1.4 inside 172.16.1.1这里的ftp与icmp的Nat Server的配置上的区别
https://chat.deepseek.com/share/0f8yh5xz1mcfqcpoq0
如果是主动模式,则在客户端侧的NAT设备上开启ALG
[R3]nat alg ftp enable这里用的是防火墙来做这个实验,如果换成防火墙,看会话,抓包会看得更加清楚,但是因为防火墙默认就开启了这个ALG功能。
防火墙上配置 firewall detect ftp 这条命令等于开启了ASPF跟ALG这两个功能。没办法只开启一个。
防火墙的ASPF的功能是生成server map表,让第二信道的建立能够绕过安全策略检查;NAT ALG实现的作用就是转换应用成的IP跟端口,让外面能找到,否则就是私网地址。