前言
很多 Web
服务开发者经常会碰到需要将本地开发测试中的 Web
服务发给客户预览,或者是像微信支付平台类需要接受 回调通知
的业务场景,此时如果本地没有公网IP,就无法使用 DMZ
或者 端口转发
之类的方案将本地的服务发布到公网上让外部可以访问。
所以此时很多人都使用类似 Ngrok
frp
之类的 内网穿透
工具来进行操作。
其实,SSH本身也可以进行各种代理和转发,跟 Ngrok
之类服务一样,你也需要一台公网可以访问的服务器。
打开SSHD服务端口转发
首先编辑 sshd_config
文件:
bash
vi /etc/ssh/sshd_config
找到 GatewayPorts
,删掉注释,并将参数配置为 GatewayPorts yes
,然后重启 sshd
服务即可:
bash
service sshd restart
使用命令行连接并启动
通过SSH命令来启动并直接指定转发规则:
我们将访问公网服务器 9999
端口的所有请求转发到 没有公网 的本机电脑的 8080
端口,就可以使用下面的命令来操作:
bash
ssh root@hamm.cn -o StrictHostKeyChecking=no -NCR 9999:localhost:8080
上面的参数意思是,连接 hamm.cn
服务器的 ssh
服务,通过 -o StrictHostKeyChecking=no
来禁用一些安全提示,如服务器公钥验证/可信服务器验证等提示, 通过 -NCR
来实现一些其他配置:
N
不执行远程命令C
压缩数据并高效传输R
反向转发
当然,上面的服务会保持前台挂起状态,如需放到后台,可以再加个 f
参数即可:-NCRf
现在就可以通过访问公网 http://hamm.cn:9999
就能转发到本机的 http://localhost:8080
了,是不是美滋滋?
你可能会在其他文章中看到为了保持服务的稳定性和断线重连之类巴拉巴拉的,会让你去使用 autossh
之类的软件,但那与本文的标题"免装软件和服务"有一些格格不入,这里就不做介绍了。如果有iptable
的话,也可以使用iptable
来直接做防火墙级别的端口转发。非得装,那为啥不直接用 frp
之类更符合本文业务场景需求的工具呢?
好了,就到这里吧。