一、实验概述
本实验通过 TUTK P2PTunnelAPIs 建立外网与内网设备的P2P隧道,实现外网客户端(Windows)通过SFTP协议访问内网服务端(Ubuntu,模拟NAS设备)的文件。核心逻辑为:内网设备启动Tunnel Server→外网客户端启动Tunnel Agent→建立P2P隧道并映射端口→通过本地映射端口访问内网设备,只需要简单修改代码,就可以快速访问设备。
二、实验准备
需准备2台电脑分别作为服务端(内网设备)和客户端(外网访问端),并完成基础软件安装:
1服务端配置(模拟内网NAS设备)
- 设备要求:安装 Ubuntu 22.04 系统的电脑(需处于内网环境,如家庭WiFi);
- 必备软件:
- openssh-server:提供SFTP文件传输服务;
- TUTK P2P SDK:需包含 P2PTunnelAPIs 模块(用于启动Tunnel Server)。
- 参考资源:
- 开发流程:基于P2PTunnelAPIs和TCPIP协议开发NAS(或者摄像头)-设备端;
- Demo路径:
SDK目录/Sample/Linux/Sample_P2PTunnelAPIs。
2客户端配置(外网访问端)
- 设备要求:安装 Windows 系统的电脑(需处于外网环境,与服务端不在同一局域网);
- 必备软件:
- Xftp:Windows 平台SFTP客户端工具(用于文件上传/下载);
- TUTK P2P SDK:需包含 P2PTunnelAPIs 模块(用于启动Tunnel Agent)。
- 参考资源:
- 开发流程:基于P2PTunnelAPIs和TCPIP协议开发NAS(或者摄像头)-APP端;
- Demo路径:
SDK目录/Sample/Windows/Sample_P2PTunnel(可联系官方获取编译好的客户端)。
三、实验步骤(基础环境搭建)
先完成服务端和客户端的基础环境搭建(P2PTunnel 隧道流程),假设该部分已成功跑通,重点说明后续SFTP访问配置:
3.1 服务端基础配置
步骤1安装并启动 ssh-server
执行以下命令安装 openssh-server,启动SFTP服务(默认端口22):
sudo apt-get install openssh-server
说明:安装完成后,ssh-server 自动启动,可通过
sudo systemctl status ssh 查看运行状态。步骤2启动 P2PTunnel Server
参考 Demo
Sample_P2PTunnelAPIs 的流程,启动服务端的 Tunnel Server,完成与TUTK服务器的注册,等待客户端Tunnel Agent连接。 说明:Tunnel Server 启动后,需记录设备UID(用于客户端识别目标设备),无需额外配置端口(默认适配ssh-server的22端口)。
3.2 客户端基础配置
步骤1安装 Xftp 软件
下载并安装 Windows 版本 Xftp 软件(官网或第三方正规渠道获取),安装流程略(按默认步骤下一步即可)。
步骤2启动 P2PTunnel Agent 并配置端口映射
参考 Demo
Sample_P2PTunnel 的流程,启动客户端的 Tunnel Agent,输入服务端设备UID,建立P2P隧道,并配置端口映射:核心映射配置(关键!):
- 目标:将内网服务端的 ssh-server 22端口,映射到客户端本地的
10001端口; - 原理:外网无法直接访问内网IP,通过P2PTunnel Agent将内网设备的22端口映射为客户端本地的10001端口,后续访问本地10001端口即可穿透到内网22端口。

说明:映射端口可自定义(如10002、10003等),需确保客户端本地端口未被占用。
四、核心配置:通过Xftp访问内网服务端
P2PTunnel 隧道建立成功后,通过Xftp配置连接,关键是替换访问IP和端口(内网IP→本地回环IP,内网端口→映射端口):
步骤1新建 Xftp 连接
打开 Xftp 软件,点击“新建”按钮,弹出连接配置窗口,按以下参数填写:
- 协议:选择
SFTP(默认基于SSH协议,与ssh-server适配); - 主机:填写
127.0.0.1(本地回环IP,对应P2PTunnel Agent的映射端口); - 端口:填写
10001(客户端本地映射端口,与Tunnel Agent配置一致); - 用户名:填写 Ubuntu 服务端的登录用户名(如root、ubuntu等);
- 密码:填写 Ubuntu 服务端的登录密码。

步骤2建立连接并访问文件
填写完成后点击“连接”,Xftp 将通过本地10001端口穿透到内网服务端的22端口,连接成功后即可看到服务端的文件目录:

步骤3文件上传与下载
连接成功后,支持双向文件传输,操作方式与局域网内SFTP访问一致:
- 上传文件:选中Windows客户端本地文件,拖拽至服务端目录,或点击工具栏“上传”按钮;
- 下载文件:选中服务端文件,拖拽至Windows本地目录,或点击工具栏“下载”按钮。


五、关键说明
核心原理与注意事项
1. 端口映射逻辑:P2PTunnelAPIs 本质是建立外网与内网的虚拟隧道,客户端本地映射端口相当于“隧道入口”,所有发送到该端口的数据都会通过隧道转发到内网设备的目标端口(如22);
2. IP替换原因:127.0.0.1 是本地回环地址,仅本机可访问,通过该地址访问映射端口,可确保数据被Tunnel Agent捕获并转发,避免外网直接访问的限制;
3. 权限要求:服务端ssh-server需允许用户名密码登录(默认开启),若仅允许密钥登录,需在Xftp中配置对应私钥;
4. 连接稳定性:P2P隧道连接成功后,文件传输速度取决于双方网络带宽,建议避免传输超大文件(如超过1GB),可分块传输。
六、拓展Tips(重要!)
多协议适配方案
本实验的SFTP(基于SSH)对接方法可直接复用至其他TCP/IP协议,核心逻辑完全一致:
- 设备端(内网):无需改动,仅需启动对应服务(如HTTP服务80端口、FTP服务21端口、RTSP服务554端口)和 P2PTunnel Server;
- 客户端(外网):
- 启动 P2PTunnel Agent,将内网服务端口映射为本地端口(如HTTP 80→本地10002);
- 在对应客户端软件中,将访问IP改为
127.0.0.1,端口改为本地映射端口(如10002),即可实现外网访问。
示例:外网访问内网HTTP服务(80端口)→ 映射本地10002端口 → 浏览器访问 http://127.0.0.1:10002。
