问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

用FRP配置toml文件搭建内网穿透

创作时间:
作者:
@小白创作中心

用FRP配置toml文件搭建内网穿透

引用
CSDN
1.
https://blog.csdn.net/qq_42672770/article/details/137977300

本文将详细介绍如何使用FRP工具搭建内网穿透服务,实现通过外网访问内网电脑的功能。文章将从需求场景、软件下载、服务端和客户端配置等多个方面进行详细讲解,并提供Docker部署方案和常见问题解决方案。

需求场景

  1. 一台外网可访问的有固定IP的云服务器,Ubuntu系统
  2. 一台外网无法访问的无固定IP的本地家用电脑,Ubuntu系统

需求:将云服务器搭建为一台内网穿透服务器,实现通过外网访问家用电脑(网页)的功能。即使没有域名也可通过公网访问。

下载软件

GitHub:https://github.com/fatedier/frp
releases页面:
官方文档:https://gofrp.org/zh-cn/

下载程序包
前往页面下载:https://github.com/fatedier/frp/releases
根据自己实际情况选择,家用电脑和服务器都是x64架构。

上传软件

个人习惯先分别在云端和本地的Ubuntu的 /etc 目录下新建frp目录用来存放frp文件。
解压后,在家用电脑端保存
frpc

frpc.toml
文件,在云服务器端保存
frps

frps.toml
文件。
frp软件在0.52.0版本开始支持 toml格式的配置文件,在后继版本取消 ini配置格式。

服务端设置

云端放行端口

frp服务端口:7000(可自定义)
frp控制面板端口:7500(可自定义)
要在两个地方放行:
1是云服务器提供商设置的防火墙放行端口,

2是服务器操作系统Ubuntu端口也要放行


# 添加监听端口
sudo firewall-cmd --permanent --add-port=7000/tcp
# 添加管理后台端口
sudo firewall-cmd --permanent --add-port=7500/tcp
sudo firewall-cmd --reload  

如果用的宝塔面板,在安全里设置:
如果端口不放行后面会报无法连接错误: connect: no route to host

云端配置文件frp.toml


bindPort = 7000                 # frp服务的特定端口,防火墙也需放开该端口
# 服务面板可查看frp服务状态信息
webServer.addr = "0.0.0.0"		# 后台管理地址,默认是127.0.0.1,如果是公网访问则改成0.0.0.0
webServer.port = 7500			# 后台管理端口
webServer.user = "admin"		# (可选)后台登录用户名
webServer.password = "admin"	# (可选)后台登录密码
#transport.tls.force = true  # 服务端将只接受 TLS链接
#auth.method = 'token'       # 客户端访问验证方式
#auth.token = "54321" 		 # 客户端访问验证密码,frpc要与frps一致
# 自定义的监听的端口,所有对服务器该端口访问将被转发到本地内网,做了反向代理可不处理防火墙放行
#vhostHTTPPort = 8000
#vhostHTTPSPort = 45443  

启动服务端

方式一:直接启动

服务器端,传统的启动方式是直接敲命令:

先cd到frps所在目录

./frps -c ./frps.toml &
这么写,比较麻烦,而且如果要停止进程也比较麻烦,建议采用构建成服务的方式。

方式二:以服务方式启动(推荐)

安装systemd,通常情况下系统都带得有,没有的情况下使用如下命令安装。

使用 yum 安装 systemd(CentOS/RHEL)

yum install systemd

使用 apt 安装 systemd(Debian/Ubuntu)

apt install systemd
创建frps.service服务

创建并编辑该文件

sudo vim /etc/systemd/system/frps.service
写入内容


[Unit]
# 服务名称,可自定义
Description = frp server
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
# 启动命令,改为实际存放frps的路径
ExecStart = /path/to/frps -c /path/to/frps.toml
[Install]
WantedBy = multi-user.target  

以服务的方式管理frps


# 启动frp
sudo systemctl start frps
# 停止frp
sudo systemctl stop frps
# 重启frp
sudo systemctl restart frps
# 查看frp状态
sudo systemctl status frps
# 设置为开机自启
sudo systemctl enable frps  

验证服务端是否启动成功

访问:http://服务器IP:后台管理端口” ,输入用户名和密码可以查看连接状态
如:http://62.244.114.4:7500/,
用户名和密码分别对应frps.toml文件中的
webServer.user = "admin"
webServer.password = "admin"
登录之后frp控制面板界面如下:
如果上述步骤没有问题,则说明frp的服务端配置成功了,也就意味着内网穿透你已经成功了一半

