【内网穿透】Nhop 实战指南:两大核心部署场景与配置详解github地址:github.com/yu47/Nhop写在前面大多数人使用内网穿透,都是为了“把内网服务暴露给公网”,方便进行 Web 测试或提供外部访问。但是,如果我们要访问的内网服务包含了敏感数据(如公司内部的 Gitlab、私有数据库),直接将其暴露在公网 IP 上无异于“裸奔”,极易遭到爆破和扫描。这时,我们就需要一种更安全的“内网中继”方案。详细请看场景2今天,我们就来深度剖析并实战演练 Nhop 的两大核心部署模型:对外暴露服务模型 与 内网访客中继模型(Client-Server-Client) 。Nhop 的核心优势极致轻量:由纯 C 语言编写,编译后的可执行文件体积极小(几百KB级别),运行时的内存占用甚至可以忽略不计。高性能,低延迟:底层直接采用高效的 I/O 多路复用模型,数据转发效率极高,没有多余的 GC(垃圾回收)开销。跨平台支持:支持在 Linux、Windows以及各种基于 ARM 的嵌入式系统上运行。极简配置:抛弃了复杂的配置文件,通过几条简单的命令行参数即可拉起服务,非常适合极客和喜欢“开箱即用”的开发者。️ 场景 1:对外暴露服务 (Server-Agent 模型)这是最经典的内网穿透场景。通过部署在公网的 Server 节点,直接将内网的服务端口映射到公网上,供外部用户直接访问。流量路径External Client (外部访客) -> Nhop Server (公网) -> Nhop Agent (内网) -> Target Service (目标服务)
实战配置指南Server 示例文件:conf/node_scene1_c_hub.confAgent 示例文件: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的核心优势极致安全:公网 VPS 不开放任何业务端口(如 3306、22),黑客即使扫描你的公网 IP,也根本找不到任何服务的入口。按需打通:只有运行了正确配置的 Nhop 访客客户端,才能接入这条隧道,相当于在公网上拉了一根隐形的私有网线。穿透隔离网络:完美解决两个处于不同 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]
li
...(已截断)
---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-291289.htm
[原创] C语言编写,轻量级端到端内网穿透工具
452 浏览
0 回复
暂无回复,快来抢沙发吧!