跳到主要内容
版本:4.1

Dmtp内网穿透

简介

Dmtp内网穿透(Relay) 是TouchSocket Pro提供的一项强大功能,基于Dmtp协议实现安全、高效的内网穿透服务。它允许外部网络通过中继服务器访问位于内网的服务,无需复杂的路由配置或公网IP。

主要特性

  • 端口映射:将内网服务端口映射到中继服务器的公网端口
  • 双向通信:支持完整的TCP双向数据传输
  • 连接管理:自动管理多个并发连接,支持连接状态监控
  • 权限控制:支持在端口注册时进行权限验证和配置自定义
  • 高性能:基于Dmtp协议,采用引用计数和内存池优化,减少内存分配
  • 易于集成:插件化设计,可轻松集成到现有Dmtp应用中

应用场景

  • 远程访问内网Web服务
  • 物联网设备远程管理
  • 开发环境临时分享
  • 跨网络的服务调用
  • 企业内外网服务互通

快速开始

安装

提示

Dmtp内网穿透功能需要 TouchSocketPro 商业版授权。

Install-Package TouchSocketPro.Dmtp

基本架构

Dmtp内网穿透系统由三个主要组件组成:

  1. 中继服务器(Relay Server):部署在有公网IP的服务器上,负责接收外部连接并转发到内网客户端
  2. 内网客户端(Relay Client):运行在内网环境,连接到中继服务器并注册端口映射
  3. 外部客户端(External Client):通过中继服务器的公网端口访问内网服务
[外部客户端] ---> [中继服务器:8889] ---> [内网客户端] ---> [内网服务:8848]

使用示例

1. 启动中继服务器

首先需要在有公网IP的服务器上启动中继服务器:

🔄 正在加载代码...

关键配置说明:

  • AddDmtpRelayService():注册中继服务所需的依赖服务
  • UseDmtpRelay():启用Dmtp内网穿透功能
  • AddDmtpRelayRegisteringPlugin:添加端口注册插件,可在此进行权限验证和配置自定义

2. 启动内网客户端

在内网环境中启动客户端,并注册端口映射:

🔄 正在加载代码...

端口映射说明:

  • LocalIPHost:内网服务的实际地址和端口(如 127.0.0.1:8848
  • RemoteIPHost:中继服务器上要监听的公网地址和端口(如 0.0.0.0:8889

3. 启动内网测试服务

为了测试,我们需要在内网启动一个简单的TCP服务:

🔄 正在加载代码...

4. 测试连接

外部客户端通过中继服务器的公网端口连接到内网服务:

🔄 正在加载代码...

完整示例

🔄 正在加载代码...

性能优化

内存优化

Dmtp内网穿透采用了多项内存优化技术:

  • 引用计数:使用 SharedPayload 类实现Payload共享,避免重复复制
  • ArrayPool:使用 ArrayPool<byte> 管理临时缓冲区,减少GC压力
  • 零拷贝:使用 ReadOnlySequence<byte> 支持零拷贝场景

连接复用

中继服务器会自动管理连接池,复用TCP连接以减少连接建立开销。

注意事项

  1. 端口冲突:确保中继服务器上的端口未被占用
  2. 防火墙配置:确保中继服务器的公网端口对外开放
  3. 安全性:建议使用 VerifyToken 进行身份验证,避免未授权访问
  4. 网络延迟:内网穿透会增加一定的网络延迟,不适合对延迟敏感的应用
  5. 带宽消耗:所有流量都需要经过中继服务器,注意服务器带宽限制
  6. 资源管理:及时关闭不再使用的中继客户端,释放服务器资源

总结

Dmtp内网穿透是一个功能强大、易于使用的内网穿透解决方案。通过简单的配置,即可实现安全、高效的内网服务暴露。结合Dmtp协议的其他功能,可以构建完整的分布式通信系统。