使用autossh实现内网穿刺

前言

需要在客户公司部署一套系统,要求是能公网访问,但是客户那边没有公网IP。所以打算打算使用autossh实现内网穿刺。

准备

硬件:

我需要一台有独立ip的公网服务器82.82.82.82(充当穿刺服务器),一台能连接公网的服务器,或个人电脑(无固定IP)。

原理:

两台服务器通过autossh建立连接(类似ssh,但掉线会重连),将公网服务器的如10001端口映射到客户服务器80端口

实现:

公网用户访问82.82.82.82:10001端口实际访问到客户电脑的80端口。

图解:

使用autossh实现内网穿刺_第1张图片

代码

公网服务器
  1. 在服务器提供商的网页控制台增加端口放行,如增加10001端口放行(云防火墙)。
  2. 进入服务内部设置防火墙放行10001端口.并重启防火墙(系统防火墙)。
firewall-cmd --zone=public --add-port=10001/tcp --permanent
firewall-cmd --zone=public --add-port=10001/tcp --permanent
firewall-cmd --reload
本地电脑
  1. 安装autossh
yum install epel-release # 系统版本>=CentOS 7.6需要执行,启用 EPEL 额外软件存储库,否则autossh包会找不到
yum install autossh #安装autossh
  1. 生成公钥私钥,并复制到公网服务器,来实现免密登录公网服务器。
ssh-keygen #生成公钥私钥
cat /root/.ssh/id_rsa.pub  #将里面的公钥内容复制到云服务器的/root/.ssh/authorized_keys里来实现免密登录
  1. 配置端口映射,并设置开机启动

设置端口映射,1995是本地服务器的保证持续连接的端口(随便用个未使用的),80是内网服务器的提供服务端口,10001是对应穿透服务器上的端口

autossh -f -M 1995 -NR 10001:localhost:80 [email protected]

chmod +x /etc/rc.d/rc.local #设置开机启动
echo 'autossh -f -M 1995 -NR 10001:localhost:80 [email protected]' >> /etc/rc.d/rc.local

验证

在本地服务器执行 sof -i:80,看到信息就是正确
在这里插入图片描述

在公网服务器执行netstat -antpul | grep 10001,看到信息就是正确
在这里插入图片描述
内网访问:192.168.0.1出现“你好,我是192.168.0.1”
公网访问:82.82.82.82:10001出现“你好,我是192.168.0.1”

原创不易,欢迎点赞收藏,转发请注明出处

你可能感兴趣的:(运维,linux,运维,服务器,docker)