rpki/src/bin/rtr_debug_client
xiuting.xu b60d579a38 增加ssh
增加deploy下细分的tcp、tls、ssh
2026-04-22 16:02:42 +08:00
..
2026-04-22 16:02:42 +08:00
2026-04-01 16:24:01 +08:00
2026-03-26 10:04:09 +08:00
2026-04-22 16:02:42 +08:00
2026-04-01 16:24:01 +08:00

rtr_debug_client

rtr_debug_client 是用于 RTR 协议联调的命令行调试客户端,支持 TCPTLSSSH 三种传输。

它用于:

  • 手动发送 Reset QuerySerial Query
  • 持续接收并打印服务端 PDU
  • 观察 session_idserialEndOfData timing hint、ErrorReport 等状态变化

构建

cargo build --bin rtr_debug_client

基本用法

cargo run --bin rtr_debug_client -- <addr> <version> [reset|serial <session_id> <serial>] [options]

默认值:

  • addr: 127.0.0.1:323
  • version: 1
  • mode: reset
  • --timeout: 30
  • --poll: 600

TCP 用法

cargo run --bin rtr_debug_client -- 127.0.0.1:323 1 reset
cargo run --bin rtr_debug_client -- 127.0.0.1:323 1 serial 42 100

TLS 用法

仅校验服务端证书:

cargo run --bin rtr_debug_client -- \
  127.0.0.1:324 1 reset \
  --tls \
  --ca-cert tests/fixtures/tls/client-ca.crt \
  --server-name localhost

双向 TLS

cargo run --bin rtr_debug_client -- \
  127.0.0.1:324 1 reset \
  --tls \
  --ca-cert tests/fixtures/tls/client-ca.crt \
  --server-name localhost \
  --client-cert tests/fixtures/tls/client-good.crt \
  --client-key tests/fixtures/tls/client-good.key

SSH 用法(按 draft-ietf-sidrops-8210bis-25

rtr_debug_client --ssh 采用以下流程:

  • SSHv2 连接
  • session channel
  • 请求 subsystem,默认 rpki-rtr
  • 使用 publickey 认证
  • 强制服务端 host key 校验(known_hosts 或 pinned server key 二选一)

1. 使用 known_hosts 校验服务端

cargo run --bin rtr_debug_client -- \
  127.0.0.1:22 1 reset \
  --ssh \
  --ssh-user rpki-rtr \
  --ssh-key certs/rtr-client.key \
  --ssh-known-hosts certs/known_hosts

2. 使用固定服务端公钥校验

cargo run --bin rtr_debug_client -- \
  127.0.0.1:22 1 reset \
  --ssh \
  --ssh-user rpki-rtr \
  --ssh-key certs/rtr-client.key \
  --ssh-server-key certs/ssh_host_ed25519_key.pub

3. 自定义 subsystem 名称

cargo run --bin rtr_debug_client -- \
  127.0.0.1:22 1 reset \
  --ssh \
  --ssh-user rpki-rtr \
  --ssh-key certs/rtr-client.key \
  --ssh-known-hosts certs/known_hosts \
  --ssh-subsystem rpki-rtr

参数说明

通用参数:

  • --timeout <secs>:读取 PDU 超时时间(秒)
  • --poll <secs>:默认自动轮询间隔(秒)
  • --keep-after-error:收到 ErrorReport 后不暂停自动轮询
  • --summary-only:仅打印摘要,抑制 payload PDU 详细内容

TLS 参数:

  • --tls
  • --ca-cert <path>
  • --server-name <name>
  • --client-cert <path>
  • --client-key <path>

SSH 参数:

  • --ssh
  • --ssh-user <name>
  • --ssh-key <path>OpenSSH 私钥)
  • --ssh-subsystem <name>(默认 rpki-rtr
  • --ssh-known-hosts <path>--ssh-server-key <path>(二选一,必须提供)

SSH 连通性测试建议

如果你已经在 Docker 中启动了支持 SSH 的 RTR server可按以下方式验证

  1. 先用 ssh 命令确认认证与 host key 配置正确(可连通)。
  2. 再用 rtr_debug_client --ssh 发起连接并发送 reset
  3. 观察是否收到 Cache ResponseEndOfData

如果 rtr_debug_clientfailed to request SSH subsystem 'rpki-rtr',通常表示服务端未开启对应 subsystem 名称,或名称不一致。

运行时交互命令

客户端启动后可在标准输入中使用:

  • help
  • state
  • version / version <n>
  • reset
  • serial / serial <sid> <serial>
  • timeout / timeout <secs>
  • poll / poll <secs> / poll pause / poll resume
  • keep-after-error
  • output / output verbose / output summary
  • quit