SSH 内网穿透术

让 ngrok, localtunnel 等见鬼去吧!(ngrok 不用的理由,localtunnel-server 搭建自己的服务,域名设置存在过多的坑)!

前奏

  • 需求:内网服务接口暴露给外网调用(外网不能直接访问内网)
  • 前提:拥有一台外网 VPS
  • 思路:使用外网 VPS 做代理,外网访问该VPS,VPS再转发映射内网地址
  • 技术:ssh, autossh, ssh-copy-id

实现

  1. 环境
  • 目标A:内网服务器(开发服务器),服务器端口8080,映射端口8088
  • 目标B:外网VPS,服务器端口8089,映射本地端口8088,公网IP:192.168.1.111(举例IP,替换成相应的地址即可)
  • 访问者C : 可以访问VPS,不能访问A
  1. 目标B,启动服务(端口转发,实现方式SSH 正向代理 或 iptables 转发)
#会要求 VPS 服务器 root 登录密码
➜  ~ ssh -fCNL *:8089:localhost:8088 localhost
# or
  1. 目标A,启动服务(原理SSH 反向代理)
#192.168.1.111 为 VPS 服务器 IP,记得替换成你自己
➜  ~ ssh -fCNR 8088:localhost:8080 root@192.168.1.111
  1. 访问者C, 访问 http://192.168.1.111:8089, 完成访问

高级

  1. ssh 连接不稳定,一段时间可能断开的问题,使用autossh解决
#-M 6677为 autossh 维持访问的端口, 其他参数同ssh
➜  ~ autossh -M 6677 -fCNR 8088:localhost:8088 root@XXX
  1. 遇到坑了吧,多尝试吧,本人刚开始看阮一峰博客介绍SSH时候,完全没法成功呀。根据你自己的需求出发去找答案吧。Google在向你招手。

注意事项

  1. VPS 防火墙(iptables等),开放8088、8089端口
  2. VPS 如果是Aliyun ECS 注意服务器安全组设置
  3. ssh免密码登录,试试ssh-copy-id
  4. Warning: remote port forwarding failed for listen port 8088 kill 掉VPS 上 sshd: root 相关进程重试吧
  5. 出现外网访问加载不出来,但又非失败的情况。同上
  6. macOS ssh 一段时间超时断开,客户端设置编辑~/.ssh/config 加入ServerAliveInterval 60

参考

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,242评论 19 139
  • 防火墙的概念iptables的简介iptables命令网络防火墙NATfirewalld服务 一、防火墙的概念 (...
    哈喽别样阅读 1,876评论 0 1
  • 我的故事,从何说起,不知道,根本无从码字,因为,我本就是不知道内心该如何表达的人,然而只是想作为流水日记的形式,将...
    6a73e364af04阅读 204评论 1 0
  • p2p网络融资 p2p网络融资 p2p网络融资
    茅衙母97454阅读 321评论 0 0