前言

之前工作中搭建过远程跳板机,就是通过一台阿里云虚机,通过他的公网地址指定端口号来访问公司内部的环境,可以进行直接登录,最近换了一个工作环境他们也是通过阿里云虚机来实现远程访问,实现方法和我使用的不同,所以记录下。

一、介绍

远程跳板机搭建使用的场景就是本身环境是没有外部网络的或者是因为安全原因不能直接连接外网,那么我们就可以拿出一台服务器或者笔记本,它可以登录内部的环境然后配置上外网,然后准备一台外网的虚机,开放虚机的端口【10022】将外网虚机和本地的服务器进行网络设置,这样我们就可以通过虚机IP:10022直接登录到内部的机器上了。

实现方法现在是三种:

  • 通过ssh命令实现反向地址解析,通过一条命令就可以实现;
  • 也是通过ssh的命令来进行实现;
  • 通过frp服务来实现;

环境准备:

我使用的本地就是自己的一台虚机,然后通过青云买了一台外网的ECS虚机,

RoleOSIP
本地机器centos7.6192.168.144.10
青云RCS虚机centos7.6139.198.9.32

接着打开青云虚机的端口(打开10022-10024端口)
在这里插入图片描述

二、实现方法

方法一:

第一种方法只需要在本地的机器上执行就好,外网的虚拟机需要打开端口10022然后允许访问就好了,说白了就是创建一个秘钥然后执行一条命令的事情,这样我们就可以通过虚机IP:10022来访问到本地的机器了。

首先在虚机上将端口打开,【环境配置】

接着在本地机器上创建一个密钥对,

ssh-keygen 
ll ~/.ssh/id_rsa
ll ~/.ssh/id_rsa.pub

在这里插入图片描述

接着将生成秘钥的公钥复制放到外网虚机的主机解析文件中

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD6Mtst3k/6qdkIkpMeTqe106SZJ08AUDnNNHc8hKVETY9OIDr/ktYg4hid7O5JM6zWjn5v6jg8OkLjhsIegkbc0hcQTsoJZzC358hP365YhqHfutT09P6CSnsov2jhu7KtNZPBoOh2z0KxI3w9aBNXhoj7bcgpjAA8e3nS7q7TPPkPBK2yQHnjlfBXbdWDuGIRrb9c+5G4oso2/k8jd+QyDGHP55GcKQOkJSaGudeY28UnzDJwOULVpMi//vEsmUwYa21FLiDpvDPcQZ0N8DTSHM+Yf07d+HtMuILNdEPC8AaC0mQWHZ/OgOc0/ZMt7jqiOhoRgCbbGsIK/2q0I+9x root@vlinx144010.com

在这里插入图片描述

ll ~/.ssh/authorized_keys 
vim ~/.ssh/authorized_keys
cat ~/.ssh/authorized_keys

在这里插入图片描述

接着还是在外网虚机上对ssh服务进行一定的配置

vim /etc/ssh/sshd_config 

#GatewayPorts no
GatewayPorts yes

systemctl restart sshd

在这里插入图片描述
在这里插入图片描述

接着回到本地的机器上执行命令

ssh -qTfnN -R 10022:192.168.144.10:22 -i ~/.ssh/id_rsa -o PreferredAuthentications=publickey -oServerAliveInterval=60 root@139.198.9.32

-R 10022端口是外网虚机开放的端口,我们访问的时候也会用到;192.168.144.10的ip是本地的地址

root@139.198.9.32 这是我们外网虚机的公网地址

在这里插入图片描述
接着我们可以通过xshell创建session指定ip地址是外网虚机的+端口是我们指定的10022
在这里插入图片描述

这时候发现无法连接了,这就尴尬了,外网虚机上放通端口的时候是10022-10024,

在这里插入图片描述

我可以在添加一个命令将10023加上去

ssh -qTfnN -R 10023:192.168.144.10:22 -i ~/.ssh/id_rsa -o PreferredAuthentications=publickey -oServerAliveInterval=60 root@139.198.9.32

在这里插入图片描述
修改下shell中session的端口号

在这里插入图片描述
这时候在连接就没问题的,直接就登录到我本地的机器上了,

