赞
踩
ubutubu 22.04
frp 是一个快速反向代理,通过具有公网IP的节点上部署frp服务端,可以轻松地将内网服务穿透到公网,同时提供诸多专业的功能特性,包括:
客户端服务端支持TCP、QUIC、KCP以及Websocket等多种协议。
采用TCP连接流式复用,在单个连接间承载更多请求,节省连接建立时间,降低请求延迟。
代理组间的负载均衡。
端口复用,多个服务通过同一个服务端端口暴露。
支持P2P通信,流量不经过服务器中转,充分利用带宽资源。
多个原生支持的客户端插件(静态文件查看,HTTPS/HTTP协议转换,HTTP、SOCK5代理等),便于独立使用frp客户端完成某些工作。
高度扩展性的服务端插件系统,易于结合自身需求进行功能扩展。
服务端和客户端UI界面。
一台公网服务器(配置要求不高,带宽大,网络稳定即可),作为服务端,如公网IP:47.23.42.13。
内网客户端(准备穿透出去的服务),如内网IP:192.168.1.11。
GitHub地址为:GitHub - fatedier/frp: A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.,最新版本的客户端和服务端二进制文件在Release页面中。
找到自己合适的版本,下载。
- #下载
- wget https://github.com/fatedier/frp/releases/download/v0.58.1/frp_0.58.1_linux_amd64.tar.gz
- #解压
- tar -zxvf frp_0.58.1_linux_amd64.tar.gz
- #进入目录
- cd frp_0.58.1_linux_amd64
进入文件夹后,可以看到有5个文件,其中frpc
为客户端程序,frpc.toml
为客户端配置文件。frps
为服务端程序,frps.toml
为服务端配置文件。
- root@ubuntu:~/frp_0.58.1_linux_amd64$ ls
- frpc frpc.toml frps frps.toml LICENSE
需要将frpc
拷贝至客户端,即内网服务器,或者在客户端直接下载也可以,客户端只需要使用frpc
和frpc.toml
文件即可。
服务端配置时修改frps.toml
文件,官方给出了完整的配置文件说明。
- # IPv6的字面地址或主机名必须括起来。
- # 在方括号中,如“[::1]:80”、“[ipv6-host]:http”或“[ipv6-host%zone]:80”
- # 对于单个 "bindAddr" 字段,不需要方括号,例如 `bindAddr = "::"`。
- bindAddr = "0.0.0.0"
- # 隧道端口,服务端通过此端口与客户端通信
- bindPort = 7000
-
- # 用于KCP协议的UDP端口,可以与“bindPort”相同。
- # 如果未设置,frps 中的 kcp 将被禁用。
- kcpBindPort = 7000
-
- # 每个代理中最大池数量。
- transport.maxPoolCount = 5
-
- # 如果你想支持虚拟主机,你必须设置用于监听的http端口(可选)
- # 注意:http端口和https端口可以与bindPort相同。
- # 由于备案原因,一般不使用80和443端口,可以自定义
- vhostHTTPPort = 7001
- vhostHTTPSPort = 7002
-
-
- # frps后台
- # dashboard is available only if webServer.port is set.
- webServer.addr = "127.0.0.1"
- webServer.port = 7500
- webServer.user = "admin"
- webServer.password = "admin"
-
-
- # console or real logFile path like ./frps.log
- log.to = "./frps.log"
- # trace, debug, info, warn, error
- log.level = "info"
- log.maxDays = 3
- # disable log colors when log.to is console, default is false
- log.disablePrintColor = false
-
-
- # 服务端和客户端使用token鉴权
- auth.method = "token"
- # 设置token值
- auth.token = "12345678"
-
- # 每个客户端可以使用的最大端口数,默认值为0表示没有限制。
- maxPortsPerClient = 0
-
- # 如果服务端主机进行了域名绑定,则填入对应域名,否则填入服务器的公网IP地址
- subDomainHost = "47.23.42.13"
其他配置看官网的完整配置文件frp/conf/frps_full_example.toml at dev · fatedier/frp · GitHub。
使用vim
编辑器创建并编辑frps.service
文件。
$ vim /etc/systemd/system/frps.service
写入内容
Description = frp server
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径以及配置文件存储路径
ExecStart = /path/to/frps -c /path/to/frps.toml
[Install]
WantedBy = multi-user.target
- 使用
- systemd
- 命令,管理
- frps
-
- # 启动frp
- systemctl start frps
- # 停止frp
- systemctl stop frps
- # 重启frp
- systemctl restart frps
- # 查看frp状态
- systemctl status frps
- 配置开机启动
systemctl enable frps
修改frpc.toml
# 您的代理名称将更改为 {user}.{proxy}
user = "your_name"
# 服务端IP
serverAddr = "47.23.42.13"
# 服务端端口
serverPort = 7000
# 控制台或真实日志文件路径,如 ./frpc.log
log.to = "./frpc.log"
# trace, debug, info, warn, error
log.level = "info"
log.maxDays = 3
# disable log colors when log.to is console, default is false
log.disablePrintColor = false
# 鉴权方式为token
auth.method = "token"
# 服务端设置的token
auth.token = "12345678"
# 服务端后台
webServer.addr = "127.0.0.1"
webServer.port = 7400
webServer.user = "admin"
webServer.password = "admin"
webServer.pprofEnable = false
# 配置本地服务
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
# 本机需要映射的端口
localPort = 22
# 远程服务器映射的端口为6000
remotePort = 6001
# 映射web服务
[[proxies]]
name = "web01"
type = "http"
localIP = "127.0.0.1"
# 本地web服务端口
localPort = 80
启动客户端
./frpc -c frpc.toml
注意,服务端需要开启7000、6001、7001、7002等端口。
这里测试ssh
连接
root@ubuntu:~$ ssh root@47.23.42.13 -p 6001
连接登陆,即可登陆内网IP为192.168.1.12的主机。
做p2p配置时,需要公网服务器找到两个通信方的位置,然后使用UDP进行端到端通信。
服务端需要开启UDP端口,在frps.toml
中添加一个配置。
quicBindPort = 7002
客户端1添加如下配置
- [[proxies]]
- name = "p2p_tcp"
- type = "xtcp"
- secretKey = "abcdefg"
- localIP = "127.0.0.1"
- localPort = 22
# 如果不为空,则只有指定用户的访问者可以连接。 # 否则,同一用户的访问者可以连接。'*' 表示允许所有用户。
allowUsers = ["user1", "user2"]
客户端2添加如下配置
[[visitors]]
name = "p2p_tcp_visitor"
type = "xtcp"
# 如果未设置服务器用户,则默认为当前用户。
serverUser = "user1"
serverName = "p2p_tcp"
secretKey = "abcdefg"
bindAddr = "127.0.0.1"
bindPort = 9001
这样,客户端2在远程连接的使用使用localhost:9001
就能点对点访问服务了。
本教程鸣谢 zlf同学,撰写
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。