Frp 内网穿透配置指南
一、项目介绍
Frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。通过在具有公网 IP 的节点上部署 frps 服务端程序,在需要穿透的内网机器上部署 frpc 客户端程序,就可以实现内网服务对外网的暴露。
-
项目地址:https://github.com/fatedier/frp
-
官方文档:https://gofrp.org/zh-cn/docs/
二、服务端配置
1. 下载并解压 Frp
在具有公网 IP 的服务器(Linux 系统)上执行以下命令:
# 下载 Frp 服务端程序
wget https://github.com/fatedier/frp/releases/download/v0.61.2/frp_0.61.2_linux_amd64.tar.gz -O /opt
# 解压下载的文件
tar -zxvf frp_0.61.2_linux_amd64.tar.gz
# 创建软链接,便于后期版本升级
ln -s frp_0.61.2_linux_amd64 frp
# 进入解压后的目录
cd frp
2. 配置 frps.toml
文件
使用 vim
编辑 frps.toml
文件:
vim /opt/frps.toml
在文件中添加以下内容:
# 服务端监听的端口
bindPort = 7000
# auth 配置服务端与客户端访问 token
auth.method = "token"
auth.token = "12344321"
# web-ui 开启 web 界面监控
# 默认为 127.0.0.1,如果需要公网访问,需要修改为 0.0.0.0。
webServer.addr = "0.0.0.0"
# web 界面监控的端口
webServer.port = 7500
# dashboard 用户名密码,可选,默认为空
webServer.user = "username"
webServer.password = "userpassword"
3. 开放防火墙端口
为了让客户端能够连接到服务端,需要开放相应的端口:
# 开放 web 界面监控端口
firewall-cmd --zone=public --add-port=7500/tcp --permanent
# 开放服务端监听端口
firewall-cmd --zone=public --add-port=7000/tcp --permanent
# 开放代理的远程端口
firewall-cmd --zone=public --add-port=6000/tcp --permanent
firewall-cmd --zone=public --add-port=8087/tcp --permanent
firewall-cmd --zone=public --add-port=8487/tcp --permanent
# 重新加载防火墙配置
firewall-cmd --reload
4. 创建系统服务文件
创建 frps.service
文件,让 Frp 服务可以随系统启动:
vim /etc/systemd/system/frps.service
在文件中添加以下内容:
[Unit]
# 服务名称,可自定义
Description = frp server
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
# 启动命令,改为实际存放 frps 的路径
ExecStart = /opt/frp/frps -c /opt/frp/frps.toml
[Install]
WantedBy = multi-user.target
5. 启动并设置开机自启
# 重新加载 systemd 配置
systemctl daemon-reload
# 启动 frps 服务并设置开机自启
systemctl enable frps --now
三、Windows 客户端配置
1. 下载 Frp 客户端
从以下链接下载 Windows 版本的 Frp 客户端:
https://github.com/fatedier/frp/releases/download/v0.61.1/frp_0.61.1_windows_amd64.zip
下载完成后解压到指定目录,例如 C:\sw\frp_0.61.1_windows_amd64
。
2. 配置 frpc.toml
文件
在解压后的目录中创建或编辑 frpc.toml
文件,添加以下内容:
# 服务端地址
serverAddr = "x.x.x.x"
# 服务端监听端口
serverPort = 7000
# 认证方式
auth.method = "token"
# 认证 token
auth.token = "12344321"
[[proxies]]
# 代理名称,可自定义
name = "test-tcp"
# 代理类型
type = "tcp"
# 本地 IP 地址
localIP = "127.0.0.1"
# 本地端口
localPort = 3389
# 远程端口
remotePort = 6000
3. 创建启动脚本
在同一目录下创建 frpc.vbs
文件,使用文本编辑器打开并添加以下内容:
Set ws = CreateObject("Wscript.Shell")
ws.currentdirectory = "C:\sw\frp_0.61.1_windows_amd64"
ws.run "cmd /c frpc -c frpc.toml >> frpc.log", vbhide
4. 设置开机自启
将 frpc.vbs
文件复制到以下目录:
C:\Users\用户名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
这样,每次开机时 Frp 客户端就会自动启动。
四、Linux 客户端配置
1. 下载并解压 Frp
在需要穿透的内网 Linux 机器上执行以下命令:
# 下载 Frp 客户端程序
wget https://github.com/fatedier/frp/releases/download/v0.61.2/frp_0.61.2_linux_amd64.tar.gz -O /opt
# 解压下载的文件
tar -zxvf frp_0.61.2_linux_amd64.tar.gz
# 创建软链接
ln -s frp_0.61.2_linux_amd64 frp
2. 配置 frpc.toml
文件
使用 vim
编辑 /opt/frp/frpc.toml
文件:
vim /opt/frp/frpc.toml
在文件中添加以下内容:
# 服务端地址
serverAddr = "x.x.x.x"
# 服务端监听端口
serverPort = 7000
# 认证方式
auth.method = "token"
# 认证 token
auth.token = "12344321"
[[proxies]]
# 代理名称,可自定义
name = "pvessh"
# 代理类型
type = "tcp"
# 本地 IP 地址
localIP = "127.0.0.1"
# 本地端口
localPort = 22
# 远程端口
remotePort = 8087
[[proxies]]
# 代理名称,可自定义
name = "pvehttp"
# 代理类型
type = "tcp"
# 本地 IP 地址
localIP = "127.0.0.1"
# 本地端口
localPort = 8006
# 远程端口
remotePort = 8487
3. 创建系统服务文件
创建 frpc.service
文件,让 Frp 客户端服务可以随系统启动:
vim /etc/systemd/system/frpc.service
在文件中添加以下内容:
[Unit]
Description=Frp Client Service
After=network.target
[Service]
Type=simple
ExecStart=/opt/frp/frpc -c /opt/frp/frpc.toml
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target
4. 启动并设置开机自启
# 重新加载 systemd 配置
systemctl daemon-reload
# 启动 frpc 服务并设置开机自启
systemctl enable frpc --now
五、同一台机器代理两个端口的方法
在客户端的 frpc.toml
文件中,可以通过添加多个 [[proxies]]
块来实现同一台机器代理多个端口。例如,在 Linux 客户端的 frpc.toml
文件中:
serverAddr = "x.x.x.x"
serverPort = 7000
auth.method = "token"
auth.token = "12344321"
[[proxies]]
name = "pvessh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 8087
[[proxies]]
name = "pvehttp"
type = "tcp"
localIP = "127.0.0.1"
localPort = 8006
remotePort = 8487