#quic #tunnel #client-server #p2p #client-connect #hole-punching #networking

nightly app portal-tunneler

通过打洞QUIC连接创建类似SSH的TCP隧道

1 个不稳定版本

0.1.0-beta.02024年4月6日

#8 in #hole-punching

MIT/Apache

290KB
6K SLoC

portal-tunneler

通过打洞QUIC连接创建类似SSH的TCP隧道。

Portal端点可以以两种模式运行

  • 客户端:连接到服务器并请求隧道
  • 服务器:监听传入的连接,总体上只是执行客户端的要求

并且,Portal端点可以以两种模式相互连接

  • 直接:典型的连接。服务器监听传入的连接,客户端与它通信
  • 打洞:客户端和服务器创建“连接代码”,并要求用户交换它们。一旦双方都收到对方的连接代码,就使用打洞建立直接连接。

隧道通过参数指定,与SSH中的方式类似,因此请参阅SSH手册中的-L-R-D选项以获取更多信息。唯一的不同之处在于,在SSH中使用-D指定的本地动态隧道,在portal中用-L代替,以便简化。

该项目处于测试阶段!

虽然该项目已经实现了大多数主要功能,但仍有一些功能尚未实现(最显著的是帮助菜单,它只是打印出“I need somebody”),并且项目在发布前需要一些清理和重构以使其更美观。它还包含不必要的冗长打印。

此外,此测试版不保证稳定性、安全性或与其他版本的兼容性。

安装

推荐使用来自crates.io的cargo进行安装

cargo install portal-tunneler

或直接从GitHub获取

cargo install --git https://github.com/ThomasMiz/portal-tunneler.git portal-tunneler

这两种方法都会下载和编译portal的代码及其所有依赖项。完成后,portal可执行文件将以portal的名称可用。

下载二进制文件

如果您未安装 cargo,可以在 发布页面 找到为 x84_64 Windows 和 Linux 预编译的二进制文件。

使用示例

由于还没有帮助菜单,以下是一些使用示例。在不提供任何参数的情况下运行 portal 将启动一个监听在 0.0.0.0:5995 和 [::]:5995 的服务器。

在 192.168.1.100:5995 上启动一个服务器(端口是隐式的,因为 5995 是 portal 的默认端口)

portal --listen 192.168.1.100

启动一个客户端,连接到 192.168.1.100:5995 的服务器,并打开一个本地隧道,该隧道在本地的 4444 端口监听,并将连接隧道到 localhost:5555

portal --connect 192.168.1.100 -L4444:localhost:5555

与之前相同,但隧道不是指向 localhost:5555,而是一个使用 SOCKS4/SOCKS5 进行代理的动态隧道

portal --connect 192.168.1.100 -L5555

如果您想建立穿透连接而不是直接连接,那么应该使用 --punch 而不是 --connect--listen

服务器运行

portal --punch

客户端运行

portal --punch -L4444:localhost:5555

现在我们进入重点部分。如果您想玩 Minecraft,那么托管服务器的用户应该运行

portal --punch

客户端应该运行

portal --punch -L25565:localhost:25565

连接建立后,您应该让 Minecraft 客户端连接到 localhost:25565。

依赖关系

~13–23MB
~418K SLoC