Rust jsonrpsee 服务器中的主机过滤:允许中继节点的所有连接,限制其他节点的本地主机

问题描述 投票:0回答:1

我正在使用 Rust 中的

jsonrpsee
箱来实现 RPC 服务器。我想以这样的方式设置主机过滤:

  • 中继节点可以接收来自任意节点的RPC调用。
  • 其他节点应该只响应来自中继节点和本地主机的 RPC 调用。

这是我当前的代码:

use jsonrpsee::http_server::{ServerBuilder, ServerHandle};
use std::error::Error;
use tower::{ServiceBuilder, layer::util::HostFilterLayer};

async fn start_rpc_server(port: String, is_relay_node: bool) -> Result<ServerHandle, Box<dyn Error>> {
    let rpc = RpcServerImpl::new();

    // Allow only localhost if not a relay node
    let host_filter = if is_relay_node {
        HostFilterLayer::new(["localhost"]) // How to allow any connection here?
    } else {
        HostFilterLayer::new(["localhost"])
    }.unwrap();

    let middleware = ServiceBuilder::new()
        .layer(host_filter);

    // Create the server with appropriate middleware
    let server = ServerBuilder::default()
        .set_http_middleware(middleware)
        .build(format!("0.0.0.0:{}", port))
        .await
        .map_err(Box::new)?;

    let addr = server.local_addr().unwrap();
    if is_relay_node {
        info!("Starting Relay node with RPC at {:?}", addr);
    } else {
        info!("Starting local RPC server at {:?}", addr);
    }

    Ok(server.start(rpc.into_rpc()))
}

我不确定如何配置

HostFilterLayer
以允许中继节点的所有传入连接,同时将其他节点限制为仅本地主机和中继节点。

问题

  1. HostFilterLayer
    is_relay_node
    时,如何配置
    true
    以允许任何传入连接?
  2. 如果
    HostFilterLayer
    不适合这种情况,是否有其他方法可以使用
    jsonrpsee
    实现这种条件主机过滤?

预先感谢您的帮助!

rust json-rpc
1个回答
0
投票

如果

is_relay_mode
为 true,只需跳过应用
HostFilterLayer
以允许所有连接。对于其他节点,使用
HostFilterLayer
限制为本地主机和中继节点。对于更复杂的过滤,请考虑创建自定义中间件。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.