frp 配置内网访问

frp介绍

frp 是一个开源、简洁易用、高性能的内网穿透软件,支持 tcp, udp, http, https 等协议。frp 项目官网是 https://github.com/fatedier/frp

下载地址: https://github.com/fatedier/frp/releases

frp工作原理
  • 服务端运行,监听一个主端口,等待客户端的连接;
  • 客户端连接到服务端的主端口,同时告诉服务端要监听的端口和转发类型;
  • 服务端fork新的进程监听客户端指定的端口;
  • 外网用户连接到客户端指定的端口,服务端通过和客户端的连接将数据转发到客户端;
  • 客户端进程再将数据转发到本地服务,从而实现内网对外暴露服务的能力。
配置教程

要配置 frp 进行内网穿透,首先你必须需要一台具有外网 IP(即可外网访问)的服务器。配置教程分为两个部分:服务器端(外网服务器)的配置和客户端(内网服务器)的配置。

服务端配置
解压 frp压缩包
bash 复制代码
tar -zxvf frp_0.33.0_linux_amd64.tar.gz
进入该解压目录:
bash 复制代码
cd frp_0.33.0_linux_amd64/
并打开配置文件:
bash 复制代码
vi frps.ini
将内容修改为以下
bash 复制代码
[common]
bind_addr = 0.0.0.0
# frp监听的端口,默认是7000,可以改成其他的
bind_port = 7000
# 授权码,请改成更复杂的
token = 123456  # 这个token之后在客户端会用到

# frp管理后台端口,请按自己需求更改
dashboard_port = 7500
# frp管理后台用户名和密码,请改成自己的
dashboard_user = admin
dashboard_pwd = admin
enable_prometheus = true

# 只允许FRPC绑定您列出的端口,如果您不设置,则不会有任何限制
allow_ports = 39002,39001

# frp日志配置
log_file = /var/log/frps.log
log_level = info
log_max_days = 3
设置和启动 frp 服务
bash 复制代码
sudo mkdir -p /etc/frp
sudo cp frps.ini /etc/frp
sudo cp frps /usr/bin
sudo cp systemd/frps.service /usr/lib/systemd/system/
sudo systemctl enable frps
sudo systemctl start frps

如果上述命令依次执行完毕没有出现任何错误,则说明frp服务已成功启动。

防火墙开放端口
bash 复制代码
# 添加监听端口
sudo firewall-cmd --permanent --add-port=7000/tcp
# 添加管理后台端口
sudo firewall-cmd --permanent --add-port=7500/tcp
sudo firewall-cmd --reload

注意:

  • 如果是 ubuntu 或者 centos 6,请使用 ufw/iptables 工具放行端口;
  • 7000和7500两个端口分别对应frps.ini配置中的bind_port和dashboard_port
验证服务端是否启动成功

访问: http://服务器IP:后台管理端口 " ,输入用户名和密码可以查看连接状态

如: http://xx.xx.xx.xx:7500/ ,用户名和密码分别对应 frps.ini 文件中的 dashboard_user 和 dashboard_pwd

登录之后界面如下:

如果上述步骤没有问题,则说明 frp 的服务端配置成功了,也就意味着你已经成功完成了内网穿透的一半。

客户端配置

解压frp压缩包
bash 复制代码
tar -zxvf frp_0.33.0_linux_amd64.tar.gz
进入该解压目录:
复制代码
cd frp_0.33.0_linux_amd64/
并打开配置文件:
复制代码
vi frpc.ini  (注意哦,不是frps.ini)
将文件内容修改为如下:
bash 复制代码
# 客户端配置
[common]
server_addr = x.x.xx.xx
server_port = 7000

token=chen123456987231456asdaqweqwe

admin_addr = 127.0.0.1
admin_port = 7400
admin_user = admin
admin_pwd = 123456

# 控制台或真实的日志文件路径,例如./frpc.log
log_file = ./frpc.log

# trace, debug, info, warn, error
log_level = info

log_max_days = 3

# 当 log_file 为 console 时禁用日志颜色,默认为 false
disable_log_color = false

# 您的代理名称将更改为 {user}.{proxy}
user = wk

# 现在支持tcp和kcp和websocket,默认是tcp
protocol = tcp

# 如果tls_enable为true,frpc将通过tls连接frps
tls_enable = true

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 39002

[web]
type = tcp
local_ip = 127.0.0.1
local_port = 80
remote_port = 39001
use_encryption = true
use_compression = true

注意:[ssh]这样的名称必须全局唯一,即使有多个客户端,也只能使用一次。其他名称可以使用[ssh2]、[ssh3]等。如果你要配置多个客户端,必须将其他客户端的名称改为[ssh2]、[ssh3],并相应地修改remote_port,例如6002、6003等

防火墙开放端口

linux:

bash 复制代码
sudo firewall-cmd --permanent --add-port=39001/tcp
sudo firewall-cmd --permanent --add-port=39002/tcp
sudo firewall-cmd --reload

客户端启动

在 frp_0.33.0_darwin_amd 64 目录下执行

复制代码
./frpc -c frpc.ini

到此为止,恭喜你,你基本上已经成功了。但还有最后一步,很多人常常会弄错。

测试穿透是否配置成功

找另外一台不同网段的linux或者mac电脑,在终端执行

ssh 用户名@服务端ip -p 端口号

这里一定要注意,这里用的是服务端的ip和用户名,端口号用的frpc.ini文件中的remote_port

相关推荐
拷贝码农卡卡东9 小时前
pre-commit run --all-files 报错:http.client.RemoteDisconnected
网络·网络协议·http
又菜又爱玩呜呜呜~12 小时前
go使用反射获取http.Request参数到结构体
开发语言·http·golang
cellurw14 小时前
Linux下C语言实现HTTP+SQLite3电子元器件查询系统
linux·c语言·http
希望201714 小时前
Golang | http/server & Gin框架简述
http·golang·gin
全栈技术负责人15 小时前
前端网络性能优化实践:从 HTTP 请求到 HTTPS 与 HTTP/2 升级
前端·网络·http
Whisper_Yu17 小时前
计算机网络(一)基础概念
计算机网络·http·https·信息与通信
emojiwoo19 小时前
HTTP 状态码背后的逻辑:从请求到响应的完整流程解析(含完整流程图)
网络·网络协议·http
娅娅梨19 小时前
HarmonyOS-ArkUI Web控件基础铺垫7-HTTP SSL认证图解 及 Charles抓包原理 及您为什么配置对了也抓不到数据
http·华为·ssl·harmonyos
渡我白衣20 小时前
Linux网络:应用层协议http
linux·网络·http
yuanpan1 天前
使用Python创建本地Http服务实现与外部系统数据对接
开发语言·python·http