Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

xlan: Golang 实现一个内网穿透工具 #52

Open
isayme opened this issue Sep 29, 2020 · 0 comments
Open

xlan: Golang 实现一个内网穿透工具 #52

isayme opened this issue Sep 29, 2020 · 0 comments
Labels

Comments

@isayme
Copy link
Owner

isayme commented Sep 29, 2020

目标

通过因特网(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 通信的目的.

@isayme isayme added the golang label Sep 29, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant