与zerotier、tailscale等基于点对点的内网穿透的商业软件不同,FRP是在github上的一个开源项目,是服务器—客户端运行模式,可提供闭环的虚拟局域网环境。
项目地址:HTTPS://github.com/fatedier/frp
搭建FRP服务器端需要一台具有固定IP地址的主机、linux、windows或者macOX系统均可,openwrt路由器也可以,由于FRP是基于服务器—客户端运行模式,如果选用云计算主机搭建,尽量选择离自己最近的节点,这样可以尽可能地降低延迟;另外,FRP的运行模式决定了联网需要消耗服务器的流量,因此选择云计算主机时除了性能之外,还要注意流量是否能满足自己的需求。
我以甲骨文VPS为例,来搭建Linux系统下的服务器端,
新建一台1核CPU1G内存的服务器,系统ubuntu20.04LTS,
分配IP地址,
添加ipv6路由表,
添加网络安全列表,增加出入站规则,放行出入站流量,
测一下ping值,
用SSH客户端应用程序连接主机,
获取root权限
sudo -i
更新可安装软件包的列表
apt update
更新可升级软件包
apt upgrade
查看服务器防火墙状态,
ufw status
如果防火墙处于活动状态,需要执行以下步骤,
#添加服务器防火墙规则,放行你将要使用的端口,比如80、443、6001-6200、7000、7001、7500等等 ufw allow 80 #重启防火墙,让规则生效 ufw reload #查看端口是否放行, ufw status
VPS服务器设置完成,接下来开始搭建FRP服务器端,
输入命令
export FRP_VERSION=0.44.0 mkdir -p /usr/frp cd /usr/frp wget "https://github.com/fatedier/frp/releases/download/v${FRP_VERSION}/frp_${FRP_VERSION}_linux_amd64.tar.gz" tar xzvf frp_${FRP_VERSION}_linux_amd64.tar.gz mv frp_${FRP_VERSION}_linux_amd64/* /usr/frp
修改应用程序自带的服务器端配置文件,进入FRP的安装目录,
/usr/frp
找到frps.ini文件,点击鼠标右键,打开文件,
将以下服务器端配置文件内容复制粘贴替换原来的内容,
[common] bind_addr = 0.0.0.0 bind_port = 7000 bind_udp_port = 7001 vhost_http_port = 80 vhost_https_port = 443 dashboard_addr = 0.0.0.0 dashboard_port = 7500 dashboard_user = admin dashboard_pwd = password dashboard_TLS_mode = true dashboard_tls_cert_file = /etc/ssl/private/xueyizhan.tk.cer dashboard_tls_key_file = /etc/ssl/private/xueyizhan.tk.key #如果不用SSL证书,这三行代码可以用#注释掉 authentication_method = token token = 12345678 subdomain_host = xueyizhan.tk
点击“保存”,
保存成功,退出编辑文本,
使用systemd创建一个frps.service的系统服务,让frps可以开机自启,
在/etc/systemd/system目录下创建一个文件,命名为frps.service,
输入命令
vi /etc/systemd/system/frps.service
将配置文件的内容复制粘贴到新创建的frps.service文件中,
[Unit] Description=Frp Server Service After.NETwork.target [Service] Type=simple User=root Restart=on-failure RestartSec=5s ExecStart=/usr/frp/frps -c /usr/frp/frps.ini [Install] WantedBy=multi-user.target
按Esc键,推出编辑状态,
输入命令
:wq
保存文件,
进入/etc/system/system目录,并刷新,显示frps.service,说明创建成功。
登录阿里云将域名解析到服务器的IP地址,
上传SSL证书到服务器配置文件指定的目录中,
如何申请免费的SSL证书,请参考我的另一篇教程《申请免费支持多域名的通配符SSL证书并自动续期的保姆级教程》
由于不是root登录,虽然获得了root权限,也无权直接上传到/etc/ssl/private目录,先上传到/tmp目录,
再用命令移动到/etc/ssl/private目录,
mv /tmp/xueyizhan.* /etc/ssl/private/
没有报错,说明移动成功,
设为开启自启,
systemctl enable frps
启动frps,
systemctl start frps
查看frps运行状态,
systemctl status frps
运行正常,
systemd配置的frps系统服务命令如下:
#启用服务,实现开机自启 systemctl enable frps #启动服务 systemctl start frps #服务状态 systemctl status frps #停止服务 systemctl stop frps #禁用服务 systemctl disable frps #重启服务 systemctl restart frps
登录网页端,查看运行情况,
https://www.xueyizhan.tk:7500
输入在frps配置文件中设置的用户名“admin”和密码“password”,
生产力环境,建议还是使用TLS连接,以确保安全,
至此,Linux系统下FRP服务器端搭建配置完成。
接下来再介绍如何在Windows系统下搭建配置FRP服务器端,
首先下载相应版本,我的windows是intel芯片64位,要下载amd64版本,
下载链接:https://github.com/fatedier/frp/releases/download/v0.44.0/frp_0.44.0_windows_amd64.zip
解压到安装目录,
用记事本编辑配置文件,
将服务器端配置文件粘贴到文件中替换原来的内容,
[common] bind_addr = 0.0.0.0 bind_port = 17000 bind_udp_port = 17001 vhost_http_port = 80 vhost_https_port = 443 dashboard_addr = 0.0.0.0 dashboard_port = 7500 dashboard_user = admin dashboard_pwd = password dashboard_tls_mode = true dashboard_tls_cert_file = C:Program Filesfrp_0.44.0_windows_amd64xueyizhan.tk.cer dashboard_tls_key_file = C:Program Filesfrp_0.44.0_windows_amd64xueyizhan.tk.key #如果不用SSL证书,这三行代码可以用#注释掉 authentication_method = token token = 12345678 subdomain_host = xueyizhan.tk
由于我的windows系统7000端口已经占用,监听端口改为17000/17001
注意一点,Program Files有权限问题,需要先保存到其他目录,再复制粘贴替代原来的文件,
上传SSL证书到配置文件指定的目录,
打开CMD终端,进入FRP安装目录,
输入启动命令,
frps -c frps.ini
允许程序通过防火墙,
启动成功,
但是黑窗口要开启状态,不能关闭,一旦关闭,进程就结束了。
接下来解决这种黑窗口模式运行,将程序注册为系统服务,让程序在后台运行,并且实现开机自启,
首先去下载一个软件SrvanyUI,这是一个Windows系统下可以自建用户服务的小程序,软件作者的博客地址:
https://wangye.org/blog/archives/644/
下载后解压到C盘,
双击srvanyui运行,
点击左上角“+”添加,
选择自建服务,并依次填写,完成后点击“确定”,
服务名称:Frp Server Service 内部标识:frps 服务描述:FRP是高性能反向代理应用,是一款内网穿透工具来让外网与内网建立起连接,实现无公网 IP 的远程访问。 程序路径:点击“浏览”,找到FRP安装目录,选择frps.exe执行文件,点击“打开” 启动参数:-c frps.ini 启动方式:自动(保持默认)
点击“确定”,启动服务,
打开windows服务,可以看到frps已经注册为系统服务,可以通过面板来实现程序的启动、停止和重启等。
启动后,登录面板,运行正常(将windows服务器端解析到frp.xueyizhan.tk来演示)。
接下来设置客户端,
最理想的选择是一个客户端主机将局域网内所有需要联网的设备全部接入,这需要主机7x24小时正常运转,装有openwrt系统的路由器是最佳选择,
用SSH客户端应用程序连接openwrt路由器,首先更新软件包列表,
输入命令
opkg update
安装frpc和luci-App-frpc,
输入命令
opkg install frpc luci-app-frpc
安装成功,
你也可以通过openwrt路由器的后台管理界面来安装FRP,
登录路由器管理后台,在左侧菜单选择“系统”>>“软件包”,在“筛选器”对话框中输入“frpc”搜索,
安装“frpc”和“luci-app-frpc”两个软件包,
安装安装后刷新路由器后台管理界面,在左侧菜单“服务”中会出现“Frp内网穿透”选项,这是FRP的luci管理界面,可以通过可视化界面来配置FRP客户端,
根据你的FRPS配置文件的设置,在配置界面依次输入,
勾选“启用” 服务器:www.xueyizhan.tk 或者 144.24.78.59 端口:7000 令牌:12345678 用户名:留空即可 HTTP穿透服务端口:80 HTTPS穿透服务端口:443 服务注册间隔:40(保持默认或者留空均可)
其他设置保持默认即可,
设置完成后,点击“保存并应用”,设置生效后,点击上方菜单“日志”查看运行状况,与服务器的连接正常,但是没有客户端在运行,
接下来根据你自己的需要添加客户端,回到“基本设置”界面,点击“新增”,
在新打开的设置界面中,选择“启用”,
根据自己的情况选择连接协议,如果主机上配置了SSL证书,HTTPS协议是首选,
我们在FRPS的配置文件里已经设置了域名,这是我们就可以选在“子域名”或者“同时使用2中域名”,如果在配置文件中没有设置域名,自能选择“自定义域名”,
在“子域名”输入要解析的主机名,
选择要穿透的主机内网地址,并输入端口号,如果是HTTP协议,对应的是80端口,
最后输入“服务备注名”,这个不可重复,完成后点击“保存并应用”,让配置生效。
返回frpc配置界面后,会发现“服务列表”出现了刚刚配置的主机,
到日志界面查看运行情况,运行正常,
这还没有完成全部配置,还需要登录阿里云增加相应的DNS解析记录,
这里有一个小技巧,添加解析记录时增加别名(CNAME)记录类型,来代替主机(A)记录类型,这样如果你将来更换服务器IP地址时只更新服务器的主机记录,而不用更新所有记录,
等一会儿,解析生效后就可以用域名来访问路由器管理后台了,
回到路由器管理后台界面,再添加其他的主机穿透,
SSH主机穿透,内网主机默认端口是22,
测试一下,新建一个SSH连接,
连接成功,
微软远程桌面连接这样配置,内网主机默认端口是3389,
测试一下,新建一个RDP连接,
连接成功,
同时使用2种域名这样配置,别忘了添加相应的解析记录,
你可以按照以上步骤和方法将局域网内所有需要做内网穿透的主机全部配置在openwrt路由器上,这样就不用每一台主机都分别安装FRP客户端程序,并且openwrt完全可以实现7x24小时开机,不用担心哪个客户端掉线。所以说,openwrt路由器是最理想的FRP客户端选择。
FRP的软件包同时包含了服务器和客户端应用程序,因此如果使用windows或者linux搭建FRP客户端,搭建配置过程与FRP服务器端完全相同,搭建过程可以参考FRP服务器端的搭建步骤,只是将配置文件和启动程序替换成FRP客户端的就可以,就不再一一演示搭建过程,只分享一下配置文件的模板,供大家搭建时使用,
FRP客户端,Linux、Windows系统下配置文件都是frpc.ini,没有区别,模板如下,
[common] server_addr = 144.24.78.59 server_port = 7000 token = 12345678 #需要加上log文件的路径 log_file = frpc.log # trace, debug, info, warn, error log_level = info log_max_days = 3 #如果只设置主机自身的穿透服务,local_ip = 127.0.0.1 [router] type = http local_ip = 192.168.10.2 local_port = 80 subdomain = router [ssh_router] type = tcp local_ip = 192.168.10.2 local_port = 22 remote_port = 6002 [rd_e93z] type = tcp local_ip = 192.168.10.30 local_port = 3389 remote_port = 6030 [opwt] type = https local_ip = 192.168.10.1 local_port = 443 subdomain = opwt custom_domains = opwt.sample.org
Linux系统使用systemd配置系统服务,让frpc可以开机自启的配置文件模板,
[Unit] Description=Frp Client Service After=network.target [Service] Type=simple User=root Restart=on-failure RestartSec=5s ExecStart=/usr/frp/frpc -c /usr/frp/frpc.ini [Install] WantedBy=multi-user.target
systemd配置的frpc系统服务的命令,
#启用服务,实现开机自启 systemctl enable frpc #启动服务 systemctl start frpc #服务状态 systemctl status frpc #停止服务 systemctl stop frpc #禁用服务 systemctl disable frpc #重启服务 systemctl restart frpc
Windows系统使用SrvanyUI将frpc注册为用户服务,让frpc实现开机自启的模板文件,
服务名称:Frp Client Service 内部标识:frpc 服务描述:FRP是高性能反向代理应用,是一款内网穿透工具来让外网与内网建立起连接,实现无公网 IP 的远程访问。 程序路径:点击“浏览”,找到FRP安装目录,选择frpc.exe执行文件,点击“打开” 启动参数:-c frpc.ini 启动方式:自动(保持默认)
这期有关FRP内网穿透应用搭建与配置的教程就分享到这里了,如果教程对你有用,欢迎关注学驿站,可以学习更多的电脑、网络和数码使用技巧。