场景是这样的,前几天问运维同学要了一个测试机,只有内网IP,大部分情况够用,但是呢,偶尔也需要看看web页面什么的,怎么解决呢,正好我有个VPS,所以就想用SSH做个反向隧道,可以在家里也能访问到测试机的web服务,大部分都是临时使用,用完就关闭就好,安全风险也不是很大。

连接互联网的电脑 ---> 公网IP(vps) <--ssh隧道--> 内网测试机

解决方案比较多,现在有比较多的内网隧道工具,我这里比较原始了,但是也是法子

过程

角色

  • 内网测试机 A 10.0.11.5 启动redis在 6379
  • VPS公网 B 45.xx.xx.xx ssh端口 26294,root用户
  • 访问内网服务使用自己的笔记本,可以连接公网 C, 目标连接内网的 redis

1、B->A 建立反向ssh隧道,在内网测试机A 上操作

ssh -fN -R 8888:localhost:6379 root@45.xx.xx.xx -p 26294

这个命令的含义是,通过 SSH 把本地的 6379端口映射到远程vps的 8888 端口,执行命令输入密码(或者使用key做免密码登陆)

2、执行上述命令之后,在 vps 上查看

root@fendou:~# netstat -ntpl |grep 8888
tcp        0      0 127.0.0.1:8888          0.0.0.0:*               LISTEN      23882/sshd: root

这个时候发现 8888 端口绑定的是 127.0.0.1 端口,在 自己的电脑上 执行 redis-cli -h 45.xx.xx.xx -p 8888, 连不上内网的redis,现在就需要一个非常简单的方式来个端口映射,把绑定到 0.0.0.0 的某个端口映射到 8888 端口

3、 在 vps主机 上执行

nc -l -p 8001 -c "nc 127.0.0.1 8888" -vv

4、 ok,现在 vps 的 8001 端口被放到公网上了,在本地的电脑上执行

$ redis-cli -h 45.xx.xx.xx -p 8001
45.xx.xx.xx:8001> info

好了,大公告成,这里提供个思路,还有很多优化的地方,例如可以把命令封装成脚本使用,还有请大家注意 redis的安全问题。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