# rtr_debug_client `rtr_debug_client` 是用于 RTR 协议联调的命令行调试客户端,支持 `TCP`、`TLS`、`SSH` 三种传输。 它用于: - 手动发送 `Reset Query`、`Serial Query` - 持续接收并打印服务端 PDU - 观察 `session_id`、`serial`、`EndOfData` timing hint、`ErrorReport` 等状态变化 ## 构建 ```sh cargo build --bin rtr_debug_client ``` ## 基本用法 ```sh cargo run --bin rtr_debug_client -- [reset|serial ] [options] ``` 默认值: - `addr`: `127.0.0.1:323` - `version`: `1` - `mode`: `reset` - `--timeout`: `30` - `--poll`: `600` ## TCP 用法 ```sh cargo run --bin rtr_debug_client -- 127.0.0.1:323 1 reset ``` ```sh cargo run --bin rtr_debug_client -- 127.0.0.1:323 1 serial 42 100 ``` ## TLS 用法 仅校验服务端证书: ```sh 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: ```sh 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 校验服务端 ```sh 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. 使用固定服务端公钥校验 ```sh 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 名称 ```sh 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 `:读取 PDU 超时时间(秒) - `--poll `:默认自动轮询间隔(秒) - `--keep-after-error`:收到 `ErrorReport` 后不暂停自动轮询 - `--summary-only`:仅打印摘要,抑制 payload PDU 详细内容 TLS 参数: - `--tls` - `--ca-cert ` - `--server-name ` - `--client-cert ` - `--client-key ` SSH 参数: - `--ssh` - `--ssh-user ` - `--ssh-key `(OpenSSH 私钥) - `--ssh-subsystem `(默认 `rpki-rtr`) - `--ssh-known-hosts ` 或 `--ssh-server-key `(二选一,必须提供) ## SSH 连通性测试建议 如果你已经在 Docker 中启动了支持 SSH 的 RTR server,可按以下方式验证: 1. 先用 `ssh` 命令确认认证与 host key 配置正确(可连通)。 2. 再用 `rtr_debug_client --ssh` 发起连接并发送 `reset`。 3. 观察是否收到 `Cache Response` 和 `EndOfData`。 如果 `rtr_debug_client` 报 `failed to request SSH subsystem 'rpki-rtr'`,通常表示服务端未开启对应 subsystem 名称,或名称不一致。 ## 运行时交互命令 客户端启动后可在标准输入中使用: - `help` - `state` - `version` / `version ` - `reset` - `serial` / `serial ` - `timeout` / `timeout ` - `poll` / `poll ` / `poll pause` / `poll resume` - `keep-after-error` - `output` / `output verbose` / `output summary` - `quit`