150 lines
4.7 KiB
Markdown
150 lines
4.7 KiB
Markdown
# RPKI RTR Server
|
||
|
||
默认运行目标平台:Ubuntu/Linux。
|
||
|
||
## RTR Server
|
||
|
||
RTR Server 的运行配置通过环境变量读取。如果某个环境变量没有设置,则使用
|
||
[`src/main.rs`](src/main.rs) 中的内置默认值。
|
||
|
||
### 环境变量
|
||
|
||
| 变量名 | 说明 | 示例 |
|
||
| --- | --- | --- |
|
||
| `RPKI_RTR_ENABLE_TLS` | 是否额外启用 TLS 监听。支持 `true/false`、`1/0`、`yes/no`、`on/off`。 | `true` |
|
||
| `RPKI_RTR_TCP_ADDR` | TCP 监听地址。 | `0.0.0.0:323` |
|
||
| `RPKI_RTR_TLS_ADDR` | TLS 监听地址。 | `0.0.0.0:324` |
|
||
| `RPKI_RTR_DB_PATH` | RTR 使用的 RocksDB 路径。 | `./rtr-db` |
|
||
| `RPKI_RTR_VRP_FILE` | 输入 VRP 文件路径。 | `./data/vrps.txt` |
|
||
| `RPKI_RTR_ASPA_FILE` | 输入 ASPA 文件路径。 | `./data/aspas.txt` |
|
||
| `RPKI_RTR_ROUTER_KEY_FILE` | 输入 Router Key 文件路径。 | `./data/router-keys.txt` |
|
||
| `RPKI_RTR_TLS_CERT_PATH` | TLS 服务端证书路径。 | `./certs/server.crt` |
|
||
| `RPKI_RTR_TLS_KEY_PATH` | TLS 服务端私钥路径。 | `./certs/server.key` |
|
||
| `RPKI_RTR_TLS_CLIENT_CA_PATH` | 用于校验 router 客户端证书的 CA 证书路径。 | `./certs/client-ca.crt` |
|
||
| `RPKI_RTR_MAX_DELTA` | 保留的最大 delta 条数。 | `100` |
|
||
| `RPKI_RTR_REFRESH_INTERVAL_SECS` | 重新加载 VRP 文件的时间间隔,单位秒。 | `300` |
|
||
| `RPKI_RTR_MAX_CONNECTIONS` | 最大并发 RTR 连接数。 | `512` |
|
||
| `RPKI_RTR_NOTIFY_QUEUE_SIZE` | Serial Notify 广播队列大小。 | `1024` |
|
||
| `RPKI_RTR_TCP_KEEPALIVE_SECS` | TCP keepalive 时间,单位秒。设为 `0` 表示禁用。 | `60` |
|
||
| `RPKI_RTR_WARN_INSECURE_TCP` | 纯 TCP 模式下是否输出不安全告警。支持布尔值。 | `true` |
|
||
| `RPKI_RTR_REQUIRE_TLS_SERVER_DNS_NAME_SAN` | 严格模式:如果 TLS 服务端证书不包含 `subjectAltName dNSName`,则拒绝启动。支持布尔值。 | `false` |
|
||
|
||
### 说明
|
||
|
||
- 纯 TCP 模式只应部署在受信任、可控的网络环境中。
|
||
- TLS 模式要求客户端证书认证。
|
||
- 开启严格 TLS 服务端证书模式后,如果服务端证书缺少 `subjectAltName dNSName`,启动时会被拒绝。
|
||
- `RPKI_RTR_TCP_KEEPALIVE_SECS=0` 表示关闭 TCP keepalive;非零值表示在连接整个生命周期内启用 keepalive。
|
||
|
||
## 启动示例
|
||
|
||
### Bash
|
||
|
||
纯 TCP 模式:
|
||
|
||
```sh
|
||
sh ./scripts/start-rtr-server-tcp.sh
|
||
```
|
||
|
||
TLS / mutual TLS 模式:
|
||
|
||
```sh
|
||
sh ./scripts/start-rtr-server-tls.sh
|
||
```
|
||
|
||
如果你想手动设置环境变量,也可以直接这样启动。
|
||
|
||
#### 纯 TCP
|
||
|
||
```sh
|
||
export RPKI_RTR_ENABLE_TLS=false
|
||
export RPKI_RTR_TCP_ADDR=0.0.0.0:323
|
||
export RPKI_RTR_DB_PATH=./rtr-db
|
||
export RPKI_RTR_VRP_FILE=./data/vrps.txt
|
||
export RPKI_RTR_ASPA_FILE=./data/aspas.txt
|
||
export RPKI_RTR_ROUTER_KEY_FILE=./data/router-keys.txt
|
||
export RPKI_RTR_TCP_KEEPALIVE_SECS=60
|
||
export RPKI_RTR_WARN_INSECURE_TCP=true
|
||
|
||
cargo run
|
||
```
|
||
|
||
#### TLS / mutual TLS
|
||
|
||
```sh
|
||
export RPKI_RTR_ENABLE_TLS=true
|
||
export RPKI_RTR_TCP_ADDR=0.0.0.0:323
|
||
export RPKI_RTR_TLS_ADDR=0.0.0.0:324
|
||
export RPKI_RTR_DB_PATH=./rtr-db
|
||
export RPKI_RTR_VRP_FILE=./data/vrps.txt
|
||
export RPKI_RTR_ASPA_FILE=./data/aspas.txt
|
||
export RPKI_RTR_ROUTER_KEY_FILE=./data/router-keys.txt
|
||
export RPKI_RTR_TLS_CERT_PATH=./certs/server-dns.crt
|
||
export RPKI_RTR_TLS_KEY_PATH=./certs/server-dns.key
|
||
export RPKI_RTR_TLS_CLIENT_CA_PATH=./certs/client-ca.crt
|
||
export RPKI_RTR_TCP_KEEPALIVE_SECS=60
|
||
export RPKI_RTR_WARN_INSECURE_TCP=true
|
||
export RPKI_RTR_REQUIRE_TLS_SERVER_DNS_NAME_SAN=true
|
||
|
||
cargo run
|
||
```
|
||
|
||
可直接修改的示例脚本见:
|
||
- [`scripts/start-rtr-server-tcp.sh`](scripts/start-rtr-server-tcp.sh)
|
||
- [`scripts/start-rtr-server-tls.sh`](scripts/start-rtr-server-tls.sh)
|
||
- [`scripts/start-rtr-server.sh`](scripts/start-rtr-server.sh)
|
||
|
||
### ASPA 文件格式
|
||
|
||
`RPKI_RTR_ASPA_FILE` 当前使用简单文本格式:
|
||
|
||
```text
|
||
# customer_asn,provider_asn [provider_asn ...]
|
||
64496,64497 64498
|
||
64497,64500
|
||
```
|
||
|
||
### Router Key 文件格式
|
||
|
||
`RPKI_RTR_ROUTER_KEY_FILE` 当前使用简单文本格式:
|
||
|
||
```text
|
||
# ski_hex,asn,spki_hex
|
||
00112233445566778899aabbccddeeff00112233,64496,3013300d06092a864886f70d010101050003020000
|
||
8899aabbccddeeff00112233445566778899aabb,64497,cafebabe
|
||
```
|
||
|
||
## RTR Client
|
||
|
||
调试用 RTR client 位于:
|
||
- [`src/bin/rtr_debug_client/main.rs`](src/bin/rtr_debug_client/main.rs)
|
||
|
||
它的说明文档位于:
|
||
- [`src/bin/rtr_debug_client/README.md`](src/bin/rtr_debug_client/README.md)
|
||
|
||
### Client 启动示例
|
||
|
||
连接纯 TCP RTR server:
|
||
|
||
```sh
|
||
cargo run --bin rtr_debug_client -- 127.0.0.1:323 1 reset
|
||
```
|
||
|
||
连接 TLS RTR server:
|
||
|
||
```sh
|
||
cargo run --bin rtr_debug_client -- \
|
||
127.0.0.1:324 1 reset \
|
||
--tls \
|
||
--ca-cert ./certs/client-ca.crt \
|
||
--server-name localhost \
|
||
--client-cert ./certs/client-good.crt \
|
||
--client-key ./certs/client-good.key
|
||
```
|
||
|
||
如果要持续观察错误后的行为,可以加:
|
||
|
||
```sh
|
||
--keep-after-error
|
||
```
|