[!NOTE]
本文介绍端口转发、隧道、代理技术,以及相关工具的使用
1. 端口转发
端口转发(Port Forwarding)其实就是把进入某个端口的流量“转送”到另一台主机或另一个端口,常用于内网穿透、端口映射、代理跳板等场景。
1.1. 端口转发的原理
核心流程:
- 监听入口端口(本地或某个中间服务器上)。
- 收到流量后转发到指定的目标 IP 和端口。
- 对返回的数据做反向传递,让发起连接的客户端感觉是在直接连接目标。
作用场景:
- 外网访问内网服务(内网穿透)
- 把一个服务换到另一个端口(端口映射)
- 渗透测试中,用跳板机访问被隔离的目标主机
1.2. 使用 lcx 实现端口转发
lcx 是一款小型端口转发工具,主要用来做正向和反向端口转发。
1.2.1. 正向端口转发
把本机的 3389 端口转发到 192.168.1.100 的 3389:
1
lcx -tran 3389 192.168.1.100 3389
客户端访问本机 3389,其实是连到 192.168.1.100:3389。

1.2.2. 反向端口转发(内网穿透场景)
假设你在外网有一台 VPS(公网 IP 1.2.3.4),内网机器不能被外网直接访问,但可以主动连出去:
1
2
3
4
# vps
lcx -listen 4444 3389
# 内网服务器
lcx -slave 1.2.3.4 4444 127.0.0.1 3389
这样,内网机器连接 VPS 后,访问 VPS 的 4444 就等于访问内网的 3389。

2. 代理
正向/反向连接、正向/反向代理,虽然名字很像,但场景、发起方向、作用都不一样。我们可以分成两个维度:
- 连接(谁主动找谁建立连接)
- 代理(谁帮谁转发流量)
2.1. 正向连接 / 反向连接
这是网络通信里的 连接发起方向 问题,描述的是网络连接发起的方向。关注点在于“谁主动发起连接请求”。常出现在远控、渗透、隧道工具等领域。
| 名称 | 主动发起方 | 常见用途 | 例子 |
|---|---|---|---|
| 正向连接 | 客户端 → 服务器 | 正常的网络访问模式 | 浏览器访问网站;SSH 客户端连接 SSH 服务器 |
| 反向连接 | 服务器(被控端)→ 客户端(控制端) | 绕过 NAT、防火墙限制 | 被控主机通过 TCP 连接回攻击者的监听端口 |

2.2. 正向代理 / 反向代理
这是代理模式问题,描述的是代理服务器在网络通信中所扮演的角色和位置。关注点在于“代理服务器代表谁(客户端还是服务器端)以及位于哪一侧”。重点是“谁在帮谁转发请求”。
| 名称 | 代理面向的对象 | 典型用途 | 例子 |
|---|---|---|---|
| 正向代理 | 面向客户端,为客户端代为访问目标 | 科学上网、缓存加速、隐藏客户端 IP | 浏览器 → v2rayN → 目标网站 |
| 反向代理 | 面向服务端,为服务端代为处理请求 | 负载均衡、安全防护、隐藏真实后端 | 用户 → Nginx → Web 服务器 |
2.2.1. 正向代理
定义: 位于客户端(或客户端网络)和互联网之间的代理服务器。客户端明确知道并配置要使用该代理。
功能:
- 代表客户端访问外部资源: 客户端将请求发给正向代理,代理再去目标服务器获取资源,然后返回给客户端。
- 客户端匿名/隐私保护: 目标服务器看到的是代理的 IP,而不是客户端的真实 IP。
- 访问控制与审计: 公司网络常用,控制员工能访问哪些外部网站,并记录访问日志。
- 内容过滤: 过滤恶意网站或禁止访问特定内容。
- 本地缓存: 缓存常用资源,加速访问。
2.2.2. 反向代理
定义: 位于服务器端(或服务器网络)和互联网之间的代理服务器。客户端通常不知道背后有代理存在。
功能:
- 隐藏后端真实 IP/端口(客户端只知道代理服务器)
- 可以做访问控制(比如只允许部分流量访问后端)
- 可以做负载均衡、缓存、SSL 加密等
区别要点
- 正向代理:客户端知道目标,但目标不知道真实客户端。
- 反向代理:客户端不知道真实服务端,只看到代理的地址。

2.3. EW 的反向代理
EW(EarthWorm)的“反向代理”概念和 Web 运维里的反向代理有点不同,更偏向于反向连接 + 流量中转。
工作方式:
- 内网机器(无法被直接访问)主动连接到公网中转机(EW Server)。
- 控制端(攻击者机器)连接到公网中转机,通过它转发数据到内网机器。
- 主要作用是突破防火墙、NAT 限制,实现内网穿透。
2.4. 总结对照表
| 分类 | 正向 | 反向 |
|---|---|---|
| 连接 | 客户端 → 服务器(正常发起) | 服务器 → 客户端(绕过限制) |
| 代理 | 代理帮客户端访问目标(隐藏客户端) | 代理帮服务器处理请求(隐藏服务器) |
3. 隧道技术
3.1. 概念
隧道技术就是在一个协议中“包裹”另一种协议的数据,让原本不能直接通信的数据,借助其他可通信的通道传输。
3.2. 核心流程
- 封装(Encapsulation):将原始数据包(如 TCP、UDP)封装到另一种协议的数据载荷中。
- 传输(Transport):用外层协议发送到隧道的另一端。
- 解封(Decapsulation):隧道另一端拆开外层协议,还原出原始数据,再发给目标应用或主机。
3.3. pingtunnel
3.3.1. 原理
pingtunnel 利用 ICMP 协议(ping 请求/应答) 作为传输通道,把 TCP/UDP 流量封装到 ICMP 数据包中。
适用于:
- 网络只允许 ping,不允许直接 TCP/UDP 出口。
- 绕过简单的防火墙或 ACL。
- 搭建隐蔽的数据通道(渗透测试场景)。
工作流程:
- 客户端发起 TCP/UDP 连接(例如访问远程 22 端口)。
pingtunnel客户端把这些数据包进 ICMP 数据包。- ICMP 数据包发给
pingtunnel服务器。 - 服务器解封装,按原协议发到目标端口。
- 返回数据走相同反向流程。
3.3.2. icmp 隧道 CS 上线

在服务端启动:
1
./pingtunnel -type server
在客户端启动:
例如要通过 ICMP 隧道访问远程服务器的 CS 监听端口:
1
./pingtunnel -type client -l 127.0.0.1:1111 -s 1.2.3.4 -t 1.2.3.4:2222 -tcp 1
3.3.3. ew 代理+pingtunnel 隧道
|  |
kali-server 开启反向 socks 客户端和 pingtunnel 服务端
1
2
./ew -s rcsocks -l 3333 -e 4444
./pingtunnel -type server
win-web 开启反向 socks 服务端和 pingtunnel 客户端
1
2
pingtunnel -type client -l 127.0.0.1:1111 -s 192.168.22.128 -t 192.168.163.132:4444 -sock5 -1
ew -s rssocks -d 127.0.0.1 -e 1111
win-client 使用 Proxifier 配置 SSH 代理

使用 cmd 命令行连接 CentOS
1
ssh root@192.168.22.130
3.4. 优缺点
优点
- 绕过仅允许 ICMP 的出口限制。
- 实现简单,不依赖特殊内核模块。
- 可加密、认证。
缺点
- ICMP 不适合高带宽、大延迟需求的业务。
- 很容易被 IDS/IPS 检测(ICMP 流量不正常时)。
- 部分网络运营商或防火墙丢弃非标准 ICMP 数据。