您当前的位置:首页 > 电脑百科 > 网络技术 > 网络技术

记一次使用 frp 完成实现服务器内网穿透全过程

时间:2020-09-04 10:37:32  来源:  作者:

写在前面

因之前内网穿透一直使用的 ngrok,使用的 ngrok 1.x 版本的最新 1.7.1,而1.7.1有严重的内存泄露问题,再加上 1.x 早已不在维护,ngrok 2.x 后已经不再开源,所以考虑换一个内网穿透工具。

原文首发地址 https://github.com/liuvigongzuoshi/summarize-web-resources/blob/master/operation/frp.md

参考:Go语言中文文档:www.topgoer.com

一、业务场景

装备情况如下:

  • 一台阿里云服务器(windows Server 2012)、公网IP。
  • 三台内网服务器,其中两台 Windows Server,一台 centos
  • 一个一级域名,已解析到公网IP。

需求:通过域名或IP可访问三台内网部署的 http 服务、通过域名或IP可通信三台内网的远程桌面或 SSH

二、为什么选择 frp

  • 开源,维护频繁。
  • 支持 TCP、UDP、HTTP、HTTPS、STCP 等协议。
  • GoLang开发占用内存小,代理稳定。
  • 配置简单方便,自定义插件化配置以及可开发自己业务需求的插件。
  • 提供安全地暴露内网服务、加密与压缩、底层通信可选 kcp 协议、端口复用、负载均衡、健康检查、URL 路由、范围端口映射、请求的 header处理等众多功能。
记一次使用 frp 完成内网服务器实现穿透全过程

 

image

初次之前还可通过浏览器查看 frp 的状态以及代理统计信息展示,代理服务器上面,可在浏览器里面访问的各代理状态的可视化仪表盘。

记一次使用 frp 完成内网服务器实现穿透全过程

 

image

内网穿透服务器上提供可查看各穿透状态、动态在线配置、热更新配置功能。

记一次使用 frp 完成内网服务器实现穿透全过程

 

image

三、服务端配置

1. 开放云服务器的端口

登录阿里云服务平台,进入实例安全组,开放穿透代理需要的端口,先开放端口如下:

  • 开放TCP端口,7000至7010端口,7000端口是 frp服务端代理通信的默认端口,7001至7010端口可代理内网服务器的TCP应用程序的端口,如果不够使用可将端口继续延长。
  • 开放TCP端口,7080与7443端口,方便进行 HTTP 与HTTPS代理,因云服务器80与443端口已经被其他应用程序占用,取名后缀80与443方便记忆维护。
  • 开放UDP端口,开放7001端口,如果有需要提供点对点内网穿透可开启。

以上端口开启不是指定,可自定义灵活配置。

2. 下载frp

进入 frp 的 GitHub releases 地址,查看最新版,上面已提供各常用操作系统架构编译过的的包,下载对应云服务器系统的版本。

你也可以下载源码,安装GoLang环境进行自己编译。

记一次使用 frp 完成内网服务器实现穿透全过程

 

image

3. 配置frps

下载完成后,解压打开文件夹,找到 frps.ini 文件进行配置服务端代理规则,frpc 开头的文件代理服务器上面不会用,在配置内网的服务器上面会用到。

将 frps.ini 配置基本内容如下:

[common]
# 设置地址及通信端口
bind_addr = 0.0.0.0
bind_port = 7000
# 设置默认的UDP端口
bind_udp_port = 7001
# 监听7080与7443端口,进行 HTTP 与 HTTPS 代理,HTTP 与 HTTPS 端口可以成设置一样
vhost_http_port = 7080
vhost_https_port = 7443
# 设置查看仪表板服务地址及端口,dashboard_addr 不设置,默认与 bind_addr 一样,如果不设置 dashboard_port 端口不会开启这个服务
dashboard_addr = 0.0.0.0
dashboard_port = 7500
# 设置仪表盘服务的登录的账号与密码,如果不设置就默认都是 admin
dashboard_user = admin
dashboard_pwd = admin
# 设置云服务器的域名,方便简单的配置代理出去的服务可以通过子域名的方式访问
subdomain_host = example.com
# 设置Token, 尽量配置复杂些,配置 frpc 会用到
token = 123456789
# 设置日志文件记录路径
log_file = ./logs/frps.log
# 设置日志记录级别,分别有trace, debug, info, warn, error
log_level = info
# 设置日志记录最大天数
log_max_days = 1

