疯狂の猿猴

别再瞎搜内网穿透了,SSH 自带的才是王者

ssh内网穿透共分三种方式,本地端口转发、远端端口转发、动态端口转发,每一种方式后都有使用示例额,包教包会。

一、本地端口转发

-L [绑定地址:]端口:目标主机:目标端口

-L [绑定地址:]端口:远程Socket

-L 本地Socket:目标主机:目标端口

-L 本地Socket:远程Socket

作用说明:

将本地机器上指定的 TCP 端口或 Unix Socket 接收到的连接,转发到远程机器的指定主机:端口 或 Unix Socket。

工作方式:

在本地开启一个监听端口(可指定绑定 IP),每当有人连接这个本地端口,SSH 就会通过加密通道把流量转发出去,并让远程机器去连接目标地址。

使用示例:

本地已经可以ssh访问10.67.76.41,但本地无法访问10.67.76.44:22,而10.67.76.41可以访问10.67.76.44:22,那可以通过ssh -L把远端10.67.76.44的22端口映射到本地的2222,访问本地的2222即访问远端的22;

ssh -L <本地端口>:<目标IP>:<目标端口> user@跳板

ssh -L 2222:10.67.76.44:22 -p 10022 root@10.67.76.41 -N

-N参数 ,不执行远程命令,主要用于端口转发,不加-N的话会登录到目标服务器

二、远端端口转发

-R [绑定地址:]端口:目标主机:目标端口

-R [绑定地址:]端口:本地Socket

-R 远程Socket:目标主机:目标端口

-R 远程Socket:本地Socket

作用说明:

将远程服务器上指定的 TCP 端口 / Unix Socket 接收到的连接,转发到本地这边的指定主机:端口 或 Socket。

工作方式:

在远程机器上开启一个监听端口,有人访问远程该端口时,流量通过 SSH 隧道转发回来,并由本地机器去连接目标地址。

使用示例:

把本地端口3306映射至远端的31234,远端访问31234的时候即访问本地的3306;

ssh -R <远端端口>:<本地IP>:<本地端口> user@远端

ssh -R 31234:127.0.0.1:3306 -p 10022 root@10.67.76.41 -N

执行完成后在远端ss -ntl查看有新增的31234端口,直接访问curl 127.0.0.1:31234 测试通断;

三、动态端口转发(本地 Socks5 代理)

作用说明:

在本地开启一个动态应用层端口转发,本质是启动一个Socks4/Socks5代理服务。

工作方式:

本地监听一个端口,程序连接此端口时,流量会通过 SSH 隧道转发,由远程机器决定最终要访问的目标地址。ssh 会充当 Socks 服务器。

使用示例:

在本地开启代理端口,本地的其他主机配置代理,通过跳板机10.67.76.41去访问目标

ssh -D <本地端口> user@跳板机

ssh -D 192.168.109.129:10800 -p 10022 root@10.67.76.41 -N

此时可以通过浏览器或者其他能够设置代理的程序,设置代理为本地192.168.109.129:10800,流量会被10.67.76.41代理访问出去;

图片

注意:

端口转发也可在配置文件中设置,只有root可以转发1024以下特权端口。

有时候需要修改以下配置

sudo vim /etc/ssh/sshd_config

GatewayPorts yes # 允许远端局域网的其他机器访问远端映射的端口

AllowTcpForwarding yes # 允许 TCP 转发

sudo systemctl restart sshd

当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »