Fork me on GitHub

.NET + SignalR 的反向代理 websocket/http 数据隧道

开源项目TuToDataTunnel: https://github.com/viordash/TuToDataTunnel,这个项目可以满足以下几个需求:

  1. 使用一个公网 IP 地址和一个 tcp 端口,默认端口为 80 http。

  1. Websocket 或 http 隧道传输、性能或可访问性。理想情况下,将自动选择最佳可用交换协议。

  1. 同时通过隧道传输多个 TCP 和 udp 套接字。

  1. 可通过启动参数配置的跨平台控制台应用程序

image

整个解决方案是 两个应用程序TutoProxy.Server和TutoProxy.Client:

TutoProxy.Server应用程序是用于隧道客户端和tcp/udp终端客户端的入站服务器,部署在公网上。它的启动参数是:

  • <host>,服务器的地址,例如 http://200.100.10.1:8088

  • --tcp <tcp>,侦听的 TCP 端口列表,例如 --tcp=80,81,443,8000-8100。(可选)前提是存在 --udp 选项。

  • --udp <udp>,侦听的 UDP 端口列表,例如 --udp=700-900,65500。(可选)前提是存在 --tcp 选项。

  • --客户端<客户端>允许客户端的可选列表,例如 --client=Client1,Client2 如果省略此参数,则不会对连接的客户端进行访问检查

例如,用于启动大约 50 个 TCP/UDP 端口到三个客户端的输入隧道的行如下所示:

TutoProxy.Server http://200.100.10.1:8088 --tcp=3389,8071-8073,10000-10010,20000-20010 --udp=5000-5010,7000-7010 --clients=Client0Linux,ClientSecLinux,Client3Win


TutoProxy.Client应用程序是一个出口隧道客户端。

它的启动参数是:

  • <server>,TutoProxy.Server服务器的地址,例如 http://200.100.10.1:8088

  • <sendto>,数据目标的 IP,例如 127.0.0.1

  • --id <id>, 客户端 ID,例如 --id=Client1

  • --tcp <tcp>,TCP 端口列表,例如 --tcp=80,81,443,8000-8100。(可选)前提是存在 --udp 选项。

  • --udp <udp>,UDP 端口列表,例如 --udp=700-900.65500。(可选)前提是存在 --tcp 选项。

例如,启动 5 个 tcp 和 3 个 udp 端口的输出隧道的行将如下所示:

TutoProxy.Client http://200.100.10.1:8088 127.0.0.1 --tcp=8071,10000,20004-20006 --udp=7000-7002 --id= Client0Linux.

重要的是要考虑到不同TutoProxy.Client的端口不应该重叠,即每个客户端提供一组唯一的套接字/端口。

posted @ 2023-05-17 11:01  张善友  阅读(417)  评论(2编辑  收藏  举报