在这里插入图片描述

总结:

  • 这种方式优点,配置简单,一个秘钥一条命令就可以从外网通过端口来访问本地的机器了。
  • 缺点就是对网络依赖大,如果本地的网络中断那么你外面访问也会中断,还有就是访问次数的限制,如果访问的人数多也会导致连接出问题。

方法二:

方法二安装的过程比方法一更加简单只需要安装一个autossh软件就可以了,然后通过执行命令指定之后就可以进行连接了,

首先还是外网虚机需要放通10022端口【环境配置】

接着本地服务器上安装软件

yum search autossh
yum install -y authssh

在这里插入图片描述

接着执行命令

autossh -M 12345  -TfN -R  10022:192.168.144.10:22 root@139.198.9.32

在这里插入图片描述

参数解释:

​ -M 12345 ,-M后面指定的是端口,监控这个连接如果断了会进行重新连接

​ -f ,后台执行ssh指令

​ -C,允许压缩数据

​ -N,不执行远程指令

​ -R,将外网虚机的端口转发到本地的端口

​ -L,将本地机器的某个端口转发到远端机器的端口

​ -p,指定远程主机的端口

这时候我们通过shell创建session来连接就可以到本地的机器了
在这里插入图片描述
在这里插入图片描述

总结:

  • 这种方式优点还是配置简单,安装一个软件,执行一个命令,就可以成立;
  • 缺点话通过命令指定,如果网络波动或者是访问用户过多都会影响访问的质量;

方法三:【推荐】

方法三是通过两个软件来实现的xinetd来开放端口,接着frpc来实现链路的创建

frpc官方文档

参考文档

1、介绍

frp是一个专注于内网穿透的高性能的反向代理应用,支持TCP、UDP、HTTP、HTTPS的多种协议。可以将内网服务以安全、便捷的方式通过具有公网IP节点的中转暴露到公网。

frp = 【服务端】frps放到外网主机+ 【客户端】frpc放到内网主机,服务器端就是外网主机一般都是具有公网IP的机器上,客户端通常部署在需要穿透的内网服务器上面。

内网由于没有公网IP所以不能被非局域网的其他用户访问,用户需要通过访问frps,由frp将请求的端口或者其他信息将请求的路由到对应的内网机器上去,从而实现通信。

2、环境描述

​ 准备两台机器,一台是青云创建的虚机 + 一台是本地Vmware创建的虚机,

​ ——》青云的机器就是带着外网的虚机作为【服务端】安装【frps】

​ ——》本地的Vmware虚机就是作为公司内部环境的服务器或者是跳板机

3、下载软件
  • 可以直接登录到GitHub上面下载

    PS:到页面上可以看到不同的版本的软件,freebsd的、Linux的、arm架构的、windows的、源码的,根据自己的环境来进行选择

  • 直接通过wget下载:

wget https://github.com/fatedier/frp/releases/download/v0.34.3/frp_0.34.3_linux_amd64.tar.gz 
4、服务端frps

4.1、查看下载的压缩包,有8.2M还可以不是太大
在这里插入图片描述
4.2、解压tar包然后进入编辑配置文件

注意,确定要编辑的是frps还是frpc,这两个配置文件都是在一起的,——》我这是服务端那就是frps.ini

tar -xf frp_0.34.3_linux_amd64.tar.gz 
cd frp_0.34.3_linux_amd64/
vim frps.ini 

在这里插入图片描述
4.3、配置server端内容

[common]
#frp监听端口,默认时7000,可以修改,这里修改了在frpc.ini中也是要修改的,
bind_port = 7000
#授权码,就是frps和frpc进行验证的内容,两个配置文件必须编写相同,如果是生产环境复杂点,我这随便
token = 12345678

#frp管理后台端口,根据自己需求修改;frp提供了一个web页面我们可以通过公网IP:7500来进行访问,可以改可不改
dashboard_port = 7500

#frp管理后台用户名和密码,就是登陆管理后台的方式,生产环境修改的复杂点,我这随便
dashboard_user = admin
dashboard_pwd = admin
enable_promethes = true

