Skip to content

Repository files navigation

ProxyNT 是一个反向代理服务器,可以透过NAT和防火墙将本地服务器暴露到公网上

内网穿透工具

原理

原理

特性

  1. 随时随地打开浏览器管理端口映射
  2. 公网服务器和内网客户端之间使用 WebSocket 加密传输
  3. 依赖少, 使用 pip一键安装
  4. 稳定, 自动重连, 已在生产环境中使用
  5. 支持限速
  6. 支持 TCP 和 `UDP 协议
  7. 支持客户端到客户端(C2C)转发,无需在目标端暴露公网端口

常用场景

  1. 在家托管网站服务器
  2. 管理物联网设备
  3. 远程访问家里/公司的其他内网机器(C2C 转发)
  4. 多地内网设备互联互通

安装

pip install -U proxynt

如果需要安装安卓端 点击

使用教程

假设公网服务器的 IP 是 43.144.9.224

准备工作

1. 在公网服务器上启动服务端

创建 config_s.json

{
  "port": 18888,
  "path": "/websocket_path",
  "password": "helloworld",
  "admin": {
    "enable": true,
    "admin_password": "admin123"
  }
}

启动服务端:

nt_server -c config_s.json

示例一、将端口暴露在公网

适用场景:让公网上的任何人都能访问你的内网服务(如个人网站、远程桌面等)

步骤 1:在内网机器上启动客户端

创建 config_c.json

{
  "server": {
    "url": "ws://43.144.9.224:18888/websocket_path",
    "password": "helloworld"
  },
  "client_name": "home_pc"
}

启动客户端:

nt_client -c config_c.json

步骤 2:Web 界面配置端口映射

  1. 打开浏览器访问:http://43.144.9.224:18888/websocket_path/admin
  2. 输入管理密码 admin123 登录
  3. 找到客户端 home_pc,点击"转发配置"按钮
  4. 填写配置:
    • 名称:ssh
    • 远程端口:12222
    • 本地 IP:127.0.0.1
    • 本地端口:22
    • 协议:TCP
  5. 点击确定

步骤 3:通过公网访问

现在任何人都可以通过公网 IP 访问你的内网服务:

ssh -p 12222 user@43.144.9.224

示例二、安全地访问内网服务(无需暴露公网端口)

适用场景:在办公室访问家里的电脑,或让朋友访问你的内网服务,但不想暴露在公网上

原理:访问者和服务提供者都运行客户端,通过服务器建立安全连接

示例:在办公室(机器 A)访问家里(机器 B)的 SSH

步骤 1:两台机器都启动客户端

机器 A(办公室)的 config_c.json

{
  "server": {
    "url": "ws://43.144.9.224:18888/websocket_path",
    "password": "helloworld"
  },
  "client_name": "office_pc"
}

机器 B(家里)的 config_c.json

{
  "server": {
    "url": "ws://43.144.9.224:18888/websocket_path",
    "password": "helloworld"
  },
  "client_name": "home_pc"
}

两台机器都启动客户端:

nt_client -c config_c.json

步骤 2:Web 界面配置 C2C 规则

  1. 打开管理页面:http://43.144.9.224:18888/websocket_path/admin
  2. 点击任一客户端右侧的"C2C 规则"按钮 img.png
  3. 填写配置:
    • 规则名称: 随便, 比如: abc
    • 源客户端:office_pc(访问方)
    • 目标客户端:home_pc(被访问方)
    • 连接模式:直连模式
    • 目标 IP:127.0.0.1
    • 目标端口:22
    • 本地 IP:127.0.0.1
    • 本地端口:12222
    • 协议:TCP
  4. 点击确定

步骤 3:在办公室访问家里的电脑

在办公室(机器 A)上:

ssh -p 12222 user@127.0.0.1

就可以安全地访问家里电脑的 SSH 了!

特点

  • ✅ 家里电脑无需暴露任何公网端口
  • ✅ 只有你能访问,其他人无法访问

高级配置参考

大部分功能都可以通过 Web 界面配置,以下是完整的配置文件参考(适用于需要通过配置文件管理的场景)。

点击展开查看完整配置示例

客户端配置 (config_c.json)

{
  "server": {
    "url": "ws://43.144.9.224:18888/websocket_path",
    "password": "helloworld"
  },
  "client_name": "my_computer",
  "log_file": "/var/log/nt/nt.log"
}

说明

  • server.url: 服务器 WebSocket 地址(ws:// 或 wss://)
  • server.password: 连接密码
  • client_name: 客户端名称(必须唯一)
  • log_file: 日志文件路径(可选)
  • 端口映射建议在 Web 界面配置,无需写在配置文件中

服务端配置 (config_s.json)

{
  "port": 18888,
  "password": "helloworld",
  "path": "/websocket_path",
  "log_file": "/var/log/nt/nt.log",
  "admin": {
    "enable": true,
    "admin_password": "admin123"
  }
}

说明

  • port: 监听端口
  • password: 连接密码
  • path: WebSocket 路径
  • admin.enable: 是否启用 Web 管理界面
  • admin.admin_password: 管理界面密码
  • C2C 规则建议在 Web 界面配置,无需写在配置文件中

趋势

Stargazers over time

更新记录

  • 2.0.59.rc2: UDP 接收改用 select 监听降低 CPU 占用;服务端消息处理增加背压控制;客户端 sendall 增加超时;修复 send_lock 内存泄漏和竞争条件
  • 2.0.59.rc1: SelectPool 改用单线程 modify 事件掩码模式,去除线程池和锁,修复 socket 丢失注册导致连接冻结的问题
  • 2.0.2: 新增 C2C 直连模式,无需在目标端暴露端口
  • 2.0.1: 支持客户端到客户端(C2C)转发
  • 2.0.0: 支持 UDP 协议转发
  • 1.1.9: 端口限速
  • 1.1.8: 管理页显示客户端版本
  • 1.1.7: 修复服务端处理重复client_name
  • 1.1.6: 修复客户端 WebSocketException: socket is already opened

About

内网穿透工具 基于Python/WebSocket实现, Expose your local services to the internet.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages