使用FRP搭建内网穿透工具

什么是FRP

frp 是什么?

frp 是一款高性能的反向代理应用,专注于内网穿透。它支持多种协议,包括 TCP、UDP、HTTP、HTTPS 等,并且具备 P2P 通信功能。使用 frp,您可以安全、便捷地将内网服务暴露到公网,通过拥有公网 IP 的节点进行中转。

为什么选择 frp?

通过在具有公网 IP 的节点上部署 frp 服务端,您可以轻松地将内网服务穿透到公网,并享受以下专业特性:

  • 多种协议支持:客户端服务端通信支持 TCP、QUIC、KCP 和 Websocket 等多种协议。
  • TCP 连接流式复用:在单个连接上承载多个请求,减少连接建立时间,降低请求延迟。
  • 代理组间的负载均衡。
  • 端口复用:多个服务可以通过同一个服务端端口暴露。
  • P2P 通信:流量不必经过服务器中转,充分利用带宽资源。
  • 客户端插件:提供多个原生支持的客户端插件,如静态文件查看、HTTPS/HTTP 协议转换、HTTP、SOCKS5 代理等,以便满足各种需求。
  • 服务端插件系统:高度可扩展的服务端插件系统,便于根据自身需求进行功能扩展。
  • 用户友好的 UI 页面:提供服务端和客户端的用户界面,使配置和监控变得更加方便。

官网:https://gofrp.org/zh-cn/docs/overview/

开源地址:https://github.com/fatedier/frp/releases

安装步骤

1、首先需要备一个具备公网IP 的云服务器

2、然后在该服务器上安装FRP 服务端

Bash 复制代码
# 使用wget命令下载服务端压缩包
wget https://github.com/fatedier/frp/releases/download/v0.65.0/frp_0.65.0_linux_amd64.tar.gz

# 解压到 /usr/local
tar -zxvf frp_0.59.0_linux_amd64.tar.gz -C /usr/local

进入 /etc/systemd/system/ 目录建立新的文件 frps.service 配置成Systemd服务

frps.service 中填写如下内容:

Bash 复制代码
# frps.service
[Unit]
Description=frps service
After=network.target syslog.target
Wants=network.target
[Service]
Type=simple
#Restart=always
Restart=on-failure
RestartSec=5s
#启动服务的命令
ExecStart=/usr/local/frp_0.65.0_linux_amd64/frps -c /usr/local/frp_0.65.0_linux_amd64/frps.toml
[Install]
WantedBy=multi-user.target

注意,云服务器中要配置安全规则,放行7000,7500,7001, 6000等端口。

然后配置frps.toml文件

Bash 复制代码
[common]
bind_port = 7000
kcp_bind_port = 7000
vhost_https_port = 7001
dashboard_addr = 0.0.0.0
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = admin
log_file = ./frps.log
log_level = info
log_max_days = 3
authentication_timeout = 900
token=mowangmowang
allow_ports = 2000-3000,3001,3003,4000-50000,3362
max_pool_count = 50
max_ports_per_client = 0

最后设置系统自动启动frp

Bash 复制代码
# 设为开机自启
sudo systemctl enable frps
# 启动frp
sudo systemctl start frps
# 查看启动日志 
sudo systemctl status frps 
# 重启frp服务
sudo systemctl restart frps 
# 关闭frp服务
sudo systemctl stop frps 

3、配置需要被内网穿透的服务器

同样在**/etc/systemd/system/** 目录建立新的文件 frpc.service 配置成Systemd服务

配置内容如下:

Bash 复制代码
# frps.service
[Unit]
Description=frpc service
After=network.target syslog.target
Wants=network.target
[Service]
Type=simple
#Restart=always
Restart=on-failure
RestartSec=5s
#启动服务的命令
ExecStart=/usr/local/frp_0.65.0_linux_amd64/frpc -c /usr/local/frp_0.65.0_linux_amd64/frpc.toml
[Install]
WantedBy=multi-user.target

然后根据需求映射需要穿透的端口。这样以ssh工具为例,ssh 使用服务器的22号端口。所以这里我要映射内网的22端口到云服务器的6000端口。

配置 frpc.toml 文件,内容如下:

Bash 复制代码
[common]
server_addr = 14.103.242.86
server_port = 7000
token = "mowangmowang"

[[proxies]]
name = "web"
type = "tcp"
local_ip = "127.0.0.1"
local_port  = 22
remote_port  = 6000

其中14.103.242.86 为云服务的公网地址。

local_port = 22 配置内网服务器要映射出去的端口。

remote_port = 6000 配置云服务器对应的端口。

这样配置后,意味着访问云服务器6000端口的流量会被转发到内网服务器的22号端口。

最后设置frp自动启动。

Bash 复制代码
# 设为开机自启
sudo systemctl enable frpc
# 启动frp
sudo systemctl start frpc
# 查看启动日志 
sudo systemctl status frpc
# 重启frp服务
sudo systemctl restart frpc
# 关闭frp服务
sudo systemctl stop frpc 

使用映射的ssh

使用如下命令来通过ssh访问内网服务器:

Bash 复制代码
ssh -o Port=6000 ws@14.103.242.86

其中ws 为内网服务器的用户名

14.103.242.86 为云服务器的公网IP。

获取详细的错误日志

这是最关键的第一步,系统日志通常会直接告诉您失败的原因。

Bash 复制代码
sudo journalctl -u frps -n 50 --no-pager

或者查看系统日志:

Bash 复制代码
sudo tail -n 50 /var/log/syslog | grep frps

参考

https://blog.loli.wang/blog/2024-08-17-frpinit/doc/

相关推荐
池央2 天前
节点小宝远程文件管理:实现安全高效的跨设备文件存取
内网穿透
袁煦丞 cpolar内网穿透实验室3 天前
可视化管理服务器:cpolar 内网穿透实验室第 725 个成功挑战
运维·服务器·远程工作·内网穿透·cpolar
YounGp_oo4 天前
一次内网开发环境访问方式的改进实践:使用 FRP 替代远程桌面
网络·ssh·frp·内网穿透·开发环境
逐梦苍穹5 天前
不用公网 IP,把内网服务安全发布到公网:ZeroNews 快速上手
网络协议·tcp/ip·安全·内网穿透
什么都不会的Tristan6 天前
内网穿透(临时性的)
内网穿透
微学AI12 天前
内网穿透的应用-SoybeanAdmin+cpolar:打破局域网,后台开发协作效率翻倍
学习·内网穿透
学编程的小程12 天前
OpenKylin 好用但仅限本地?cpolar一招解锁远程访问自由
内网穿透
linweidong13 天前
如何在同一台内网电脑上同时连接两个不同的 NPS 服务端
内网穿透·nps·npc
脆皮瞎14 天前
局域网Arp与DNS劫持
网络安全·内网穿透·dns劫持