客户端设置

配置文件

frpc.toml
客户端,编辑
frpc.toml
文件:


# frpc.toml
transport.tls.enable = true		# 从 v0.50.0版本开始,transport.tls.enable的默认值为 true
serverAddr = "47.76.92.71" # 服务端ip
serverPort = 7000 # 服务端端口
auth.method = 'token' # 客户端访问验证方式
auth.token = '54321' # 客户端访问验证密码
[[proxies]]
name = "dy_mysql" # 客户端服务名
type = "tcp" # 通讯方式
localIP = "127.0.0.1" # 客户端的ip(固定)
localPort = 3306 # 客户端服务端口
remotePort = 13306 # 映射到服务端端口(服务器需放行)
[[proxies]]
name = "dy_video" # 客户端服务名_一个监控摄像头
type = "tcp" # 通讯方式
localIP = "192.168.6.8" # 客户端的ip(固定)
localPort = 5522 # 客户端服务端口
remotePort = 15522 # 映射到服务端端口(服务器需放行)
[[proxies]]
name = "test-http"
type = "tcp"
localIP = "127.0.0.1"			# 需要暴露的服务的IP
localPort = 9000				# 将本地9000端口的服务暴露在公网的6060端口
remotePort = 6060 				# 暴露服务的公网入口
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000
#customDomains = ["xxx.xxx.xxx.xxx"]
[[proxies]]
name = "web"
type = "http"
localPort = 80
#customDomains = ["域名"]
[[proxies]]
name = "web-80"
type = "https"
localPort = 45443
#customDomains = ["cloud.your-service.com"]  

运行启动

客户端运行及加入自动启动也参考服务端,唯一不同的是客户端运行需要使用 frpc -c frpc.toml

穿透测试

现在可以通过外网直接用ip+端口访问家中这台电脑提供的服务了,当然原理上是通过云服务器的端口中转的。
可以在家中电脑上继续搭建NAS系统,搭建自己的博客网站。
如果是通过域名访问网站,在国内是需要备案的。

用docker部署frp

服务端

云服务器ubuntu配置文件 frps.toml


bindPort = 7000
# The default value is 127.0.0.1. Change it to 0.0.0.0 when you want to access it from a public network.
webServer.addr = "0.0.0.0"
webServer.port = 7500
# dashboard's username and password are both optional
webServer.user = "admin"
webServer.password = "admin"
vhostHTTPPort = 8080  

启动脚本 serverstart.sh


#!/bin/bash
FRP_DIR=`pwd`
docker stop frps
docker rm frps
docker run -d \
    --restart always \
    --network host \
    --name frps \
    -v ${FRP_DIR}/frps.toml:/etc/frp/frps.toml \
    snowdreamtech/frps  

运行


./serverstart.sh  

客户端

本地电脑ubuntu配置文件frpc.toml


# frpc.toml
serverAddr = "192.168.1.132"
serverPort = 7000
[[proxies]]
name = "ssh"
type = "tcp"
localPort = 22
remotePort = 6022  

启动脚本clientstart.sh


#!/bin/bash
FRP_DIR=`pwd`
docker stop frpc
docker rm frpc
docker run -d \
    --restart always \
    --network host \
    --name frpc \
    -v ${FRP_DIR}/frpc.toml:/etc/frp/frpc.toml \
    snowdreamtech/frpc  

运行


./clientstart.sh  

上述配置是一个把内网ssh服务的22号端口映射到公网的6022端口,执行命令


ssh -p 6022 192.168.1.132  

即可从外网访问内网ssh服务
注:用公网ip替换192.168.1.132

其它问题

  1. 端口占用冲突
    如果你用的端口被系统保留了不让用,就得换其它端口
    可以通过如下命令查看保留的端口范围

netsh interface ipv4 show excludedportrange protocol=tcp  
  1. 云服务器商的控制面板和ubuntu系统中都要放行防火墙端口

相关引用

用FRP配置toml文件搭建内网穿透
杂记 | 使用FRP搭建内网穿透服务(新版toml配置文件,搭配反向代理食用)_frps.toml-CSDN博客
如何使用docker+frp进行内网穿透_docker_脚本之家
内网穿透!如何配置frp新版0.56.0的配置文件.toml:提供web、samba、ssh远程连接示例_frp 0.56-CSDN博客
内网穿透工具frp原理和使用教程-CSDN博客
https://www.cnblogs.com/cenima/p/17849921.html

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号