autossh反向代理实现内网穿透

有时候需要在公司使用家里个人PC的一些资源,此时可以选择Teamvieawer进行远程,但是略微麻烦而且访问速率较慢,此时通过vps实现内网穿透就是个不错的想法。

 

本文讲述的内网穿透方法是通过autossh实现vps对内网的反向代理,在vps与内网之间建立一条长连接,使得外网PC通过vps的反向代理访问内网PC。整个实现所需的条件如下:

  1. 带有公网IP(222.222.222.222)的vps
  2. 保持开机且联网的内网PC
  3. 任一联网的外网PC

vps配置

修改vps的文件/etc/ssh/sshd_config, 取消以下参数的注释或是修改其值

 
  1. GetewayPorts yes
  2. TCPKeepAlive yes
  3. ClientAliveInterval 60
  4. ClientAliveCountMax 3

内网PC配置

为了保证内网PC可以免密码访问vps,需要在vps添加内网PC的公钥

 
  1. $ ssh-keygen
  2. # ... enter ...
  3. $ ssh-copy-id -i ~/.ssh/id_rsa.pub -p 27000 root@222.222.222.222
  4. # 27000是访问vps的端口号,root是vps的用户名,222.222.222.222是vps的公网IP

配置好后,在内网PC安装autossh

 
  1. sudo apt-get install -y autossh

安装好以后,通过以上指令便可实现反向代理:

 
  1. autossh -p 27000 -M 27400 -NR '*:27401:localhost:27402' root@222.222.222.222

其中的参数:

  • -p 27000: vps ssh 端口,默认值22
  • -M 27440: 中继服务器(vps)的代理服务监听端口,需保证不被vps其它进程占用
  • -NR '*:27401:localhost:27402': 端口映射,vps的27401端口映射到内网PC的27402端口
  • root@222.222.222.222: vps的用户名及IP

这里涉及到4个端口,27000是vps ssh的监听端口,27400是vps代理服务的监听端口,2740127402是vps与内网PC之间的一对端口映射,外网PC需要通过vps的27401端口访问内网。

配置autossh服务

使用以上指令已经可以完成所需的功能了,但是每次开机都得重新输一遍,很不方便,所以可以把指令封装成一个服务,然后设置为开机启动。在ubuntu中,可以在lib/systemd/system目录下新建一个autossh.service的文件,并输入以下内容:

 
  1. [Unit]
  2. Description=Auto SSH Tunnel
  3. After=network-online.target
  4. [Service]
  5. User=autossh
  6. Type=simple
  7. ExecStart=/usr/bin/autossh -p 27000 -M 27400 -NR '*:27401:localhost:27402' root@222.222.222.222 -i ~/.ssh/id_rsa
  8. ExecReload=/bin/kill -HUP $MAINPID
  9. KillMode=process
  10. StartLimitIntervalSec=5
  11. StartLimitBurst=12
  12. Restart=always
  13. [Install]
  14. WantedBy=multi-user.target
  15. WantedBy=graphical.target

配置好后,通过以下指令完成启动、查询和自启动。

  • 启动服务:sudo systemctl autossh start
  • 查看状态:sudo service autossh status
  • 开机启动:sudo systemctl enable autossh.service

远程访问内网

最后就是如何通过外网访问内网了,其实和访问vps本身类似,仅仅是改一下连接端口即可。

 
  1. sudo ssh root@222.222.222.222 -p 27401

扩展说明

本文介绍的是通过vps实现反向代理,如果没有vps的话就无法使用了,此时可以学习下frpNgrok,使用公共的服务器实现代理.

参考

本文作者:litreily

本文链接:https://www.litreily.top/2018/11/25/autossh/

版权声明:本博客所有文章除特殊声明外,均采用 CC BY-NC 4.0 许可协议。转载请注明出处 litreily的博客

### 什么是SSH内网穿透 SSH内网穿透是一种技术手段,允许外部网络访问位于内部局域网中的设备和服务。这种技术通常用于远程管理和数据传输场景下,解决因防火墙或路由器限制而导致无法直接访问目标主机的问题。 --- ### 使用Cpolar实现Linux系统的SSH内网穿透 对于基于Linux的操作系统,可以利用Cpolar工具快速完成SSH内网穿透配置。以下是具体说明: #### 安装Cpolar并创建公网SSH连接地址 在Linux环境中安装Cpolar后,可以通过其内置功能生成一个可被外网访问的SSH连接地址[^1]。此过程涉及启动Cpolar客户端并与服务器建立隧道连接。 #### JuiceSSH进行公网远程连接 JuiceSSH是一款适用于Android平台的SSH客户端软件,在完成了上述步骤之后,用户能够借助该应用经由所生成的公有IP端口组合来登录到自己的Linux机器上。 #### 固定SSH公网地址及测试 为了保障每次重启服务或者更换会话时仍能保持一致性的接入路径,则需进一步设置固定的映射关系,并执行必要的功能性验证操作以确认一切正常运作。 --- ### Windows环境下SSH内网穿透方案 同样地,在微软Windows操作系统里也可以达成相似效果——即让外界得以穿越NAT层抵达个人计算机上的资源位置处。 #### 启用与检验本地SSH服务能力 先要确保本机已开启支持OpenSSH协议的服务组件;接着运用标准命令行界面来进行初步的功能性检测,比如尝试ping回环地址localhost(127.0.0.1),以此判断当前状态是否满足预期需求[^2]。 #### Cpolar部署于Winows之上 紧接着按照官方指引下载对应版本号的exe文件包,依照提示完成整个安装配对流程直至成功上线运行为止。此时应该可以看到一条新的tcp类型的转发记录显示出来代表已经建立了通往互联网的大门入口通道。 #### 测试来自远方地点发起的安全shell请求能否顺利到达指定的目标节点那里去。 最后一步就是实际动手去做一下完整的端到端贯通实验啦! 只需要用任意一款兼容posix接口规范定义下的图形化前端程序像Putty那样东西就可以轻松搞定全部事情咯. --- ### 利用Autossh增强稳定性 考虑到长时间维持稳定可靠的链接可能存在挑战, 推荐采用autossh替代普通的ssh指令下达形式来做同样的工作内容. 它具备自动重连机制以及心跳探测特性等功能优势可以帮助我们更好地应对可能出现的各种异常状况. 命令样例如下所示: ```bash autossh -M 0 -L 443:127.0.0.1:332 root@[ssh_server] -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" ``` 这里设置了每隔三十秒钟发送一次探针信号给远端伙伴告知自己还活着; 如果连续三次都没有收到回应就会触发重新构建关联动作直到恢复正常通讯联系为止.[^3] --- ### Frp作为另一种选择 Frp (Fast Reverse Proxy) 是另一个非常流行且高效的反向代理解决方案之一, 特别适合用来处理复杂的多业务场景下的流量调度问题. 它的架构设计清晰明了易于理解和掌握, 并提供了丰富的参数选项让用户可以根据实际情况灵活调整优化性能表现. ![frp_http_and_ssh](https://example.com/frp-http-and-ssh.png) 以上图片展示了http和ssh两种模式下的基本原理框架图解说明文档资料来源出处标记如下:[^4] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值