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

相关推荐
Bonne journée6 小时前
socket和http区别
网络·网络协议·http
煎饼皮皮侠15 小时前
浏览器发送请求后关闭,服务器的处理过程
服务器·tcp/ip·http
仍有未知等待探索20 小时前
Linux 应用层协议HTTP
网络·网络协议·http
看山还是山,看水还是。1 天前
交换机如何开启FTP服务
网络协议·http·信息与通信·信号处理
GodK7772 天前
HTTP 协议的基本格式和 fiddler 的用法
网络协议·http·fiddler
筑梦之路2 天前
直接用Bash发送HTTP请求 —— 筑梦之路
http·bash
Z.Virgil2 天前
【案例73】Uclient无法读取https地址添加应用
java·linux·服务器·网络·网络协议·http·https
多彩电脑2 天前
PYTHON实现HTTP request的一些有用的函数
python·http
COTAS2 天前
【JavaWeb】JavaWeb笔记 HTTP
笔记·网络协议·http
leaverlk2 天前
IIS开启后https访问出错net::ERR_CERT_INVALID
网络协议·http·https