#frp日志的配置(位置、级别、最大存放时间)
log_file = /var/log/frps.log
log_level = info
log_max_days = 3

4.4、设置和启动frp服务

#创建frp服务家目录
mkdir -p /etc/frp
#将主配置文件、执行文件、启动文件复制到指定位置,这里或者使用ln -s做成软连接也是可以的
cp /root/frp_0.34.3_linux_amd64/frps.ini /etc/frp
cp /root/frp_0.34.3_linux_amd64/frps /usr/bin/
cp /root/frp_0.34.3_linux_amd64/systemd/frps.service /usr/lib/systemd/system/
#启动服务查看状态
systemctl enable --now frps
systemctl status frps

在这里插入图片描述

4.5、防火墙设置

如果系统开启防火墙的话需要将后台管理的端口放开,但是我使用的青云的虚机,直接在安全组中配置就好了,操作系统中不用对防火墙进行操作

在这里插入图片描述

4.6、青云虚机打开对应的端口

在这里插入图片描述

这时候在本地通过公网IP:7500登录页面,输入frps.ini配置文件中设置的用户名密码就可以看到frp的后台管理页面了,

http://139.198.9.32:7500

在这里插入图片描述

我们现在只配置服务端所以啥都没得,
在这里插入图片描述

5、客户端ftpc

5.1、上传frp的压缩包

我们可以下载好了通过xshell上传或者是通过wget下载

wget https://github.com/fatedier/frp/releases/download/v0.34.3/frp_0.34.3_linux_amd64.tar.gz

在这里插入图片描述
5.2、解压tar包然后进入编辑配置文件

tar -xf frp_0.34.3_linux_amd64.tar.gz 
cd frp_0.34.3_linux_amd64/
vim frpc.ini 

在这里插入图片描述

5.3、配置client端内容

[common]
#服务端配置(公网IP地址、服务端监听端口号、授权码),和服务端对应
server_addr = 139.198.9.32
server_port = 7000
token = 12345678

#配置ssh服务,就是远程连接用的还是ssh服务
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 10022		#这个端口是我们青云虚机上放通的端口

#配置http服务,可以用于小程序开发、远程调试,我现在是内网穿透,没啥用
[web]
type = http
local_ip = 127.0.0.1
local_prot = 8080
subdomain = test.hi.jk.pw
remote_port = 10023

在这里插入图片描述

5.4、防火墙
如果系统开启了防火墙那么就需要将配置文件中的端口进行放通,我这里防火墙是关闭的,不用设置

在这里插入图片描述

6、连接

在客户端的frpc启动之后可以到frps的页面上查看下,已经多了一个我们设置的端口了,

在这里插入图片描述

在xshell上创建session进行连接

在这里插入图片描述

这时候可以正常登录就没有问题了
在这里插入图片描述

7、扩展——多ssh

内网穿透就是为了让我们可以通过一个对外的IP来访问公司内网的环境,使用远程的连接方式不止一套环境或者是不止一个主机,这种情况下怎么办?——》首先在服务端,暴露更多的端口;然后在客户端的frpc.ini中编写更多的【ssh】就可以了。

PS:【ssh】中括号中的内容可以自己写,随便写,按照自己的环境名来进行编写。

[vlinx144010]
type = tcp
local_ip = 192.168.144.10
local_port = 22
remote_port = 10023			#外网主机打开的端口

在这里插入图片描述
修改配置文件重启下服务

systemctl restart frpc.service 

在这里插入图片描述

我们可以在frp的dashboard上面进行查看就发现多了一个,这里显示的name和我们配置的相同,

在这里插入图片描述

总结:

​ 通过frp软件实现内网穿透的方式,和上面两种比起来的话配置还是多了很多的,但是运行起来的话还是比一个命令安全、稳定很多的,好歹是一个应用程序,而且frp方式多端口的时候只需要修改配置文件重启服务生效就可以了,如果是上面的方法那就是需要一个端口对应执行一条命令,命令的执行还是不太稳定的,如果开放的端口量级比较大,十个、二十个的时候,还是frp这种修改配置文件的方式方便些。

Logo

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

更多推荐