端口转发(Port Forwarding)逻辑图解+实践详解
|
admin
2025年8月5日 23:3
本文热度 117
|
概念
- 端口转发(Port Forwarding)是一种网络配置技术,允许外部网络上的设备通过公共 IP地址访问位于私有网络内部的特定设备。它通常在路由器或防火墙上配置,将来自外网的请求转发到内网中的目标设备
- 端口转发是通过网络地址转换(NAT)机制实现的一种功能。当外网用户尝试连接到路由器的公共 IP 地址和指定端口时,路由器会根据预设的规则将该请求转发到内网中特定的 IP 地址和端口上
框架
用协议栈代码框架再说明一下:

在如下拓扑中,pc1想要利用端口转发访问server1,应该有哪些流程?

根据上面的框架,如下是流程解析:
发送流程
- 到达PREROUTING链(DNAT):数据包首先进入nat表的PREROUTING链,通过DNAT规则修改目标地址和端口
- 到达路由决策:内核根据目标IP(已修改为内网服务器IP)决定将数据包发送到哪个接口(如LAN口)
- 经过FORWARD链(过滤):数据包经过filter表的 FORWARD 链,放行转发流量(内核forward值为1)
- 到达POSTROUTING链(SNAT):数据包进入nat表的POSTROUTING链,修改源地址为防火墙的LAN口IP
返程流程
- 服务器响应:内网服务器将响应包发送到防火墙的LAN口(目标地址为原始请求的源 IP)
- 到达路由决策:防火墙识别这是转发流量的返回包,根据连接跟踪(conntrack)恢复原始目标IP
- 到达POSTROUTING链(SNAT逆向):将源地址从内网服务器IP改回防火墙的WAN口IP
所以正常逻辑我们就需要按照如上流程进行防火墙规则配置
eNSP 端口转发实验
实验拓扑

- 配置:
Client配置
server配置:

- 路由器配置


- 端口转发规则配置(用于将外网访问路由器的某个端口流量转发到内网服务器的指定端口):
nat server protocol tcp global current-interface 8080 inside 192.168.1.2 80

- 在sever内启动http server

- 启动client进行连接

- wan口抓包:

- server局域网抓包

端口转发已生效,端口与ip已经成功转换
但是没有成功建立连接,下面我将用实际设备进行端口转发发包验证
实际开发板端口转发实验
配置如图

- linux 主板配置nat
DNAT规则:iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 1000 -j DNAT --to 192.168.10.2:333
修改FORWARD规则:匹配原始端口1000(而非 333):iptables -A FORWARD -i eth0 -o br0 -p tcp --dport 1000 -d 192.168.10.2 -j ACCEPT - PC1发送包配置:

点击send发送 - PC1网卡抓包:

- PC2网口抓包:

端口转发已经完成,暂不解决回包问题,关于SNAT的配置可以自行拓展
端口转发与端口映射
- 工作机制的区别:
端口转发:主要处理来自外网的请求,将其转发到内网中的目标设备。它依赖于静态配置的规则,通常是一对一的映射关系。
端口映射:既可以处理来自外网的请求,也可以处理来自内网的请求。它可以是一对多或多对多的映射关系,更加灵活。 - 处理方式的区别:
端口转发:专注于从外网到内网的流量转发,通常是一对一的关系。例如,将外部端口 80 的请求转发到内网 Web 服务器的端口 80
端口映射:可以处理双向流量,支持一对一或多对多的映射。例如,将多个外部端口映射到同一台设备的不同服务端口,或在同一设备上进行端口重定向。
通俗理解
- 端口映射可以实现外网到内网和内网到外网双向的通信,而端口转发只能实现外网到内网的单向通信。
阅读原文:原文链接
该文章在 2025/8/6 16:45:25 编辑过