前言

前段日子A-team群里的师傅sunshine,讲到了一个端口复用的方案,并发了几个工具,这里简单记录实践一下。

frsocks+protoplex+流量重定向实现端口复用

frsocks

https://github.com/3gstudent/Homework-of-Go/blob/master/frsocks.go

监听本地的2333端口开启一个socks5代理,这里也可以用其他工具,如ew,frp等等。

1
./frsocks -sockstype fsocks -listen 2333

image-20200716154735565

protoplex

https://github.com/Pandentia/protoplex

这是一个协议复用的工具,比如命令可将本地9999端口的流量根据协议类型转到本地的2333和80端口。

注: 在实战环境中,先用protoplex进行分流,然后再进行重定向。

1
./protoplex --socks5 192.168.154.130:2333 --http 127.0.0.1:80 -b 192.168.154.130:9999

注: protoplex设置分流的http协议IP和重定向的ip不要设置为同一个ip,否则会形成闭环。

同时该工具还支持其他协议的分流,如:

  • SSH
  • HTTP
  • TLS (/ HTTPS)
  • OpenVPN
  • SOCKS4 / SOCKS5

image-20200716192504883

流量重定向

linux

将访问80的流量重定向到9999端口

1
sudo iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 9999
windows

将本地80流量重定向到9999

1
2
netsh interface portproxy add v4tov4 listenport=80 listen
address=192.168.154.129 connectport=9999 connectaddress=192.168.154.129

相关操作命令:

显示系统中的转发规则列表:

1
netsh interface portproxy show all

删除指定的端口转发规则:

1
netsh interface portproxy delete v4tov4 listenport=80 listenaddress=192.168.154.129

清除所有当前的端口转发规则:

1
netsh interface portproxy reset

注: 必要的情况下,可以设置特定来源ip进行流量重定向。

效果

image-20200716153722658

image-20200716153737611

结语

站在巨人的肩膀上

本文思路和工具都来自sunshine,仅仅记录分享一下。