
rathole 怎么配置 websocket 传输层并复用 TLS 设置【免费下载链接】ratholeA lightweight and high-performance reverse proxy for NAT traversal, written in Rust. An alternative to frp and ngrok.项目地址: https://gitcode.com/GitHub_Trending/ra/rathole如果你已经用 rathole 把 NAT 后面的服务暴露到公网现在想把传输层换成 websocket同时不想重新准备一套证书、而是直接复用已有的 TLS 设置核心就是两处改动把[client.transport]/[server.transport]的type设成websocket再在[*.transport.websocket]里把tls设为true让它套用同一个transport下tls块的证书配置。本文基于 rathole 的 完整配置说明、传输层文档、TLS 示例 与仓库内的 websocket TLS 测试配置给出从准备证书到验证转发打通的一条连续路径。前提websocket 传输需要对应特性编译进二进制rathole 的 websocket 能力由 Cargo.toml[features]决定默认特性包含websocket-native-tls依赖native-tls因此从 release 页拿到的默认构建、以及cargo build --release的产物已带 websocket TLS 能力。若改用 rustls需同时启用websocket-rustls依赖rustls。构建指南 给出的命令cargo build --release --no-default-features --features server,client,rustls,noise,websocket-rustls,hot-reload注意rustls/websocket-rustls与native-tls/websocket-native-tls互斥同时开启会编译报错。使用 rustls 构建时未启用websocket-rustls则 websocket 能力不随二进制编译。准备被复用的那份 TLS 设置websocket 的tls true会直接读取同一transport下的tls块所以先把这套 TLS 设置准备好它和普通 TLS 传输用的是同一份材料见 传输层文档服务端——需要 PKCS#12 归档含服务端证书与私钥。文档给出的 openssl 命令openssl pkcs12 -export -out identity.pfx -inkey server.key -in server.crt -certfile ca_chain_certs.crt参数-inkey服务端私钥、-in服务端证书、-certfileCA 证书。若用 rustls 构建p12crate 只支持有限的 PBE 算法需用 openssl 3 加-legacy生成旧格式openssl pkcs12 -export -out identity.pfx -inkey server.key -in server.crt -certfile ca_chain_certs.crt -legacy客户端——需要信任签发服务端证书的 CAtrusted_root指向根 CA 的 PEM 证书文件hostname是客户端校验证书用的主机名文档说明它不要求与[client]的remote_addr相同。仓库 TLS 示例 提供现成的证书材料rootCA.crt、identity.pfx、server.crt、server.key并附带一个生成自签证书供参考的脚本。服务端配置websocket 复用 tls 块在服务端配置文件里把transport的type设为websocket保留transport.tls块并在transport.websocket里设tls true# server.toml [server] bind_addr 0.0.0.0:2333 default_token default_token_if_not_specify [server.transport] type websocket [server.transport.tls] pkcs12 examples/tls/identity.pfx pkcs12_password 1234 [server.transport.websocket] tls true [server.services.echo] bind_addr 0.0.0.0:2334type websocket指定使用 websocket 传输。pkcs12/pkcs12_password是tls true时被复用的证书配置。tls true表示 websocket 连接套用上面tls块的 TLS 设置设为false则 websocket 不带 TLS。上面pkcs12路径与密码沿用文档中的示例证书websocket TLS 测试配置 使用同样的examples/tls材料与密码1234。实际部署请替换为你自己的归档路径与密码并把bind_addr端口改成要暴露的端口。客户端配置type 同样设为 websocket客户端与服务端对齐type也设为websockettls true复用自己的tls块# client.toml [client] remote_addr 127.0.0.1:2333 default_token default_token_if_not_specify [client.transport] type websocket [client.transport.tls] trusted_root examples/tls/rootCA.crt hostname localhost [client.transport.websocket] tls true [client.services.echo] local_addr 127.0.0.1:8080remote_addr的端口必须与服务端server.bind_addr的端口一致这里都是2333。default_token或服务级token两端必须一致才能通过校验。hostname用于证书校验不要求等于remote_addr。服务端与客户端的type、tls设置要对齐一端 websocket 而另一端是普通 tcp/tls连接无法按预期建立。运行分别用配置文件启动两端rathole 会按文件内容自动判断运行模式若[client]与[server]放在同一文件则用--server/--client显式指定./rathole server.toml ./rathole client.toml日志级别可通过环境变量控制例如RUST_LOGerror ./rathole config.toml只输出错误。验证转发是否打通按 快速上手 的转发模型客户端连上服务端后任何发往服务端服务bind_addr端口的流量都会被转到客户端的local_addr。以文档 quickstart 为例——服务端把服务暴露在5202、客户端本地服务在127.0.0.1:22打通后即可ssh myserver.com:5202访问 NAT 后面的机器。对照本文配置websocket TLS 测试配置 的示例值流量发往服务端0.0.0.0:2334echo服务应到达客户端127.0.0.1:8080发往0.0.0.0:2335应到达127.0.0.1:8081。文档中这些127.0.0.1地址是本地回环示例值真实部署请换成你的服务地址。限制与排查websocket 特性由websocket-native-tls默认特性包含或websocket-rustls提供rustls 与 native-tls含对应 websocket 特性互斥同时开启会编译失败。rustls 读取 PKCS#12 受 PBE 算法限制须用 openssl 3 加-legacy生成归档。transport.websocket的tls字段决定 websocket 是否套用tls块true复用 TLS 设置false为不带 TLS 的 websocket见 纯 websocket 测试配置。客户端证书校验依赖trusted_root签发服务端证书的 CA 证书与hostname校验用主机名文档说明其不要求等于remote_addr。【免费下载链接】ratholeA lightweight and high-performance reverse proxy for NAT traversal, written in Rust. An alternative to frp and ngrok.项目地址: https://gitcode.com/GitHub_Trending/ra/rathole创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考