rtr client 开发
This commit is contained in:
168
deploy/README.md
Normal file
168
deploy/README.md
Normal file
@@ -0,0 +1,168 @@
|
||||
# Deploy Layout
|
||||
|
||||
`deploy/` 目录按角色拆分为四套部署与测试入口:
|
||||
|
||||
- `server/`: 本仓库 RTR Server(`src/main.rs`)容器化部署
|
||||
- `client/`: 本仓库 `rtr_debug_client` 容器化部署
|
||||
- `rpki-rs-client/`: 基于外部 `rpki-rs` client API 的测试客户端容器化部署
|
||||
- `frr/`: FRR 作为黑盒 RTR Client 的配置与 compose
|
||||
|
||||
---
|
||||
|
||||
## 1) Server
|
||||
|
||||
路径:
|
||||
- `deploy/server/Dockerfile`
|
||||
- `deploy/server/docker-compose.yml`
|
||||
- `deploy/server/supervisord.conf`
|
||||
- `deploy/server/DEPLOYMENT.md`
|
||||
|
||||
单独 build 镜像:
|
||||
|
||||
```bash
|
||||
docker build -f deploy/server/Dockerfile -t rpki-rtr:latest .
|
||||
```
|
||||
|
||||
启动:
|
||||
|
||||
```bash
|
||||
docker compose -f deploy/server/docker-compose.yml up -d --build
|
||||
```
|
||||
|
||||
停止:
|
||||
|
||||
```bash
|
||||
docker compose -f deploy/server/docker-compose.yml down
|
||||
```
|
||||
|
||||
日志:
|
||||
|
||||
```bash
|
||||
docker compose -f deploy/server/docker-compose.yml logs -f rpki-rtr
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 2) Debug Client
|
||||
|
||||
路径:
|
||||
- `deploy/client/Dockerfile`
|
||||
- `deploy/client/docker-compose.yml`
|
||||
- `deploy/client/docker-compose.clients.yml`
|
||||
|
||||
单独 build 镜像:
|
||||
|
||||
```bash
|
||||
docker build -f deploy/client/Dockerfile -t rpki-rtr-debug-client:latest .
|
||||
```
|
||||
|
||||
单实例启动(交互调试):
|
||||
|
||||
```bash
|
||||
docker compose -f deploy/client/docker-compose.yml up --build
|
||||
```
|
||||
|
||||
单实例停止:
|
||||
|
||||
```bash
|
||||
docker compose -f deploy/client/docker-compose.yml down
|
||||
```
|
||||
|
||||
单实例日志:
|
||||
|
||||
```bash
|
||||
docker compose -f deploy/client/docker-compose.yml logs -f rtr-debug-client
|
||||
```
|
||||
|
||||
多实例启动(5 个并发 client):
|
||||
|
||||
```bash
|
||||
docker compose -f deploy/client/docker-compose.clients.yml up -d
|
||||
```
|
||||
|
||||
多实例停止:
|
||||
|
||||
```bash
|
||||
docker compose -f deploy/client/docker-compose.clients.yml down
|
||||
```
|
||||
|
||||
多实例日志:
|
||||
|
||||
```bash
|
||||
docker compose -f deploy/client/docker-compose.clients.yml logs -f
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 3) rpki-rs Client
|
||||
|
||||
路径:
|
||||
- `deploy/rpki-rs-client/Dockerfile`
|
||||
- `deploy/rpki-rs-client/docker-compose.yml`
|
||||
|
||||
单独 build 镜像:
|
||||
|
||||
```bash
|
||||
docker build -f deploy/rpki-rs-client/Dockerfile -t rpki-rs-test-client:latest .
|
||||
```
|
||||
|
||||
默认启动(自动 serial 测试):
|
||||
|
||||
```bash
|
||||
docker compose -f deploy/rpki-rs-client/docker-compose.yml up --build
|
||||
```
|
||||
|
||||
覆盖默认参数运行:
|
||||
|
||||
```bash
|
||||
docker compose -f deploy/rpki-rs-client/docker-compose.yml run --rm \
|
||||
rpki-rs-test-client 127.0.0.1:323 2 reset --steps 1 --assert-min-records 1
|
||||
```
|
||||
|
||||
停止:
|
||||
|
||||
```bash
|
||||
docker compose -f deploy/rpki-rs-client/docker-compose.yml down
|
||||
```
|
||||
|
||||
日志:
|
||||
|
||||
```bash
|
||||
docker compose -f deploy/rpki-rs-client/docker-compose.yml logs -f rpki-rs-test-client
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4) FRR Client
|
||||
|
||||
路径:
|
||||
- `deploy/frr/docker-compose.yml`
|
||||
- `deploy/frr/daemons.example`
|
||||
- `deploy/frr/frr.conf.example`
|
||||
- `deploy/frr/README.md`
|
||||
- `deploy/frr/README.zh.md`
|
||||
|
||||
启动:
|
||||
|
||||
```bash
|
||||
docker compose -f deploy/frr/docker-compose.yml up -d
|
||||
```
|
||||
|
||||
检查连接:
|
||||
|
||||
```bash
|
||||
docker exec -it frr-rpki-client vtysh -c "show rpki cache-connection"
|
||||
docker exec -it frr-rpki-client vtysh -c "show rpki prefix-table"
|
||||
```
|
||||
|
||||
停止:
|
||||
|
||||
```bash
|
||||
docker compose -f deploy/frr/docker-compose.yml down
|
||||
```
|
||||
|
||||
日志:
|
||||
|
||||
```bash
|
||||
docker compose -f deploy/frr/docker-compose.yml logs -f frr-rpki-client
|
||||
```
|
||||
11
deploy/client/docker-compose.yml
Normal file
11
deploy/client/docker-compose.yml
Normal file
@@ -0,0 +1,11 @@
|
||||
services:
|
||||
rtr-debug-client:
|
||||
build:
|
||||
context: ../..
|
||||
dockerfile: deploy/client/Dockerfile
|
||||
image: rpki-rtr-debug-client:latest
|
||||
network_mode: host
|
||||
command: ["127.0.0.1:323", "2", "reset", "--keep-after-error", "--summary-only"]
|
||||
restart: unless-stopped
|
||||
stdin_open: true
|
||||
tty: true
|
||||
@@ -1,10 +0,0 @@
|
||||
version: "3.9"
|
||||
|
||||
services:
|
||||
rtr-debug-client:
|
||||
build:
|
||||
context: ..
|
||||
dockerfile: deploy/Dockerfile.client
|
||||
image: rpki-rtr-debug-client:latest
|
||||
stdin_open: true
|
||||
tty: true
|
||||
64
deploy/frr/README.md
Normal file
64
deploy/frr/README.md
Normal file
@@ -0,0 +1,64 @@
|
||||
# FRR Minimal RTR Client Config
|
||||
|
||||
中文文档: [README.zh.md](./README.zh.md)
|
||||
|
||||
This folder provides a minimal FRR setup for black-box interop testing
|
||||
against this repository's RTR server defaults.
|
||||
|
||||
Server defaults in this repo:
|
||||
- TCP: `0.0.0.0:323`
|
||||
- TLS: `0.0.0.0:324`
|
||||
|
||||
Reference:
|
||||
- `src/main.rs`
|
||||
|
||||
## Files
|
||||
|
||||
- `daemons.example`: sample `/etc/frr/daemons`
|
||||
- `frr.conf.example`: sample `/etc/frr/frr.conf`
|
||||
|
||||
## How to apply on an FRR host
|
||||
|
||||
1. Copy `daemons.example` to `/etc/frr/daemons`.
|
||||
2. Copy `frr.conf.example` to `/etc/frr/frr.conf`.
|
||||
3. Restart FRR:
|
||||
|
||||
```bash
|
||||
sudo systemctl restart frr
|
||||
```
|
||||
|
||||
## Verify
|
||||
|
||||
```bash
|
||||
vtysh -c "show rpki configuration"
|
||||
vtysh -c "show rpki cache-server"
|
||||
vtysh -c "show rpki cache-connection"
|
||||
vtysh -c "show rpki prefix-table"
|
||||
```
|
||||
|
||||
If `show rpki cache-connection` is connected and `show rpki prefix-table`
|
||||
contains VRPs, the RTR client path is working.
|
||||
|
||||
## Docker quick start
|
||||
|
||||
From repository root:
|
||||
|
||||
```bash
|
||||
docker compose -f deploy/frr/docker-compose.yml up -d
|
||||
docker exec -it frr-rpki-client vtysh -c "show rpki cache-connection"
|
||||
docker exec -it frr-rpki-client vtysh -c "show rpki prefix-table"
|
||||
```
|
||||
|
||||
Stop:
|
||||
|
||||
```bash
|
||||
docker compose -f deploy/frr/docker-compose.yml down
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- This setup targets RTR over TCP (`rpki cache tcp`).
|
||||
- Keep protocol-level conformance checks in Rust tests and
|
||||
`src/bin/rtr_debug_client`.
|
||||
- `network_mode: host` expects your RTR server to be reachable at
|
||||
`127.0.0.1:323` from the Docker host.
|
||||
71
deploy/frr/README.zh.md
Normal file
71
deploy/frr/README.zh.md
Normal file
@@ -0,0 +1,71 @@
|
||||
# FRR 最小化 RTR 客户端配置
|
||||
|
||||
本目录提供一个 FRR 最小配置,用于和本仓库 RTR Server 做黑盒互通测试。
|
||||
|
||||
本仓库默认 RTR 监听地址:
|
||||
- TCP:`0.0.0.0:323`
|
||||
- TLS:`0.0.0.0:324`
|
||||
|
||||
参考实现:
|
||||
- `src/main.rs`
|
||||
|
||||
## 文件说明
|
||||
|
||||
- `daemons.example`:示例 `/etc/frr/daemons`
|
||||
- `frr.conf.example`:示例 `/etc/frr/frr.conf`
|
||||
|
||||
## 在 FRR 主机上应用
|
||||
|
||||
1. 复制 `daemons.example` 到 `/etc/frr/daemons`
|
||||
2. 复制 `frr.conf.example` 到 `/etc/frr/frr.conf`
|
||||
3. 重启 FRR:
|
||||
|
||||
```bash
|
||||
sudo systemctl restart frr
|
||||
```
|
||||
|
||||
## 验证命令
|
||||
|
||||
```bash
|
||||
vtysh -c "show rpki configuration"
|
||||
vtysh -c "show rpki cache-server"
|
||||
vtysh -c "show rpki cache-connection"
|
||||
vtysh -c "show rpki prefix-table"
|
||||
```
|
||||
|
||||
当 `show rpki cache-connection` 显示已连接,且 `show rpki prefix-table` 出现 VRP 时,说明 RTR 客户端链路工作正常。
|
||||
|
||||
## Docker 快速启动
|
||||
|
||||
在仓库根目录执行:
|
||||
|
||||
```bash
|
||||
docker compose -f deploy/frr/docker-compose.yml up -d
|
||||
docker exec -it frr-rpki-client vtysh -c "show rpki cache-connection"
|
||||
docker exec -it frr-rpki-client vtysh -c "show rpki prefix-table"
|
||||
```
|
||||
|
||||
停止:
|
||||
|
||||
```bash
|
||||
docker compose -f deploy/frr/docker-compose.yml down
|
||||
```
|
||||
|
||||
## 可测试范围
|
||||
|
||||
- FRR 作为 RTR Client 与本仓库 Server 的 TCP 建链能力
|
||||
- FRR 侧基础会话状态可见性(`cache-server` / `cache-connection`)
|
||||
- VRP 下发与导入是否成功(`prefix-table` 是否有条目)
|
||||
- 基于服务端数据变化触发的前缀表更新(可通过替换 `data` 后观察)
|
||||
- 黑盒互通回归:用于确认“路由器客户端视角”功能可用
|
||||
|
||||
## 不覆盖范围
|
||||
|
||||
- 不替代协议级单元测试/集成测试(PDU 细节、异常路径、边界条件)
|
||||
- 不替代 `src/bin/rtr_debug_client` 的逐报文调试能力
|
||||
- 默认示例以 TCP 为主,TLS/mTLS 需按你的证书与 FRR 配置单独扩展
|
||||
|
||||
## 说明
|
||||
|
||||
- 当前示例主要针对 RTR over TCP(`rpki cache tcp`)
|
||||
- `network_mode: host` 模式下,容器内访问 `127.0.0.1:323` 指向 Docker Host,请确保本机 RTR Server 可达
|
||||
7
deploy/frr/daemons.example
Normal file
7
deploy/frr/daemons.example
Normal file
@@ -0,0 +1,7 @@
|
||||
# Minimal FRR daemons config for RPKI testing
|
||||
|
||||
zebra=yes
|
||||
bgpd=yes
|
||||
|
||||
# Enable bgpd RPKI module
|
||||
bgpd_options=" -A 127.0.0.1 -M rpki"
|
||||
10
deploy/frr/docker-compose.yml
Normal file
10
deploy/frr/docker-compose.yml
Normal file
@@ -0,0 +1,10 @@
|
||||
services:
|
||||
frr-rpki-client:
|
||||
image: quay.io/frrouting/frr:10.2.2
|
||||
container_name: frr-rpki-client
|
||||
restart: unless-stopped
|
||||
network_mode: host
|
||||
privileged: true
|
||||
volumes:
|
||||
- ./frr/daemons.example:/etc/frr/daemons:ro
|
||||
- ./frr/frr.conf.example:/etc/frr/frr.conf:ro
|
||||
22
deploy/frr/frr.conf.example
Normal file
22
deploy/frr/frr.conf.example
Normal file
@@ -0,0 +1,22 @@
|
||||
frr version 10.2
|
||||
frr defaults traditional
|
||||
hostname rpki-lab
|
||||
service integrated-vtysh-config
|
||||
!
|
||||
debug rpki
|
||||
!
|
||||
rpki
|
||||
rpki polling_period 10
|
||||
rpki timeout 10
|
||||
rpki retry_interval 10
|
||||
rpki expire_interval 7200
|
||||
rpki cache tcp 127.0.0.1 323 preference 1
|
||||
exit
|
||||
!
|
||||
router bgp 65001
|
||||
bgp router-id 192.0.2.1
|
||||
!
|
||||
address-family ipv4 unicast
|
||||
exit-address-family
|
||||
!
|
||||
line vty
|
||||
24
deploy/rpki-rs-client/Dockerfile
Normal file
24
deploy/rpki-rs-client/Dockerfile
Normal file
@@ -0,0 +1,24 @@
|
||||
FROM rust:1.89-bookworm AS builder
|
||||
|
||||
WORKDIR /build
|
||||
|
||||
RUN apt-get update \
|
||||
&& apt-get install -y --no-install-recommends clang libclang-dev pkg-config \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
COPY Cargo.toml Cargo.lock ./
|
||||
COPY src ./src
|
||||
|
||||
RUN cargo build --release --bin rpki_rs_test_client
|
||||
|
||||
FROM debian:bookworm-slim AS runtime
|
||||
|
||||
RUN apt-get update \
|
||||
&& apt-get install -y --no-install-recommends ca-certificates \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY --from=builder /build/target/release/rpki_rs_test_client /usr/local/bin/rpki_rs_test_client
|
||||
|
||||
ENTRYPOINT ["/usr/local/bin/rpki_rs_test_client"]
|
||||
11
deploy/rpki-rs-client/docker-compose.yml
Normal file
11
deploy/rpki-rs-client/docker-compose.yml
Normal file
@@ -0,0 +1,11 @@
|
||||
services:
|
||||
rpki-rs-test-client:
|
||||
build:
|
||||
context: ../..
|
||||
dockerfile: deploy/rpki-rs-client/Dockerfile
|
||||
image: rpki-rs-test-client:latest
|
||||
container_name: rpki-rs-test-client
|
||||
network_mode: host
|
||||
command: ["127.0.0.1:323", "2", "serial", "--steps", "2", "--follow"]
|
||||
stdin_open: true
|
||||
tty: true
|
||||
@@ -10,9 +10,9 @@ This project runs `src/main.rs` as a long-running server that:
|
||||
|
||||
## Files
|
||||
|
||||
- `deploy/Dockerfile`
|
||||
- `deploy/supervisord.conf`
|
||||
- `deploy/docker-compose.yml`
|
||||
- `deploy/server/Dockerfile`
|
||||
- `deploy/server/supervisord.conf`
|
||||
- `deploy/server/docker-compose.yml`
|
||||
|
||||
## Runtime Paths in Container
|
||||
|
||||
@@ -24,17 +24,17 @@ This project runs `src/main.rs` as a long-running server that:
|
||||
## Start
|
||||
|
||||
```bash
|
||||
docker compose -f deploy/docker-compose.yml up -d --build
|
||||
docker compose -f deploy/server/docker-compose.yml up -d --build
|
||||
```
|
||||
|
||||
## Stop
|
||||
|
||||
```bash
|
||||
docker compose -f deploy/docker-compose.yml down
|
||||
docker compose -f deploy/server/docker-compose.yml down
|
||||
```
|
||||
|
||||
## Logs
|
||||
|
||||
```bash
|
||||
docker compose -f deploy/docker-compose.yml logs -f rpki-rtr
|
||||
docker compose -f deploy/server/docker-compose.yml logs -f rpki-rtr
|
||||
```
|
||||
@@ -26,7 +26,7 @@ RUN apt-get update \
|
||||
WORKDIR /app
|
||||
|
||||
COPY --from=builder /build/target/release/rpki /usr/local/bin/rpki
|
||||
COPY deploy/supervisord.conf /etc/supervisor/conf.d/rpki-rtr.conf
|
||||
COPY deploy/server/supervisord.conf /etc/supervisor/conf.d/rpki-rtr.conf
|
||||
|
||||
RUN mkdir -p /app/data /app/rtr-db /app/certs /app/slurm /var/log/supervisor
|
||||
|
||||
@@ -41,4 +41,4 @@ ENV RPKI_RTR_ENABLE_TLS=false \
|
||||
|
||||
EXPOSE 323 324
|
||||
|
||||
CMD ["supervisord", "-n", "-c", "/etc/supervisor/conf.d/rpki-rtr.conf"]
|
||||
CMD ["supervisord", "-n", "-c", "/etc/supervisor/conf.d/rpki-rtr.conf"]
|
||||
@@ -3,8 +3,8 @@ version: "3.9"
|
||||
services:
|
||||
rpki-rtr:
|
||||
build:
|
||||
context: ..
|
||||
dockerfile: deploy/Dockerfile
|
||||
context: ../..
|
||||
dockerfile: deploy/server/Dockerfile
|
||||
image: rpki-rtr:latest
|
||||
container_name: rpki-rtr
|
||||
restart: unless-stopped
|
||||
@@ -21,8 +21,8 @@ services:
|
||||
RPKI_RTR_STRICT_CCR_VALIDATION: "false"
|
||||
RPKI_RTR_REFRESH_INTERVAL_SECS: "300"
|
||||
volumes:
|
||||
- ../data:/app/data:ro
|
||||
- ../rtr-db:/app/rtr-db
|
||||
- ../data:/app/slurm:ro
|
||||
- ../../data:/app/data:ro
|
||||
- ../../rtr-db:/app/rtr-db
|
||||
- ../../data:/app/slurm:ro
|
||||
# TLS mode example:
|
||||
# - ../certs:/app/certs:ro
|
||||
# - ../../certs:/app/certs:ro
|
||||
Reference in New Issue
Block a user