Github地址:https://github.com/fatedier/frp
参考文档地址:https://gofrp.org/docs/
安装包下载地址(参考。本次以此版本安装):https://github.com/fatedier/frp/releases/tag/v0.35.1
安装包下载
- Centos7 64位可选择此版本frp_0.35.1_linux_amd64.tar.gz
- 本次部署及测试环境:
- 测试协议UDP
- win10:访问测试
- 阿里云ECS Centos 7:frp服务端
- 虚拟机Centos 7 : frp客户端
frp安装
由于我的服务端和客户端都是Linux系列,所以我下载一个即可。
如何区分服务端和客户端:
看文件后缀:frp_
frps为服务端。后缀为s
frpc为客户端。后缀为c
解压命令:
tar -zxvf frp_0.35.1_linux_amd64.tar.gz
-
下载后解压,文件目录如下:
-
systemd内文件如下:
frp配置
-
服务端简单配置:
frps.ini
[common] bind_port = 7000 #绑定端口,用于和客户端连接 privilege_token = zxc1234 #用于连接认证,可以省略 dashboard_port = 7001 #启动服务端UI页面,可以看到一些信息,无管理功能 dashboard_pwd = zxc1234 #设置访问页面用户的密码。默认用户名为:admin
-
客户端的简单配置:
frpc.ini
[common] server_addr = 39.156.69.79 #frp服务端的地址,换成你的公网IP server_port = 7000 #frp服务端的端口 privilege_token = zxc1234 #连接认证 [web] privilege_token = true #是否使用认证 type = udp #连接类型 local_ip = 127.0.0.1 #默认值 local_port = 6002 #本机服务端口,比如ssh的22,则填入22。6000可能会被系统使用。 remote_port = 6001 #服务端转发至本机对外开放的端口
frp启动测试
启动顺序为:先服务端,后客户端。
阿里云ECS需在网络规则中增开6001端口,协议选择UDP(默认TCP,会导致本次测试失败)>。
两台主机都临时关闭防火墙:
systemctl stop firewalld
-
服务端:
./frps -c frps.ini #设置后台运行,开机启动参见文章末尾内容 #检查端口监听情况使用命令:netstatus -nltp (此处frp应监听三个端口:7000、7001、6001) #7000接收frp客户端连接、7001为UI面板、6001转发至frp客户端端口6001
-
客户端:
./frpc -c frpc.ini #设置后台运行,开机启动参见文章末尾内容 #检查端口监听情况使用命令:netstatus -nltp (此处frp应监听两个端口:6001、6002) #6001接收外部流量转发至内部6002端口,6002端口由UDP服务端监听
-
查看服务端UI面板(frp客户端未启动)
-
查看服务端UI面板(frp客户端启动后)
UDP通讯测试
-
win10下的一个
UDP 客户端
python脚本内容:import socket import time client = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) num = 0 while 1: if num == 100: break #此处IP地址换成你的公网IP client.sendto("from client message".encode("utf-8"),("39.156.69.79",6001)) data,server = client.recvfrom(1024) print("接收到服务端消息:", data.decode("utf-8")) num += 1 print("发送第", num, "条") time.sleep(1) client.close()
-
虚拟机中的一个
UDP 服务端
python脚本内容:#python3 #coding:utf8 import socket server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) server.bind(("127.0.0.1", 6002)) print("服务器已经启动") while True: data, client = server.recvfrom(1024) print("接受到客户端的消息:", data.decode("utf-8")) server.sendto("from server message".encode("utf-8"), client)
-
如果能通则会输出对应内容,如果不通,建议先使用局域网进行测试(将
39.156.69.79
改为192.168.28.131
[vmware虚拟网卡])
使用systemctl 管理frp
-
配置frp服务端service文件:
移动frps.service文件至指定目录:
cp ./frp_0.35.1_linux_amd64/systemd/frps.service /usr/lib/systemd/system/
vi
查看frps.service
文件内容,记录frps文件位置和frps.ini文件位置(也可创建一个):vi /usr/lib/systemd/system/frps.service
[Unit] Description=Frp Server Service After=network.target [Service] Type=simple User=nobody Restart=on-failure RestartSec=5s ExecStart=/usr/bin/frps -c /etc/frp/frps.ini #注意此处内容 [Install] WantedBy=multi-user.target
将
frps
文件和frps.ini
复制到指定位置:cp ./frp_0.35.1_linux_amd64/frps /usr/bin/ mkdir /etc/frp cp ./frp_0.35.1_linux_amd64/frps.ini /etc/frp
测试启动:
systemctl start frps systemctl status frps #设置开机启动: systemctl enable frps #关闭开机启动: systemctl disable frps
-
配置frp客户端service文件:
参考服务端配置流程