网络隧道技术总结

windows netsh端口转发

1
2
3
4
5
6
7
8
9
10
开启转发
netsh interface portproxy add v4tov4 listenaddress=localaddress listenport=localport connectaddress=destaddress connectport=destport

查看存在的转发

netsh interface portproxy show all

删除指定规则

netsh interface portproxy delete v4tov4 listenport=3340 listenaddress=xx.xx.xx.xx

访问listen的地址端口,会被转发到dest的地址与端口

SSH

ssh 命令除了登陆外还有三种代理功能:

正向代理(-L):相当于 iptable 的 port forwarding
反向代理(-R):相当于 frp 或者 ngrok
socks5 代理(-D):相当于 ss/ssr

正向代理

远程端口映射到其他机器

HostB 上启动一个 PortB 端口,映射到 HostC:PortC 上,在 HostB 上运行:

1
HostB$ ssh -L 0.0.0.0:PortB:HostC:PortC user@HostC

这时访问 HostB:PortB 相当于访问 HostC:PortC(和 iptable 的 port-forwarding 类似)。

本地端口通过跳板映射到其他机器

HostA 上启动一个 PortA 端口,通过 HostB 转发到 HostC:PortC上,在 HostA 上运行:

1
HostA$ ssh -L 0.0.0.0:PortA:HostC:PortC  user@HostB

这时访问 HostA:PortA 相当于访问 HostC:PortC。

反向代理

HostA 将自己可以访问的 HostB:PortB 暴露给外网服务器 HostC:PortC,在 HostA 上运行:

1
HostA$ ssh -R HostC:PortC:HostB:PortB  user@HostC

那么链接 HostC:PortC 就相当于链接 HostB:PortB。使用时需修改 HostC 的 /etc/ssh/sshd_config,添加:

GatewayPorts yes

socks5代理

利用ssh打开SOCKS Proxy

1
2
3
ssh -N -f -D 9000 [user]@[host]

ssh -N -f -D 0.0.0.0:39999(监听地址端口) xx.xx.xx.xx -p 22(ssh端口)

Proxychains

配置代理

1
vi /etc/proxychains.conf

修改如下位置

1
2
[ProxyList]
socks5 127.0.0.1 1080

使用代理

1
proxychains command

Graphtcp

graftcp 可以把任何指定程序(应用程序、脚本、shell 等)的 TCP 连接重定向到 SOCKS5 或 HTTP 代理。

安装

1
2
3
4
git clone https://github.com/hmgle/graftcp.git
cd graftcp && make
sudo make install
sudo make install_systemd

使用

1
2
3
4
5
6
7
启动graftcp-local,参数使用socks5代理或http代理的地址,相当于配置了代理
graftcp-local/graftcp-local -socks5 127.0.0.1:1080
使用graftcp通过代理执行命令
如,安装pip包
./graftcp pip install requests
如,打开firefox
./graftcp Firefox

reGeorg

1
2
3
4
5
git clone https://github.com/L-codes/Neo-reGeorg.git
python neoreg.py generate -k password
生成tunnel文件,将对应的tunnel上传到网站可访问目录下
python3 neoreg.py -k password -u http://xx/tunnel.php
默认会开启本地1080端口socks5,-p参数可指定端口,-l参数可指定监听地址

详细参考 http://uuzdaisuki.com/2021/04/15/reGeorg%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F/

frp

服务端配置

1
2
3
4
# frps.ini
[common]
bind_port = 7000
token = www.baidu.com

使用如下命令开启服务器

1
frps -c frps.ini

客户端配置(socks5隧道)

配置客户端时,要注意common中的ip和端口指向服务器,token与服务器中保持一致,每个socks代理,需要单独起plugin_name,并使用不同的remote_port。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[common]
server_addr = x.x.x.x
server_port = 7000
tls_enable = true
token = www.baidu.com
pool_count = 5
protocol = tcp #协议类型
health_check_type = tcp
health_check_interval_s = 100
[socks-001]
type = tcp
remote_port = 6666 #代理的端口
plugin = socks5 #使用的协议
plugin_user = admin
plugin_passwd = www.baidu.com
use_encryption = true #是否加密
use_compression = true

使用如下命令开启客户端

1
2
3
4
普通模式:
frpc -c frpc.ini
后台无回显模式:
nohup frpc -c frpc.ini &

此时在proxyfire等代理工具中配置:

  • ip为server_ip
  • port为remote_port
  • 用户为plugin_user
  • 密码为plugin_passwd

即可将客户端网络作为代理出口使用

详细参考 http://uuzdaisuki.com/2020/10/21/%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F%E5%B7%A5%E5%85%B7frp/

pivotnacci

与reGeorg类似,通过http服务建立socks5代理

1
2
3
pip3 install pivotnacci
pivotnacci https://domain.com/agent.php --password "passwd"
pivotnacci https://domain.com/agent.php --polling-interval 2000

tsocks

Tsocks是一个透明SOCKS代理软件,可以强迫任何软件通过socks代理上网

1
2
3
4
5
6
7
8
9
10
11
安装:
apt-get install tsocks
修改配置文件:
vi /etc/tsocks.conf
修改以下内容:
local = 192.168.1.0/255.255.255.0 #local表示本地的网络,也就是不使用socks代理的网络
server = 127.0.0.1 # SOCKS 服务器的 IP
server_type = 5 # SOCKS 服务版本
server_port = 9999 #SOCKS 服务使用的端口
运行:
tsocks 应用程序

Empire

1
2
3
4
(Empire) > socksproxyserver
(Empire) > use module management/invoke_socksproxy
(Empire) > set remoteHost xx.xx.xx.xx
(Empire) > run

sshuttle

https://github.com/apenwarr/sshuttle

pip install sshuttle

1
2
3
4
5
6
7
pacman -Sy sshuttle
apt-get install sshuttle
sshuttle -vvr user@10.10.10.10 10.1.1.0/24
sshuttle -vvr username@pivot_host 10.2.2.0/24

# using a private key
$ sshuttle -vvr root@10.10.10.10 10.1.1.0/24 -e "ssh -i ~/.ssh/id_rsa"

chisel

1
2
3
4
5
go get -v github.com/jpillora/chisel

# forward port 389 and 88 to hacker computer
user@victim$ .\chisel.exe client YOUR_IP:8008 R:88:127.0.0.1:88 R:389:localhost:389
user@hacker$ /opt/chisel/chisel server -p 8008 --reverse

Gost

1
2
3
4
5
6
7
8
git clone https://github.com/ginuerzh/gost
cd gost/cmd/gost
go build

# Socks5 Proxy
Server side: gost -L=socks5://:1080
Client side: gost -L=:8080 -F=socks5://server_ip:1080?notls=true

参考文档

https://zhuanlan.zhihu.com/p/57630633 SSH 命令的三种代理功能


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!