关键词:内网穿透 frp frps frpc

frp

frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议,且支持 P2P 通信。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。

目标

通过访问公网的某个端口可以访问本机或局域网的web服务。

下载地址为:https://github.com/fatedier/frp/releases
此处使用最新版(此时为v0.57.0)。

查看版本的命令
/usr/local/bin/frps -v

下载linux-amd64和windows_amd64。

在云服务器中配置服务端

服务端需要有公网ip。

上传到到linux服务器中。由于是服务端,所以只需要frps和frps.toml。
将它们复制到/usr/local/bin中(不要放到/opt等其它目录,会导致无法运行)。

修改frps.toml的内容为如下:

# 这两个端口需要配置到安全组中
bindPort = 7000
vhostHTTPPort = 8080

然后配置成服务:

vim /lib/systemd/system/frps.service

文件内容如下:

[Unit]
Description=Frp Server Service
After=network.target

[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=10s
ExecStart=/usr/local/bin/frps -c /usr/local/bin/frps.toml

[Install]
WantedBy=multi-user.target

之后就可以启动frps了。sudo systemctl start frps
看到frps started successfully就说明启动成功了。
配置开机启动 sudo systemctl enable frps
如果要重启应用,sudo systemctl restart frps
如果要停止应用,sudo systemctl stop frps
如果要查看日志,sudo systemctl status frps

服务端若开启了防火墙,需要放开端口

# 查看防火墙状态
firewall-cmd --state

sudo firewall-cmd --permanent --add-port=【对应frps.toml中的bindPort】/tcp
sudo firewall-cmd --permanent --add-port=【对应frps.toml中的vhostHTTPPort】/tcp
sudo firewall-cmd --reload

问题:
Q: main process exited, code=exited, status=203/EXEC
A: 查看frps所在目录,尽量放到/usr/bin或/usr/local/bin中

参考:https://blog.csdn.net/x7418520/article/details/81077652

配置客户端

frpc.toml内容如下:

# 配置地址和端口,注意serverAddr的值要用双引号括住。
serverAddr = "公网ip"
# serverPort对应frps.toml中的bindPort
serverPort = 7000

[[proxies]]
# 映射到本地的web服务
name = "web"
# http协议
type = "http"
# web服务的端口
localPort = 5000
# 自定义域名,可以是ip地址
customDomains = ["frps服务端的公网ip", "域名"]

启动客户端 frpc.exe -c frpc.toml

访问 http://【frps服务端的公网ip】或【域名】:【frps.toml中的vhostHTTPPort】/【请求路径】
比如本地5000端口提供了/hello接口,则访问http://公网ip:8080/hello也能访问成功。

windows配置服务

sc create frpc start= auto binPath= "C:\Windows\apps\frp\frpc.exe -c C:\Windows\apps\frp\frpc.toml" DisplayName= "FRPC Service"

sc start frpc

会报错:

[SC] StartService 失败 1053:
服务没有及时响应启动或控制请求。

结论:不使用sc命令来创建服务

改用 winsw

官网:https://github.com/winsw/winsw/releases

如下使用版本是WinSW v3.0.0-alpha.11(文件名是WinSW-net461.exe),且需要在管理员模式下运行。

WinSW-net461.exe install frpc_service.xml
WinSW-net461.exe start frpc_service.xml
WinSW-net461.exe stop/restart/status xxx.xml

frpc_service.xml的内容如下:

<service>
  <id>frpc</id>
  <name>frpc</name>
  <executable>D:\ws\apps\frp\frpc.exe</executable>
  <arguments>-c D:\ws\apps\frp\frpc.toml</arguments>
  <onfailure action="restart" />

  <!-- 指定日志文件目录(相对于executable配置的路径) -->
  <logpath>logs</logpath>
  <!-- 日志模式:每天滚动-->
  <log mode="roll-by-time">
    <pattern>yyyyMMdd</pattern>
  </log>
</service>
作者:admin  创建时间:2024-04-19 20:39
最后编辑:admin  更新时间:2025-09-19 10:08