这里有几个参数需要根据需要手动修改:
1. `bindPort`:frp 服务端监听的端口,也即服务入口,建议修改
2. `auth.token`:授权码,这个授权码之后在客户端还会用到
3. `webServer.port`:监控流量页面的端口,建议修改
4. `webServer.user`:监控流量页面的用户名
5. `webServer.password`:监控流量页面的密码
6. `log.to`:日志文件路径,根据需要修改
其中`认证token`可以用 `pwgen` 命令来生成,这个授权码之后在客户端还会用到。
sudo apt install pwgen -y
pwgen -s 32 1
运行服务:
./frps -c frps.toml
记得防火墙打开云服务器的7500端口和其他所有提到的端口,这些端口可以用’,'分割,在一个规则中同时打开。然后网页输入`公网IP:7500`,输入设置的Dashboard账户和密码,登录后即可看到 frp 的状态。
#### 3.2.2 客户端与服务端自启动(推荐)
把 frps 添加为系统服务,这一来当系统重启时,Frps 服务会自动启动,并且不需要手动再次启动。
然后`云服务端`新建文件:`frps.service`,
cd /etc/systemd/system
sudo vim frps.service
内容如下:
[Unit]
Description=frps service
After=network.target syslog.target
Wants=network.target
[Service]
Type=simple
ExecStart=/home/user/software/frp/frps -c /home/user/software/frp/frps.toml
Restart=always
RestartSec=15s
[Install]
WantedBy=multi-user.target
设置自启动,并启动服务:
sudo systemctl enable frps # 允许自启动
执行成功会提示“Created symlink /etc/systemd/system/multi-user.target.wants/frps.service → /usr/lib/systemd/system/frps.service.”
sudo systemctl start frps # 启动客户端服务
后续如果更改了配置文件,执行下边命令重启服务:
sudo systemctl daemon-reload
sudo systemctl restart frps
查看服务状态:
sudo systemctl status frps # 查看服务状态
>
> 注:以上为云服务端配置,内网客户端也需要配置
>
>
>
#### 3.3.3 客户端配置
将 `client` 目录上传到内网服务器,原来frpc.toml的内容删了,按照如下编辑 frpc.toml,参数见注释。
[common]
服务端公网IP、监听端口bind_port
serverAddr = “公网IP地址”
serverPort = 7000
webServer.addr = “0.0.0.0”
webServer.port = 7500
webServer.user = “username”
webServer.password = “password”
授权码
auth.method = “token”
auth.token = “e10adc3949ba59abbe56e057f20f883e”
设置心跳
auth.additionalScopes = [“HeartBeats”]
去除访问限速
transport.tcpMux = false
frp日志配置
log.to = “./frpc.log”
log.level = “info”
log.maxDays = 3
[[proxies]]
name = “ssh”
type = “tcp”
localIP = “127.0.0.1”
localPort = 22
remotePort = 2288
name 为服务名称,下方解释:访问frp服务端的2288端口时,等同于通过中转服务器访问127.0.0.1的22端口。
type 为连接的类型,此处为tcp
localIP 为中转客户端实际访问的IP
localPort 为目标端口
remotePort 为远程端口,记得服务端的防火墙打开这个端口
同样地,本地执行 `./frpc -c frpc.toml` 即可启动客户端。
>
> 注:frpc.toml可以改名;frpc.toml每一行内容的后面不可以加注释,否则会报错。建议使用 tmux 在后台启动服务
> 内网服务器一定要能够访问外网(`如果是校园网,网络断开的话要重新登陆才行,否则服务也会断开`)
>
>
>
回到服务器的dashboard界面,找到tcp端口,可以看到2288端口已经是online状态,即绑定成功。以上所有相当于`公网IP:2288对应127.0.0.1:22`
#### 3.3.4 访问内网其他服务
在上面的client端,也就是`frpc.toml`文件末尾添加:
[[proxies]]
name = “ssh”
type = “tcp”
localIP = “127.0.0.1”
localPort = 9800
remotePort = 9000
### 3.2 第二种方式:通过docker启动服务
使用frp软件时,在某些服务器上是二进制文件,通过`sudo chmod +x frpc`等指令也无法执行,那么docker可以完美解决所有问题。
#### 3.2.1 使用方法:
过程同第一种类似。只有在`./frps -c frps.toml`和`./frpc -c frpc.toml`的时候,换成通过docker启动即可,首先安装docker:
安装docker
sudo apt install docker.io -y
创建用户组
sudo groupadd docker
将用户添加到 docker
sudo usermod -aG docker $USER
重启docker服务(生产环境慎用):
sudo systemctl restart docker
添加访问和执行权限:
sudo chmod a+rw /var/run/docker.sock
查看当前 docker 用户列表
sudo cat /etc/group | grep docker
**公网的服务端**:
编辑配置文件,可以放在`/etc/frpc/frps.toml`,内容如下:
[common]
frp监听的端口,默认是7000,可修改
bind_port = 7000
开启Dashboard用于管理和查看服务状态。Dashboard端口、用户名和密码,请改成更复杂的。
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = admin123456
认证token,增加安全性。请改成更复杂的,这个token之后在客户端会用到
token = e10adc3949ba59abbe56e057f20f883e
去掉速度限制
tcp_mux = false
frp日志配置
log_file = ./frps.log
log_level = info
log_max_days = 3
然后启动docker:
docker镜像:snowdreamtech/frps
重启:always
网络模式:host
文件映射:/your-toml-path/frps.toml:/etc/frp/frps.toml
docker run --restart=always --network host -d -v /your-toml-path/frps.toml:/etc/frp/frps.toml --name frps snowdreamtech/frps
**内网客户端:**
编辑配置文件,可以放在`/etc/frpc/frpc.toml`,内容如下:
[common]
服务端公网ip、监听端口bind_port
server_addr = 公网IP地址
server_port = 7000
服务端的授权码
token = e10adc3949ba59abbe56e057f20f883e
去掉速度限制
tcp_mux = false
[single step web ui]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 2288
然后启动docker:
docker镜像:snowdreamtech/frpc
重启:always
网络模式:host
文件映射:/your-toml-path/frpc.toml:/etc/frp/frpc.toml
docker run --restart=always --network host -d -v /your-toml-path/frpc.toml:/etc/frp/frpc.toml --name frpc snowdreamtech/frpc
>
> 注:公网的服务端和内网的客户端区别在于:docker镜像不一致。
>
>
>
## 四、心跳设置
如不设置心跳,FRP 创建的连接可能在间隔较长时间后会断开,重新连接需刷新几次才能成功。FRP 本身提供了心跳机制来维持连接。
---
>
> 注:如果上边FRP自带的心跳已经满足需求,直接滑到后边`域名绑定`
>
>
>
另外,如果你依然想要使用 `crontab` 作为保持连接的方法,你可以按照以下步骤设置:
在`服务端`输入 crontab -e,添加定时任务:
-
-
-
-
- curl localhost:8080 --max-time 5 >/dev/null 2>&1
-
-
-
客户端 `toml` 文件添加相应的 `heartbeat` 字段:
如果用github下载的软件启动,添加以下字段:
[[proxies]]
name = “heartbeat”
type = “tcp”
localIP = “127.0.0.1”
localPort = 80
remotePort = 8080
如果用docker启动,添加以下字段:
[heartbeat]
type = tcp
local_ip = 127.0.0.1
local_port = 80
remote_port = 8080
如果未生效或者担心心跳是否设置成功,可以查看cron日志:
如果要查看crontab日志,需要将服务端的指令修改为:
-
-
-
-
- curl localhost:8080 --max-time 5 > /var/log/cron 2>&1
-
-
-
修改好后需要2min后生效,这时候可以输入下面这行使cron立即生效
sudo service cron restart
输入下面的指令查看日志
sudo tail -f /var/log/cron
>
> 注:
>
>
> 1. 将/var/log下的cron文件权限改成可写,`chmod 777 /var/log/cron` 即可。
> 2. 将云服务端的`8080`端口打开
>
>
>
请注意,使用 `crontab` 的方法并不是最优的解决方案,因为它可能会给服务器带来不必要的负担,尤其是当服务不需要这么频繁的心跳检测时。优先考虑使用 FRP 自带的心跳机制。如果你认为 FRP 的心跳机制不足以维持连接,再考虑使用 `crontab`。
## 五、域名绑定
使用`备案好的域名`访问使用FRP进行内网穿透的服务,你需要配置FRP服务端(frps)、客户端(frpc)以及进行域名解析。以下是各配置的示例:
**FRP服务端配置**,frps.toml文件最后添加下面的内容:
HTTP和HTTPS服务监听的端口(用于域名访问的HTTP和HTTPS请求,防火墙打开这两个端口)
vhost_http_port = 80
vhost_https_port = 443
使用的域名(将一级域名替换yourdomain.com,就是你购买的域名)
subdomain_host = yourdomain.com
**FRP客户端配置**,frpc.toml文件最后添加下面的内容:
[[proxies]]
name = “domin”
使用http类型
type = http
localIP = “127.0.0.1”
localPort = 8080
自定义域名前缀,完整域名将是 service.yourdomain.com
subdomain = service
**域名解析设置**
* 登录到你的域名管理控制台。
* 进入DNS管理或域名解析设置页面。
* 添加A记录,指向FRP服务端的公网IP地址。
假设你的域名是yourdomain.com,你希望通过service.yourdomain.com来访问内网服务,那么你需要添加如下的解析记录:
* 记录类型:A
* 主机记录:service
* 解析线路:默认