由于现阶段IPv4地址的缺乏导致我们不能为每一台机器配上公网IP地址,我们与机器处于同一局域网下时可以很方便的远程,当我们更换网络环境时由于机器配的是私有IP地址导致我们无法正常远程机器,此时需要内网穿透来解决我们的问题,frp是目前我知道一个比较方便的内网穿透工具。
Frp(Link)是发布在Github上的一个项目,使用简单并且有中文文档,使用frp首先需要有一台在公网上的机器作为跳板,如果使用frp来访问内网的web服务则需要一个域名并将域名的A记录解析到对应公网机器的IP上,frp的具体工作模式如下图所示:
首先需要从frp项目的发布页面(Link)下载适合自己使用的版本,我的个人需求是远程处于公司或家里的Linux系统机器,Windows有很多远程工具例如Teamview故不在考虑范围之内,一般Linux系统运行在x86_64架构的机器上所以只需要下载frp_0.13.0_linux_amd64.tar.gz并解压即可(公网机器和内网机器均需要下载)。
使用SSH访问内网机器:
首先在公网机器上进入解压后的frp目录,使用命令vim frps.ini编辑服务端配置文件,内容如下:
[common] bind_port = 7000 #服务端需要打开的端口 dashboard_port = 7500 #控制面板所使用的端口 dashboard_user = xxxxxx #控制面板用户名 dashboard_pwd = xxxxxxxxxx #控制面板密码
此处打开了frp自带的dashboard,使用控制面板可以很清楚的查看在线或掉线的客户端,如果不需要控制面板只需保留前两行配置即可。保存退出后使用命令./frps -c ./frps.ini启动frp服务(一般会配合screen命令使frp一直运行在后台),服务端配置完成。
然后在处于内网环境的机器上进入解压后的frp目录,使用命令vim frpc.ini编辑客户端配置文件,内容如下:
[common] server_addr = xxx.xxx.xxx.xxx #服务端的公网IP地址 server_port = 7000 #服务端打开的端口 [ssh] #客户端ssh名称,此名称在不同客户端下不能重名 type = tcp #由于使用SSH访问内网机器此处填写tcp local_ip = 127.0.0.1 #本地IP,一般不会变 local_port = 22 #客户端ssh端口,内网环境一般22不变,如有变化根据实际情况填写 remote_port = 6000 #本地frp端口,用户服务端访问
保存退出后使用命令./frpc -c ./frpc.ini启动frp服务(一般会配合screen命令使frp一直运行在后台),服务端配置完成。
此时通过浏览器访问服务端IP:7500会提示输入用户名和密码,输入成功后浏览器web页面上点击Proxies > TCP即可出现如下页面,并显示客户端已经online(Name与Port根据客户端配置不同会有不同显示):
客户端上线后在服务端使用命令ssh -oPort=6000 root@localhost来远程客户端(此处用户名根据实际情况填写),提示输入密码时输入客户端用户名对应的密码即可,具体操作页面如下显示:
[root@xxx ~]# ssh -oPort=6000 root@localhost root@localhost's password: Last login: Sat Sep 23 15:24:15 2017 from localhost [root@jump ~]#
最后一行可以发现已经成功远程到客户端上,至此SSH访问内网机器完成。
访问部署于内网的web服务:
Frp不仅可以用户SSH内网穿透,也可用户访问内网的web服务,在原有服务端的配置 上加上http的端口配置即可,具体配置如下:
[common]
bind_port = 7000 #服务端需要打开的端口
dashboard_port = 7500 #控制面板所使用的端口
dashboard_user = xxxxxx #控制面板用户名
dashboard_pwd = xxxxxxxxxx #控制面板密码
#以下一行为新添加配置
vhost_http_port = 8080 #用于访问内网web服务的端口
保存退出后使用命令./frps -c ./frps.ini启动frp服务(一般会配合screen命令使frp一直运行在后台),服务端配置完成。
在需要访问的内网web服务器上解压进入到frp目录,使用命令vim frpc.ini编辑客户端配置文件,内容如下:
[common] server_addr = xxx.xxx.xxx.xxx #服务端的公网IP地址 server_port = 7000 #服务端打开的端口 [openstack] #内网web命名名称 type = http #访问内网web此处改为http local_port = 80 #本地web访问端口 custom_domains = xxxx.xxxxx.xxxxxx #服务端ip对应的域名
保存退出后使用命令./frpc -c ./frpc.ini启动frp服务(一般会配合screen命令使frp一直运行在后台),服务端配置完成。
此时通过浏览器访问服务端IP:7500会提示输入用户名和密码,输入成功后浏览器web页面上点击Proxies > HTTP即可出现如下页面,并显示客户端已经online(Name与Port根据客户端配置不同会有不同显示):
显示内网web客户端上线后访问服务端IP对应的域名(xxxx.xxxxx.xxxxxx:8080)即可访问位于内网的web服务,至此frp访问内网web服务完成。
更多新功能以后再介绍。
文章评论
学习了,不过配置有点晕,
在网上找到了一个开源的Holer配置一个Access key就可以外网访问了
https://github.com/Wisdom-Projects/holer
@Dong 也是刚开始写这些东西,项目在gitgub有配置说明的,写的肯定比我好!!!