使用FRP实现内网穿透

frp 是一款高性能的反向代理应用,专注于内网穿透。它支持多种协议,包括 TCP、UDP、HTTP、HTTPS 等,并且具备 P2P 通信功能。使用 frp,您可以安全、便捷地将内网服务暴露到公网,通过拥有公网 IP 的节点进行中转。
详细配置或更多内容请参考官方文档网站
下载github releases页面中的frpc和frps,分别为客户端和服务端。客户端运行在需要暴露的服务所在内网服务器,服务端运行在有公网IP的服务器上。
systemd
Section titled “systemd”在 Linux 系统下,使用 systemd 可以方便地控制 frps/frpc 的启动、停止、配置后台运行以及开机自启动。
- 如果您的 Linux 服务器上尚未安装 systemd,可以使用包管理器如 yum(适用于 CentOS/RHEL)或 apt(适用于 Debian/Ubuntu)来安装它:
# 使用 yum 安装 systemd(CentOS/RHEL)yum install systemd
# 使用 apt 安装 systemd(Debian/Ubuntu)apt install systemd- 使用文本编辑器 (如 vim) 在 /etc/systemd/system 目录下创建一个 frps.service 文件,用于配置 frps 服务。
[Unit]# 服务名称,可自定义Description = frp serverAfter = network.target syslog.targetWants = network.target
[Service]Type = simple# 启动frps的命令,需修改为您的frps的安装路径ExecStart = /path/to/frps -c /path/to/frps.toml
[Install]WantedBy = multi-user.target- 现在可以轻松地使用 systemd 来管理 frps/frpc 服务,实现启动、停止、自动运行和开机自启动。确保替换路径和配置文件名称以匹配您的实际安装。
# 启动frpsudo systemctl start frps# 停止frpsudo systemctl stop frps# 重启frpsudo systemctl restart frps# 查看frp状态sudo systemctl status frps# 设置开机自启sudo systemctl enable frps在Windows系统下,可以使用NSSM将FRP运行为系统服务。NSSM(Non-Sucking Service Manager)是一款轻量级的 Windows 服务管理工具。它能将普通的第三方 .exe 程序、脚本或 Java 应用封装为标准的 Windows 系统服务,并在程序崩溃时自动重启,确保服务稳定运行。
-
从官网下载nssm应用,双击可查看应用程序使用方式。
-
找一个目录存放nssm可执行文件,并在资源管理器路径栏输入powershell打开powershell
-
执行
.\nssm.exe install frpc吊起安装GUI
# 其他常用命令#修改服务:.\nssm.exe edit <服务名># 启动服务:.\nssm.exe start <服务名># 停止服务:.\nssm.exe stop <服务名># 删除服务:.\nssm.exe remove <服务名>- 执行文件路径选择frpc存放路径,arguments中填入
-c \path\to\frpc.toml来指定配置文件
frps.toml
Section titled “frps.toml”# 监听的IPbindAddr = "0.0.0.0"# 服务端口bindPort = 3000vhostHTTPPort=80vhostHTTPSPort=443
# 认证信息,与客户端一致auth.method = "token"auth.token = "xxxxxxx"
# web后台,浏览器可访问webServer.addr = "0.0.0.0"webServer.port = 4000webServer.user = "xxxxxxx"webServer.password = "xxxxxxx"需要保证外界可访问bindPort和webServer.port端口,可能需要调整服务器安全组。
frpc.toml
Section titled “frpc.toml”# 服务端信息serverAddr = "x.x.x.x"serverPort = 3000
# 认证信息,与服务端一致auth.method = "token"auth.token = "xxxxxx"
# 一些优化配置,详情参考https://gofrp.org/zh-cn/docs/reference/client-configures/transport.poolCount = 100transport.heartbeatInterval = 30transport.heartbeatTimeout = 90
# 日志log.to = "/path/to/frp/log"log.level = "info"
# 代理示例# 将本地9999的服务暴露为x.x.x.x:21999[[proxies]]name = "proxy_tcp"type = "tcp"localIP = "127.0.0.1"localPort = 9999remotePort = 21999# 将域名访问通过插件代理到内网[[proxies]]name = "https2http"type = "https"customDomains = ["example.com", "*.example.com"][proxies.plugin]type = "https2http"localAddr = "127.0.0.1:80"crtPath = "/etc/nginx/cert.d/ssl.pem"keyPath = "/etc/nginx/cert.d/ssl.key"requestHeaders.set.x-from-where = "frp"