目标

通过因特网(Internet)访问局域网(LAN)中的服务.

限制条件

内网本身无因特网IP, 无法通过局域网路由器的端口转发功能转发请求.

解决方案

方案为内网穿透, 目前有开源产品 frp. 本文实现的工具取名 xlan, 服务端, 客户端分别称为 xlansxlanc

设计

完整通信链路由 4 部分组成: 用户(user), 内网穿透服务端(xlans), 内网穿透客户端(xlanc), 最终服务(service), 其中 xlans 有公网 IP 地址.

总体思路: user 无法直接访问 service, 但是可以访问 xlans, xlans 将用户的请求转交给 xlanc, 由 xlanc 代为访问 service.

关键链路

image

第1步: xlanc 启动时与 xlans 建立控制连接, 注册 service 信息, 接收来自 xlans 的指令; 第2步: user 向 xlans 发起请求, 建立连接 A; 第3步: xlans 向 xlanc 发起指令, 告知有 user 请求 service; 第4步: xlanc 向 xlans 建立数据连接 B; 第5步: xlanc 向 service 建立连接 C; 最后: xlans 将连接 A 和 B 的数据进行交换, xlanc 将连接 B 和 C 的数据进行交换, 达到 user 和 service 通信的目的.