工具介绍
Frp是一款可以通过公网服务器将内网服务的端口通过TCP、UDP、HTTP、HTTPS 等协议映射到公网服务器端口的程序,且支持P2P传输协议(服务端与服务端之间直接进行数据交换)
下载Frp
在公网服务器端和内网服务端分别下载对应的压缩包。
Frp程序下载地址:https://github.com/fatedier/frp
例:Ubuntu20.04_amd64系统(公网服务器端)可以通过下列命令来下载及解压压缩包
下载Frp文件压缩包
wget https://github.com/fatedier/frp/releases/download/v0.61.1/frp_0.61.1_linux_amd64.tar.gz
解压Frp文件压缩包
tar -zxvf frp_0.61.1_linux_amd64.tar.gz
Windows11_X64系统(内网服务端)可以之间通过浏览器打开链接(https://github.com/fatedier/frp)点击Release,界面跳转后点击frp_0.61.1_windows_amd64.zip文件进行下载。
注:公网服务器端与内网服务端的软件版本号需要一样,这里的版本号为0.61.1。
配置公网服务器端
程序文件配置
使用cd命令来进入到解压好的Frp文件目录下。
cd frp //文件夹名称根据实际情况而定
进入到Frp文件夹下
服务端主要用到frps和frps.toml这两个文件。
使用vim编辑器来配置frps.toml中的信息。
vim frps.toml
vim编辑器打开文件后需要点击键盘上的字母“i”来进入编辑模式,否则为观察模式无法对文件进行修改。
[common]
# server_addr为FRPS服务器IP地址
server_addr = XXX.XXX.XXX.XXX
# server_port为服务端监听端口
server_port = 7000
# 身份验证
token = XXXXXXXX
server_addr后面的XXX.XXX.XXX.XXX更换为公网服务器的公网ip地址;token(相当于与密码)后面的XXXXXXXX换为自己填写的密码。
配置frps.toml文件
完成上述操作后,通过点击键盘上的“Esc”键退出vim的编辑模式,在同时点击“Shift”+“;”,在下方输入框中输入“wq”按“Enter”键保存并退出。
运行程序
执行下列命令来启动Frps服务(该启动方式建议仅作为测试使用)
./frps -c ./frps.toml
注:如果退出运行界面则会停止Frps服务,建议配置程序启动服务
设置程序启动
对于Linux(Ubuntu)端,我们可以使用systemd来配置程序的启动/停止/重启,另外systemd也可以配置程序开机自启动。
我们需要在system文件夹配置frps.service文件来设置启动。
cd /etc/systemd/system //进入system文件夹
touch frps.service //创建frps.service文件
vim frps.servics //编辑frps.service文件
将下列配置粘贴到frps.service文件中。
[Ubit]
Description = frp server
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
ExecStart = /path/to/frps -c /path/to/frps.toml
[Install]
WantedBy = multi-user.target
注:将ExecStart路径修改为frps和frps.toml的所在路径。
完成上述操作后,通过点击键盘上的“Esc”键退出vim的编辑模式,在同时点击“Shift”+“;”,在下方输入框中输入“wq”按“Enter”键保存并退出。
最后执行下面的命令启动程序。
systemctl start frps //启动frps.service服务
systemd其他常用命令。
systemctl stop frps //停止fprs.servics服务
systemctl restart frps //重启fprs.servics服务
systemctl enable frps //设置fprs.servics服务开机自启动
配置内网服务端
程序文件配置
打开frpc.toml文件,将下列配置信息粘贴到文件中。
[common]
# server_addr为FRPS服务器IP地址
server_addr = XXX.XXX.XXX.XXX
# server_port为服务端监听端口
server_port = 7000
# 身份验证
token = XXXXXXXX
server_addr和token信息与上面frps.toml的相同。
这样公网服务端和内网服务端就连接成功,下面还需要配置需要映射的端口。
[example]
type = tcp //传输协议
local_ip = 127.0.0.1 //本地ip地址
local_port = 80 //本地端口
remote_port = 180 //映射端口
配置frpc.toml文件
运行程序
在Frp文件夹上方路径位置输入cmd,以命令行形式打开。输入下列命令运行程序。
./frpc -c ./frpc.toml
个人应用场景
我个人拥有两台阿里云轻量服务器(一台位于杭州、一台位于东京)、另外有一台Ubuntu arm64系统的本地开发板(Orange pi4)和一台位于老家的飞牛NAS(使用Hp Z230SFF工作站+低功耗CPU)。
注:Orange pi4作为主要的Nginx、Docker、Wordpress和Gitea的服务端
两台阿里云服务器当作两个节点分别配置了frps服务端,Orange pi4和飞牛NAS作为frpc客户端。
这样就可以让国内外所有可以连接互联网的地方均可访问我的Web、Blog和Gitea。同时我也可以在杭州来调用家(天津)中的NAS存储,甚至理论上可以通过Homeassistant来控制家中的所有设备。
注:为什么说是理论上可行,因为目前家中仅有手机、电脑、电视和NAS可以连接网络,这些设备做Homeassistant实际作用不大。可能在未来我会用更多的技术手段来将我在杭州的家和天津的家在网络设备上做到完全打通(使用ipv6+Ddns或两台路由器组VPN网络)
说到ipv6我就要吐槽一下了,为什么校园宽带不给ipv6,why!