博文目录
FRP Releases
使用frp进行内网穿透
FRP 示例
FRP 实例 通过自定义域名访问内网的 Web 服务
FRP 参考 服务端配置
FRP Linux Server Release
FRP Windows Client Release
在 linux 上执行 arch
, 结果如果是 [X86_64] 即可选择 [linux amd64] 版本的 Release 包
wget https://github.com/fatedier/frp/releases/download/v0.38.0/frp_0.38.0_linux_amd64.tar.gz
tar -zxvf frp_0.38.0_linux_amd64.tar.gz
mv frp_0.38.0_linux_amd64 frp-0.38.0
编辑 frps.ini, bind_port 是 frp 运行的端口, vhost_http_port 是在客户端访问时使用的端口, 这两个端口需在防火墙开放
[common]
bind_port = 7000
vhost_http_port = 8888
log_file = frp.log
新建 run.sh 来运行 server 端
#!/bin/sh
nohup ./frps -c frps.ini &
chmod 777 run.sh
运行 run.sh, 查看 frp.log, 成功信息如下
2021/11/23 23:30:20 [I] [root.go:200] frps uses config file: frps.ini
2021/11/23 23:30:20 [I] [service.go:192] frps tcp listen on 0.0.0.0:7000
2021/11/23 23:30:20 [I] [service.go:235] http service listen on 0.0.0.0:8888
2021/11/23 23:30:20 [I] [root.go:209] frps started successfully
假设在 Windows 上运行了一个本地 Web 服务, 端口是 10001
下载 Windows 版本的客户端
编辑 frpc.ini, server_addr 和 server_port 是服务端地址和端口, [local] 配置节是自己添加的内容, type 是 http, local_port 是本地服务的端口(按需修改), custom_domains 是已注册的域名或者自定义的子域名(需配置域名解析, 确保顶级域名能访问到服务器)
[common]
server_addr = 117.50.xxx.xxx
server_port = 7000
[local]
type = http
local_port = 10001
custom_domains = mrathena.cn
因为 frpc.exe 不能直接点击运行, 参数没法传, 需要写一个启动的批处理 frpc.bat
@echo off
set file=frpc.ini
:: 读取并展示 frpc.ini 中的 local_port 和 custom_domains
setlocal enabledelayedexpansion
for /f "delims== tokens=1,2" %%i in (%file%) do (
if "%%i"=="local_port" (set port=%%j)
if "%%i"=="custom_domains" (set domain=%%j)
)
echo=
echo 浏览器地址栏输入 [%domain%\**\**] 即可访问内网服务
echo=
echo 代理的本地端口是 [%port%]
:: 确认是否需要更换 local_port
echo=
set /p newPort=如需替换代理端口请输入新的端口(Enter):
echo=
if not defined newPort (
echo 未输入新的端口, 继续使用 [%port%]
) else (
echo 使用新的本地端口 [%newPort%]
set changed=true
)
:: 如果输入了新的 local_port 则替换 frpc.ini 中的 local_port
if defined changed (
for /f "delims=:" %%a in ('type %file%^|findstr /n "local_port=%port%"')do set #%%a=y
(for /f "tokens=1* delims=:" %%a in ('type %file%^|findstr /n .*')do (
if defined #%%a (echo local_port=%newPort%)else echo.%%b
))>"%file%".tmp
@move "%file%".tmp "%file%" >nul 2>nul
)
:: 启动 frpc
echo=
echo ==================================================
echo=
frpc -c %file%
:: pause
运行 frpc.bat, 成功信息如下
2021/11/23 23:41:57 [I] [service.go:301] [5eed5fb1046fe11c] login to server success, get run id [5eed5fb1046fe11c], server udp port [0]
2021/11/23 23:41:57 [I] [proxy_manager.go:144] [5eed5fb1046fe11c] proxy added: [local]
2021/11/23 23:41:57 [I] [control.go:180] [5eed5fb1046fe11c] [local] start proxy success
现在调用 mrathena.cn:8888/xxx/xxx?xxx=xxx 应该就能正常提供服务了
server {
listen 80;
server_name frp.mrathena.cn;
location / {
proxy_pass http://localhost:8888;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
修改客户端配置 custom_domains = frp.mrathena.cn, 和 nginx 配置的子域名对应, 重启客户端
现在调用 frp.mrathena.cn/xxx/xxx?xxx=xxx 应该就能正常提供服务了