内网穿透之FRP,域名访问本地服务【只看这篇就够了,收藏必备】_frp内网穿透


这里有几个参数需要根据需要手动修改:


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
* 解析线路:默认
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值