penglongli / blog

18 stars 1 forks source link

Linux 下的 SSH #22

Open penglongli opened 6 years ago

penglongli commented 6 years ago

本文仅介绍 SSH 的本地端口转发和远程端口转发(俗称“打洞”)、使用 -D 参数来实现 SOCKS 代理翻墙等

本地端口转发

前提:远程主机 Server(114.67.232.76) 运行了一个服务,端口在 52114。

我们要访问这个服务,可以直接在浏览器输入 http://114.67.232.76:52114 来访问这个服务。 现在,我们想直接通过本机的 http://localhost:52111 来访问这个服务。

定义: 将发送到本地端口的请求,转发到远程目标端口。

语法:

ssh  -L 本地网卡地址:本地端口:远程主机地址:远程端口

使用:

$ ssh -L 0.0.0.0:52111:114.67.232.76:52114 root@114.67.232.76

我们可以通过 lsof -i:52111 看到本地的 52111 端口是开启状态了。

优化:

$ ssh -N -C -o ServerAliveInterval=5 -L 0.0.0.0:52111:114.67.232.76:52114 root@114.67.232.76

-N 不打开远程命令行窗口
-C 压缩转发的数据
-o 自定义命令,此处定义隔 5 秒检查链接

然后我们就可以通过本地的:localhost:52111 访问服务了

远程端口转发

远程端口转发和本地端口转发正好相反。 定义: 在远程主机上,将发送到远程主机的请求,转发到本机的端口

语法:

ssh -R 远程主机地址:远程端口:本地网卡地址:本地端口

使用:

$ ssh -N -C -o ServerAliveInterval=5 -R 114.67.232.76:52000:localhost:52111 root@114.67.232.76

将远程主机的 52000 端口请求转发到本机的 52111 端口上。

动态端口转发(-D 参数)

这块介绍的是使用 -D 参数来进行科学上网。当然,也不仅仅是这点用。

假设你有台香港或者国外的机器,IP:198.148.115.10 我们在你的本机执行:

$ ssh -D 4444 root@198.148.115.10

你的本机就会开启一个 4444 端口,然后我们就可以通过这个 4444 端口来实现 Socket 代理了。 对于 Chrome 用户,可以下载个 SwitchyOmega 插件来玩。

懒得介绍了,具体的玩法见: https://github.com/FelisCatus/SwitchyOmega/wiki/GFWList

关于上网这块,我又切回了小飞机。不过小飞机这玩意并不是太好,可以考虑用 iKev2 来玩