自建内网穿透服务

本文最后更新于:几秒前

自建内网穿透服务

image-20241111014054731

开源工具:frp

仓库地址:https://github.com/fatedier/frp

下载对应的版本。

我是基于centos与window使用

image-20241111012041220

服务端配置

上传包,解压

配置文件默认是7000端口,不改也行

直接启动./frps即可

当然,可以使用 pm2 来管理 FRP 服务端

1. 安装 pm2(如果尚未安装)

  • 如果服务器是基于 Node.js 环境,使用以下命令全局安装 pm2:
1
npm install -g pm2

2. 配置frps启动脚本

  • 创建一个启动frps的脚本文件(例如frps-start.sh),内容如下:
1
2
#!/bin/bash
./frps -c./frps.ini # 这里假设你的frps.ini和frps在同一目录,如果不是需要修改路径
  • 赋予脚本执行权限:
1
chmod +x frps-start.sh

3. 使用 pm2 启动frps

  • 在终端中执行以下命令,通过 pm2 启动frps
1
pm2 start frps-start.sh --name frps

这里--name frps是给这个进程命名为frps,方便后续对其进行管理。

4. pm2 常用管理命令

  • 查看frps运行状态
1
pm2 status frps
  • 重启frps**:
1
pm2 restart frps
  • **停止frps**:
1
pm2 stop frps
  • 查看frps的日志
1
pm2 logs frps

使用 pm2 管理frps可以方便地实现进程守护、自动重启等功能,提高服务的稳定性和可维护性。同时,在配置过程中要注意脚本中的路径和参数设置与你的实际环境相匹配。

客户端

解压,修改配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
serverAddr = "xxx.xxx"
serverPort = 7000

[[proxies]]
name = "test-tcp"
type = "tcp"
localIP = "127.0.0.1"
localPort = 8080
remotePort = 8085

[[proxies]]
name = "app2"
type = "tcp"
localIP = "127.0.0.1"
localPort = 8081
remotePort = 8085

可以配置多组

启动服务,用命令行交互窗口frpc.exe -c ./frpc.toml

为了方便,可以写个bat脚本,下次双击启动

1
2
3
@echo off
frpc.exe -c ./frpc.toml
pause

测试

假设你已经将本地的 8080 端口服务通过 FRP 映射到公网

  1. 本地服务情况
    • 假设本地运行着一个简单的 Web 服务,比如使用 Python 的 Flask 框架启动的一个应用,监听在本地的 8080 端口。示例代码如下(仅为示例,你可以是其他类型的 8080 端口服务):
1
2
3
4
5
6
7
8
9
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
return 'Hello, World!'

if __name__ == '__main__':
app.run(host='0.0.0.0', port=8080)
  1. 测试访问公网映射端口

    • 在公网的其他设备(比如你的手机使用移动数据网络,或者另外一台不在本地局域网内的电脑)上,打开浏览器。
    • 在浏览器地址栏中输入公网服务器的 IP 地址(如果配置了域名,使用域名也可以)和映射的公网端口(这里是 8080),例如http://公网服务器IP:8080或者http://your_domain.com:8080(如果使用域名)。
    • 如果一切正常,你应该能够看到在本地 8080 端口服务返回的内容,比如上述 Flask 示例中的 “Hello, World!” 信息。这就表明 FRP 成功实现了内网穿透,使得公网设备可以访问到本地局域网内的服务。
  2. 如果是其他类型的服务如 SSH、数据库等),可以使用相应的客户端工具进行测试

  • 对于 SSH 服务(假设将本地 22 端口的 SSH 服务通过 FRP 映射到公网 6000 端口)
    • 在公网设备上,使用 SSH 客户端(如 PuTTY,如果是 Windows 系统)。在 PuTTY 的配置中,输入公网服务器的 IP 地址(或域名)和映射的公网端口 6000,然后尝试连接。如果连接成功并能正常登录到本地 SSH 服务所在的机器,说明 FRP 对 SSH 服务的内网穿透成功。
  • 对于数据库服务(假设将本地 MySQL 的 3306 端口通过 FRP 映射到公网 7000 端口)
    • 在公网设备上,可以使用数据库连接工具(如 MySQL Workbench)。在连接设置中,将服务器地址设置为公网服务器的 IP 地址(或域名),端口设置为 7000,然后尝试使用正确的用户名和密码连接本地的 MySQL 数据库。如果能成功连接,表明 FRP 对数据库服务的内网穿透有效。

自建内网穿透服务
https://yan-sheng-li.github.io/blog/posts/57913.html
作者
李延胜
发布于
2024年11月11日
许可协议