frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透。
对于没有公网 IP 的内网用户来说,远程管理或在外网访问内网机器上的服务是一个问题,或许你会说用teamviewer或者anydesk,但是teamviewer现在越来越恶心到不可用,连5分钟就强制断开,而anydesk在国内用的人还是太少。
今天在这里介绍下如何搭建和使用这个工具。
这里以Centos7为例搭建服务端。
Centos先执行命令
yum install -y wget
1.CD到Home目录方便Wget(可以自己选择FRP文件存放目录)
2.从官方github下载服务器端frp并解压(以最新版0.28.2 Linux 64位版本为例)
wget https://github.com/fatedier/frp/releases/download/v0.28.2/frp_0.28.2_linux_amd64.tar.gz
tar -zxvf frp_0.28.2_linux_amd64.tar.gz
如果觉得国内下载速度慢,可以把上面的链接替换成https://file.simplove.me/file/frp/frp_0.25.3_linux_amd64.tar.gz
3.修改解压出来的文件夹名(原文件夹名太长,懒得打那么多来cd,所以修改为frp)
mv frp_0.28.2_linux_amd64 frp
4.进入宝塔面板修改 frps.ini文件
注意括号和里面的不要复制进去。
[common]
bind_addr=0.0.0.0
bind_port = 7000
auto_token=12345678@qaq(密码可以自己修改)
dashboard_port = 7500(网页登录端口)
dashboard_user = admin(网页登录账户)
dashboard_pwd = admin(网页登录密码)
5.运行FRP
防止运行意外,先运行命令给FRP提权:
sudo chmod -R 777 /home/frp
运行FRS:
cd /home/frp
./frps -c ./frps.ini
如果要把服务端放到后台运行可以利用scrren:
yum -y install screen
screen -S frp ./frps -c ./frps.ini
设置frp开机启动
在/etc/rc.local里面添加/home/frp/frps -c /home/frp/frps.ini (文件的具体路径根据实际情况填写)
6.登录网页查看一下是否确实成功运行
访问 http://服务器ip:7500
上面配置的7500端口,使用上面配置的用户名和密码 admin/admin
如果打不开,记得在宝塔-安全-防火墙把7500端口打开。
登陆可以看到如下界面
到此处服务器端的配置完成了,接下来配置设置对应的客户端
先下载对应自己Windows系统版本的FRP客户端:https://github.com/fatedier/frp/releases
我这里远程服务器是Windows 10 64位,所以选择:
如果下载慢,同样可以用在这里面下载https://file.simplove.me/file/frp/
下载到Windows后解压(个人推荐解压到D盘,文件夹名一样修改为frp)
然后修改frpc.ini
[common] server_addr = 你服务器的公网IP地址 server_port = 7000 auto_token=12345678@qaq 密码和服务器上面的保持一致 [RDP] 名字,可以随意 type = tcp 远程桌面用的是tcp协议 local_ip = 127.0.0.1 local_port = 3389 remote_port = 7001
[common]
server_addr = 46.17.40.11
server_port = 7000
auto_token=12345678@q1!
[RDP3389]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 7001
subdomain = yk
保存后就可以在cmd命令行cd到frp文件夹执行frp了:
依次命令:
d:
cd frp
成功进入frp目录后执行命令运行frp:
frpc.exe -c frpc.ini
成功运行如下:
看到成功在线就可以去试试远程桌面连接了,接下来就和正常的远程桌面连接一样了
客户端以上就是客户端A的配置了
客户端B的配置就是改一下配置的端口号和名称和名称就行
如下
[common] server_addr = FRP服务端VPS的ip
server_port = 7000
auto_token=12345678
[RDP2] type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 7002
这个时候远程的ip和地址就是 服务器IP:配置的7002端口
注意不要把刚才运行的窗口关掉了,关了程序就没法运行了,还有开机启动的问题。
有兴趣的继续往下看。
Windows10 64位系统设置FRPC开机自动启动
这里我们用winsw来实现frpc做为服务运行和自动开机启动。
我们到Github release这里就可以下载winsw了。一般来说当然是下载最新的。winsw可以运行在.NET2和.NET4两个版本上,当然如果使用Win10等比较新的系统,最好下载更新版本的.NET4。
https://file.simplove.me/file/frp/ 可以在这里面下载文件
下载完之后最好把文件改成一个比较短小的名字,例如winsw.exe这样的,方便后面输入命令。
下面只说说配置。我这里是将winsw.exe和frpc.exe放到了一起,这样只需要直接填写程序名称。然后在和winsw.exe同级的目录下,新建winsw.xml文件,输入以下内容。
<service>
<id>frp</id>
<name>frp</name>
<description>用frp发布本地电脑网站到外网</description>
<executable>frpc</executable>
<arguments>-c frpc.ini</arguments>
<logmode>reset</logmode>
</service>
然后打开管理员权限命令提示符,使用下面的命令安装并启动服务。
注意一定要cd到frp的目录执行命令才行。
winsw install
winsw start
说明:如果不再需要这个服务,使用winsw uninstall即可卸载服务。当然还有诸如start、stop这样的命令启动和关闭服务。更重要的是,没有那个既不美观又烦人的命令提示符窗口。
特权模式研究:
frps.ini 添加以下内容
privilege_mode = true
privilege_token = 12345678@3.14
客户端frtc 添加
privilege_token = {privilege_token}
就可以了
自定义二级域名
在多人同时使用一个 frps 时,通过自定义二级域名的方式来使用会更加方便。
通过在 frps 的配置文件中配置 subdomain_host,就可以启用该特性。之后在 frpc 的 http、https 类型的代理中可以不配置 custom_domains,而是配置一个 subdomain 参数。
只需要将 *.{subdomain_host} 解析到 frps 所在服务器。之后用户可以通过 subdomain 自行指定自己的 web 服务所需要使用的二级域名,通过 {subdomain}.{subdomain_host} 来访问自己的 web 服务。
# frps.ini [common] subdomain_host = frps.com
将泛域名 *.frps.com 解析到 frps 所在服务器的 IP 地址。
# frpc.ini [web] type = http local_port = 80 subdomain = test
如果不通,请检查防火墙的配置,腾讯云服务器需要在安全组里面开放端口
另外如果还是不行,试试在宝塔面板的安全里面开放相应的端口。
服务端配置如下:
[common]
bind_port = 7000
auto_token=12345678@
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = admin
privilege_mode = true
privilege_token = 12345678@3.14
privilege_allow_ports =4000-8000
max_pool_count = 100
subdomain_host = frp.simplove.me
vhost_http_port = 80
客户端配置如下:
[common]
server_addr = 118.24.6.47
server_port = 7000
auto_token=12345678@
privilege_token = 12345678@3.14
[RDP]
type = tcp
local_ip = 127.0.0.1
local_port = 3389 (自己电脑的远程桌面端口,如果没有改就是默认)
remote_port = 7002 (远程连接端口,目前只开放了7002-7004)
subdomain = xxx (如果这里填写xxx,那远程地址就是xxx.frp.simplove.me)
远程桌面连接地址就是 xxx.frp.simplove.me:7002
[web]
type = http
local_port = 81
custom_domains = ****.eu.org