现代,简单的TCP隧道,将本地端口暴露于远程服务器,绕过标准的NAT连接防火墙。这就是全部:不再,而且不再如此。
#安装(需要生锈,请参见下面的替代方案)货物安装孔 - CLI#在您的本地机器bore本地8000 - bore.pub
这将使您在localhost:8000
将您的本地端口曝光到bore.pub:<PORT>
,其中端口号被随机分配。
与LocalTunnel和Ngrok类似,除了bore
外,旨在是一种高效,未开放的工具,用于转发TCP流量,易于安装,易于自我托管,没有装饰。
( bore
总计约400行安全,异步生锈代码,并且可以设置很琐碎 - 只需为客户端和服务器运行一个二进制文件即可。)
如果您在MacOS上, bore
将作为自制核心配方包装。
酿造孔CLI
否则,安装孔的最简单方法来自预建二进制。这些可在MacOS,Windows和Linux的版本页面上找到。只需解压缩适当的平台文件,然后将bore
可执行即可移动到路径上的文件夹中。
您还可以使用Rust Package Manager Cargo从源头建造bore
。此命令将bore
安装在用户访问路径上。
货物安装钻孔
我们还为每个版本发布版本的Docker图像。该图像是为AMD 64位体系结构而构建的。它们标记为特定版本,并允许您从最小的“刮擦”容器中运行静态连接的bore
。
docker run - it-init -rm -network主机ekzhang/bore <args>
本节介绍了bore
CLI命令的详细用法。
您可以使用bore local
命令在本地计算机上转发端口。这需要一个位置参数,要转发的本地端口以及强制性--to
选项,该选项指定了远程服务器的地址。
孔本地5000-孔。
您可以选择传递--port
选项,以在遥控器上选择特定端口以公开,尽管如果此端口不可用,则命令将失败。此外,通过--local-host
除了Loopback地址localhost
外,您可以在局域网上公开其他主机。
完整选项如下所示。
启动远程服务器的本地代理 用法:bore local [options] - to <to> <local_port>参数:<local_port>曝光的本地端口 选项: -l, - 本地主持人<主机>露出的本地主机[默认:localhost] -t, - to <到>远程服务器的地址,将本地端口暴露于[env:bore_server =] -p,-port <port>在远程服务器上的可选端口以选择[默认值:0] -s, - 秘密<Secret>身份验证的可选秘密[env:bore_secret] -h, - 螺旋打印帮助信息
如启动说明中所述,在bore.pub
上运行的bore
服务器的公共实例。但是,如果您想在自己的网络上进行自主bore
,则可以使用以下命令这样做:
孔服务器
这就是全部!服务器开始以给定地址运行后,您可以使用选项更新bore local
命令--to <ADDRESS>
将本地端口转发到此远程服务器。
bore server
命令的完整选项如下所示。
运行远程代理服务器 用法:孔服务器[选项] 选项: -Min-port <min_port>最低接受的TCP端口号[默认值:1024,env:bore_min_port] -max-port <ax_port>最大接受的TCP端口号[默认值:65535,env:bore_max_port] -s, - 秘密<Secret>身份验证的可选秘密[env:bore_secret] -h, - 螺旋打印帮助信息
7835
处有一个隐式控制端口,用于按需创建新的连接。在初始化时,客户端将“ Hello”消息发送给TCP控制端口的服务器,要求代理选定的远程端口。然后,服务器以确认响应,并开始聆听外部TCP连接。
每当服务器在远程端口上获得连接时,它就会为该连接生成安全的UUID,并将其发送回客户端。然后,客户端将单独的TCP流向服务器打开,并发送包含该流上UUID的“接受”消息。然后,服务器将两个连接彼此之间。
出于正确的原因,为了避免内存泄漏,服务器仅由服务器存储长达10秒钟,然后如果客户端不接受,则将其丢弃。
在自定义的bore server
上,您可以选择需要一个秘密来防止其他人使用的服务器。该协议要求客户通过以HMAC代码的形式回答随机挑战来验证每个TCP连接上的秘密。 (此秘密仅用于初始握手,默认情况下没有进一步的流量。)
#在serverbore服务器上 - 销售my_secret_string#clientbore local <local_port> - to <to> - scret my_secret_string
如果参数中不存在秘密,则bore
还将尝试从BORE_SECRET
环境变量中读取。
由Eric Zhang(@ekzhang1)创建。根据MIT许可获得许可。
作者要感谢Tokio项目的贡献者和维护者,以使在Rust中撰写符合人体工程学和高效的网络服务成为可能。