SSH实现端口转发和SOCKS5代理

6/24/2022 Linux

# 公用参数

  • -v verbose
  • -f 后台运行
  • -N 连接后不打开 shell
  • -C 压缩转发的数据
  • -q 静默模式

# 本地转发到远程

将请求从本地端口转发到ssh服务器,然后再发到远程服务器

示例:将本地 35689 端口的请求经过 root@example.com 转发到 test.com:22

ssh -fqNC -L localhost:35689:test.com:22 root@example.com
1

注:localhost: 可省略

# 使用方法

ssh root@localhost -p 35689
1

# 远程转发到本地

在远程监听端口,所有数据都会通过ssh转发到本地端口,可以通过公网IP直接访问到本地的应用

示例:将远程 example.com 上的 35689 端口的所有请求转发到本地的 5690 端口

ssh -fqNC -R localhost:35689:localhost:5690 root@example.com
1

注:localhost: 可省略

# 使用方法

本地监听 5690 端口并 Read 数据,以 nc 为例

nc -tl localhost 5690
1

请求远程的 35689 端口

ssh root@example.com "curl localhost:35689"
1
curl example.com:35689
1

# SOCKS5透明代理

将本地 35689 端口的所有请求都转发到 example.com 处理,实现透明代理

ssh -fqNC -D 35689 root@example.com
1

# 使用方法

curl

curl -x socks5://127.0.0.1:35689 https://myip.ipip.net
1

git

git config http.proxy socks5://127.0.0.1:35689
git config https.proxy socks5://127.0.0.1:35689
1
2

设置为系统代理,让所有本地流量都通过代理转发

export all_proxy=socks5://127.0.0.1:35689
1
Last Updated: 2/11/2023, 2:30:05 AM