关于SSH与Destination NAT工作原理及配置的技术咨询
SSH与Destination NAT(DNAT)原理详解及配置示例解析
DNAT核心原理
DNAT(目的地址转换)是网关设备的核心功能之一,专门处理跨网传输数据包的目的IP/端口改写:
- 公网用户发起的请求目标是网关的公网“虚拟地址”,DNAT会把这个目标地址替换成内网中真实服务器的私有IP/端口
- 本质是给没有公网IP的内网服务器做“端口映射”,让公网流量能穿透网关到达内网服务
SSH服务与DNAT的适配逻辑
SSH(安全外壳协议)是默认用22端口的远程管理协议,内网服务器如果要对外开放SSH访问,必须通过DNAT做映射:
- 公网用户发起
ssh 网关公网IP:自定义端口请求(用默认22端口的话直接ssh 网关公网IP) - 网关收到后,通过DNAT规则把目标端口22(或自定义端口)映射到内网服务器的22端口
- 内网服务器处理请求后,网关再把源地址反向转换,把响应包发回公网用户,整个过程对用户完全透明
配置示例逐段解析
注:原示例存在几处笔误(如year应为SSH默认端口22、S2_HTTP应为S_HTTP等),以下是修正后的完整配置及解析:
1. 定义服务组(打包公网请求端口)
(config)# object-group service HTTP (config-object-group-service)# port-range 80 // 公网访问Web服务用的80端口 (config-object-group-service)# exit //////////////////////// (config)# object-group service SSH (config-object-group-service)# port-range 22 // SSH服务默认22端口,修正原示例笔误 (config-object-group-service)# exit
object-group service是把常用服务的端口打包成组,后续规则可以直接引用组名,不用重复写端口号,方便维护- HTTP组对应公网访问Web服务的80端口,SSH组对应远程管理的22端口
2. 定义网络组(标识网关公网地址)
(config)# object-group network UPLINK (config-object-group-network)# ip address-range 100.1.1.0 100.1.1.1 // 替换成网关的公网IP/IP段 (config-object-group-network)# exit
UPLINK组用来标记网关的公网接口地址,后续规则里用它来匹配“发往网关公网IP的请求”
3. 创建DNAT地址池(指定内网真实服务器)
(config)# nat destination (config-dnat)# pool S_HTTP (config-dnat-pool)# ip address 192.168.1.100 // 替换成内网Web服务器的私有IP (config-dnat-pool)# ip port 8080 // 内网Web服务实际监听的8080端口 (config-dnat-pool)# exit (config-dnat)# pool S_SSH (config-dnat-pool)# ip address 192.168.1.101 // 替换成内网SSH服务器的私有IP (config-dnat-pool)# ip port 22 // 内网SSH服务监听的22端口,修正原示例笔误 (config-dnat-pool)# exit
nat destination进入DNAT专属配置模式pool就是定义“目标转换的终点”:告诉网关,符合规则的公网请求要转到哪个内网IP和端口- S_HTTP池对应内网Web服务器(192.168.1.100:8080),S_SSH池对应内网SSH服务器(192.168.1.101:22)
4. 配置DNAT规则集(匹配条件+转换动作)
(config-dnat)# ruleset DNAT (config-dnat-ruleset)# from default (config-dnat-ruleset)# rule 1 (config-dnat-rule)# match protocol tcp (config-dnat-rule)# match destination-address UPLINK (config-dnat-rule)# match destination-port HTTP (config-dnat-rule)# action destination-nat pool S_HTTP // 修正原示例的S2_HTTP笔误 (config-dnat-rule)# enable (config-dnat-rule)# exit (config-dnat-ruleset)# rule 2 (config-dnat-rule)# match protocol tcp (config-dnat-rule)# match destination-address UPLINK (config-dnat-rule)# match destination-port SSH (config-dnat-rule)# action destination-nat pool S_SSH // 修正原示例的S2_SSH笔误 (config-dnat-rule)# enable (config-dnat-rule)# end //////////////////////// # commit # confirm
ruleset是把一组DNAT规则归类,方便批量管理和调试from default表示这组规则应用于从外部接口进来的默认流量- 规则1逻辑:只要是TCP协议、目标地址是网关公网IP(UPLINK组)、目标端口是80(HTTP组)的请求,就自动转到S_HTTP池对应的内网Web服务器
- 规则2逻辑:只要是TCP协议、目标地址是网关公网IP、目标端口是22(SSH组)的请求,就自动转到S_SSH池对应的内网SSH服务器
commit是保存配置,confirm是确认生效,这两步是网关配置的标准收尾操作
内容的提问来源于stack exchange,提问作者Mohammed Karill
相关产品推荐
相关产品推荐

