首页
社区
课程
招聘
[原创] C语言编写,轻量级端到端内网穿透工具
发表于: 1天前 385

[原创] C语言编写,轻量级端到端内网穿透工具

1天前
385

【内网穿透】Nhop 实战指南:两大核心部署场景与配置详解

github地址:github.com/yu47/Nhop

写在前面

大多数人使用内网穿透,都是为了“把内网服务暴露给公网”,方便进行 Web 测试或提供外部访问。

但是,如果我们要访问的内网服务包含了敏感数据(如公司内部的 Gitlab、私有数据库),直接将其暴露在公网 IP 上无异于“裸奔”,极易遭到爆破和扫描。这时,我们就需要一种更安全的“内网中继”方案。详细请看场景2

今天,我们就来深度剖析并实战演练 Nhop 的两大核心部署模型:对外暴露服务模型内网访客中继模型(Client-Server-Client)

Nhop 的核心优势

  1. 极致轻量:由纯 C 语言编写,编译后的可执行文件体积极小(几百KB级别),运行时的内存占用甚至可以忽略不计。
  2. 高性能,低延迟:底层直接采用高效的 I/O 多路复用模型,数据转发效率极高,没有多余的 GC(垃圾回收)开销。
  3. 跨平台支持:支持在 Linux、Windows以及各种基于 ARM 的嵌入式系统上运行。
  4. 极简配置:抛弃了复杂的配置文件,通过几条简单的命令行参数即可拉起服务,非常适合极客和喜欢“开箱即用”的开发者。

️ 场景 1:对外暴露服务 (Server-Agent 模型)

这是最经典的内网穿透场景。通过部署在公网的 Server 节点,直接将内网的服务端口映射到公网上,供外部用户直接访问。

流量路径

External Client (外部访客)  ->  Nhop Server (公网)  ->  Nhop Agent (内网)  ->  Target Service (目标服务)


实战配置指南

Server 示例文件conf/node_scene1_c_hub.conf

Agent 示例文件conf/node_scene1_b_agent.conf

第一步:启动 Nhop Server (公网端)

在公网 VPS 上配置并启动 Server:

./Nhop -n server.conf


server.conf 配置如下:

mode=server 
bind_addr=0.0.0.0:9000 
token=nhop-demo 
crypto_mode=off


第二步:启动 Nhop Agent (内网端)

在运行目标服务(如 8080 端口的 Web 服务)的内网机器上启动 Agent:

./Nhop -n agent.conf


agent.conf 配置如下:

mode=agent 
server_addr=127.0.0.1:9000   # 实际使用中,请将此处替换为 Server 的公网 IP 
token=nhop-demo 
crypto_mode=off  

[service.web] 
target_addr=127.0.0.1:8080   # 本地实际运行的服务端口 
listen_addr=0.0.0.0:20880    # 期望 Server 在公网上暴露的访问端口


配置生效后,外部用户即可通过访问 Server公网IP:20880 直接访问到你内网的 8080 服务。


️ 场景 2:通过 Server 访问内网服务 (内网访客中继模型)

在“场景2”中,公网的 VPS 不再直接对外开放业务端口,而是纯粹作为一个 数据中转站(Relay Hub)

访问者所在的设备也需要运行一个 Nhop 客户端,通过公网服务器的身份校验后,与目标内网设备建立起一条安全的端到端隧道。

架构图解

[内网环境 A - 目标机器]          [公网环境 - VPS]            [内网环境 B - 访客机器] 
运行业务 (如 MySQL 3306)                              需要连接 MySQL 的电脑        
        |                      |                     | 
+---------------+              +---------------+             +---------------+ 
 Nhop Agent    |====== 安全隧道 =======|  Nhop Server  |====== 安全隧道 ==|  Nhop Client | 
 +---------------+  (主动连接 Server)  +---------------+  (主动连接 Server)  +---------------+


流量路径: Client (访客) -> Server (中转) -> Agent (被访端) -> Target Service (目标服务)

场景2的核心优势

  1. 极致安全:公网 VPS 不开放任何业务端口(如 3306、22),黑客即使扫描你的公网 IP,也根本找不到任何服务的入口。
  2. 按需打通:只有运行了正确配置的 Nhop 访客客户端,才能接入这条隧道,相当于在公网上拉了一根隐形的私有网线。
  3. 穿透隔离网络:完美解决两个处于不同 NAT 环境下的局域网设备互访问题。

????️ 实战配置指南

假设我们有如下环境:

  • VPS 服务器:IP 198.51.100.1,用于运行 Nhop Server。
  • 内网目标机(A) :运行着 MySQL 数据库,端口 3306
  • 内网访客机(B) :你的笔记本,想要通过本地的 33060 端口安全连接到机器A的数据库。

第一步:在 VPS 启动 Nhop Server (中转节点)

服务器端主要负责接收两边客户端的连接并进行流量桥接。

Bash

启动 Nhop 服务端 
./Nhop -n server.conf


server.conf 配置:

(注:加入了 token 验证机制,防止非法客户端蹭用你的中转服务器。)

mode=server 
bind_addr=0.0.0.0:9000 
token=nhop-demo 
crypto_mode=off


第二步:在目标机器(A)启动 Nhop Agent (被访端)

在运行 MySQL 的内网机器上,启动客户端。

启动客户端A 
./Nhop -n agent.conf


agent.conf 配置:

mode=agent 
server_addr=198.51.100.1:9000 
token=nhop-demo 
crypto_mode=off  

[service.db] 
target_addr=127.0.0.1:3306


第三步:在访客机器(B)启动 Nhop Client (访问端)

在你的笔记本上,同样启动 Nhop 客户端,通过把远程的 service.db 映射到本地。

启动客户端B (访客模式) 
./Nhop -n client.conf


client.conf 配置:

mode=client 
server_addr=198.51.100.1:9000  # 实际使用中,请替换为 Server 的公网 IP 
token=nhop-demo 
crypto_mode=off  

[service.db] 
listen_addr=0.0.0.0:33060


第四步:见证奇迹

现在,你的笔记本和内网目标机已经通过 VPS 建立了一条隐形隧道。你只需要打开数据库客户端(如 Navicat 或 DataGrip),连接 本地33060 端口:

Bash

mysql -h 127.0.0.1 -P 33060 -u root -p


连接成功!流量将按照 笔记本 -> VPS -> 内网主机A -> 目标服务 的路径进行高速且安全的转发。




传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 1天前 被yu47编辑 ,原因:
收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回