4. 启动 frps

启动frps的服务很简单,输入如下命令,代理服务端就已经启动起来了。

./frps -c ./frps.ini

5. 将 frps 配置成系统服务

如果服务器是 Windows系统推荐使用 winsw 工具将 frps 配置成系统服务。

  • 下载 WinSW.exe or WinSW.zip,更改 WinSW.exe 名称为 frps-service.exe
  • 编写 frps-service.xml 配置文件<service> <id>frps</id> <name>frps</name> <description>frps</description> <logmode>roll</logmode> <depend></depend> <executable>path/frps.exe</executable> <arguments>-c frps.ini</arguments> </service>
  • 安装 frps 到系统服务中 frps-service install
  • 启动服务 frps-service start

如果服务器是 linux 系统,在下载frp解压目录的 systemd 目录下面已经有提供将 frps 配置成系统服务的文件。

四、客户端配置

1. 下载frp

进入 frp 的 GitHub releases 地址,查看已经编译好的最新版,下载对应代理器系统的版本。

2. 配置frpc

下载完成后,解压打开文件夹,找到 frpc.ini 文件进行配置服务端代理规则,同理 frps 开头的文件在内网服务器上面不会用到。

将 frpc.ini 配置基本内容如下:

[common]
# 云服务器的IP地址及 frps 里面设置的通信端口server_addr = x.x.x.xserver_port = 7000
# 授权 token 与 frps 配置的一样token = 123456789
# 设置日志文件记录路径log_file = ./logs/frps.log
# 设置日志记录级别,分别有trace, debug, info, warn, error
log_level = info# 设置日志记录最大天数log_max_days = 1
# 设置可在浏览器里面配置热更新的服务admin_addr = 127.0.0.1
admin_port = 7400
admin_user = adminadmin_pwd = admin# tcp 范围 7001-7010
# RDP,即Remote Desktop 远程桌面,Windows的RDP默认端口是3389,协议为TCP
[rdp]type = tcp
local_ip = 127.0.0.1           
local_port = 3389
remote_port = 7001
subdomain = rdp# SMB,即Windows文件共享所使用的协议,默认端口号445,协议TCP,本条规则可实现远程文件访问。
#[smb]#type = tcp
#local_ip = 127.0.0.1
#local_port = 445
#remote_port = 7002
# 代理本机 SSH#[ssh]#type = tcp
#local_ip = 127.0.0.1
#local_port = 22
#remote_port = 7003
# 设置本地端口80 HTTP 服务的代理
# 可通过 frps 里面配置的 subdomain_host 域名# 访问 test.example.com 加 HTTP 代理端口,即 http://test.example.com:7080
[web_test]type = http
local_port = 80
subdomain = test

4. 启动 frpc

启动frpc的服务与frps 类似。

./frpc -c ./frpc.ini

结下来就可以访问测试你穿透的远程连接、SSH、web服务等。

5. 将 frpc 配置成系统服务

这里不再赘述,与配置将 frps 配置成系统服务类似。

四、HTTPS 配置

将内网穿透的 HTTP 服务配置成 HTTPS 主要有两种方法:

  1. 通过 frpc 的 https2http 插件将本地 HTTP 服务启用 HTTPS,通过这种方式比较方便简单对需要 HTTPS 的服务进行可控性的配置,但如果各个内外服务器需要 HTTPS 穿透的服务很多的话,就需要给每一个穿透服务生成并配置一个证书,这样就比较繁琐了。
  2. 通过生成泛域名证书,在外网服务器上面进行配置 Nginx ,将内网穿透出来的 Web 服务进行代理转发。

这里主要介绍第二种方式进行 HTTPS 配置

1. 生成泛域名证书

2. 配置 Nginx

3. 证书更新

参考资料

  • frp 使用文档


Tags:frp 内网穿透   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
写在前面因之前内网穿透一直使用的 ngrok,使用的 ngrok 1.x 版本的最新 1.7.1,而1.7.1有严重的内存泄露问题,再加上 1.x 早已不在维护,ngrok 2.x 后已经不再开源,所以考虑换一个...【详细内容】
2020-09-04  Tags: frp 内网穿透  点击:(87)  评论:(0)  加入收藏
▌简易百科推荐
写一个shell获取本机ip地址、网关地址以及dns信息。经常会遇到取本机ip、网关、dns地址,windows一个命令ipconfig /all全部获取到,但linux系统却并非如此。linux系统都自带ifc...【详细内容】
2021-12-27  K佬食古    Tags:shell   点击:(1)  评论:(0)  加入收藏
步骤1、配置 /etc/sysconfig/network-scripts/ifcfg-eth0 里的文件。it动力的CentOS下的ifcfg-eth0的配置详情:[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifc...【详细内容】
2021-12-24  忆梦如风    Tags:网卡   点击:(9)  评论:(0)  加入收藏
1、查找当前目录下所有以.tar结尾的文件然后移动到指定目录find . -name “*.tar” -execmv {}./backup/ ;注解:find &ndash;name 主要用于查找某个文件名字,-exec 、xargs可...【详细内容】
2021-12-17  郭主任    Tags:运维   点击:(18)  评论:(0)  加入收藏
对于经常上网的朋友来说,除了手机购物上网,pc端玩网页游戏还是很多小伙伴首选的,但是有时候明明宽带链接上了,打开浏览器却出现上不了网的现象,下面小编要来跟大家说说电脑有网络...【详细内容】
2021-12-16  小白系统    Tags:网页无法打开   点击:(28)  评论:(0)  加入收藏
在访问像github、gitlab这样的外国网站时,很有可能会出现页面加载不出来或找不到页面的错误。这时候有的朋友就会以为是网络的问题,于是把Wifi断掉连上自己手机的热点,结果却还...【详细内容】
2021-12-15  启施技术IT狼叔    Tags:外网   点击:(14)  评论:(0)  加入收藏
网络地址来源:获取公网IP地址 https://ipip.yy.com/get_ip_info.phphttp://pv.sohu.com/cityjson?ie=utf-8http://www.ip168.com/json.do?view=myipaddress...【详细内容】
2021-12-15  韦廷华12    Tags:外网ip   点击:(14)  评论:(0)  加入收藏
准备好软件IPOP、用ENSP模拟一下华为交换机 启动交换机 <Huawei>sysEnter system view, return user view with Ctrl+Z.[Huawei]sysname FTPClient[FTPClient]interface vla...【详细内容】
2021-12-15  思源Edward    Tags:交换机   点击:(22)  评论:(0)  加入收藏
我们经常用到netstat命令查看主机连接状况,包括连接ip、端口、状态等,今天就练习下shell分析netsat结果。描述假设netstat命令运行的结果我们存储在nowcoder.txt里,格式如下:Pro...【详细内容】
2021-12-14  K佬食古    Tags:netstat   点击:(19)  评论:(0)  加入收藏
什么是滑动窗口?窗口是操作系统开辟的一块缓存空间,发送方在收到接收方ACK应答之前,必须在缓冲区保留已发送的数据,如果按期收到确认应答,数据就可以从缓冲区移除。什么是滑动窗...【详细内容】
2021-12-14  DifferentJava    Tags:TCP   点击:(28)  评论:(0)  加入收藏
概述日常管理华为路由设备过程中,难为会忘记设备登录密码,那么该如何重置设备登录密码吗?本期文章将全面向各位小伙伴总结分享。重置华为设备登录密码思路先行 采用console登录...【详细内容】
2021-12-10  onme0    Tags:   点击:(26)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条