Ref

https://www.ripe.net/manage-ips-and-asns/resource-management/rpki/tools-and-resources/


Routinator

mkdir -p /opt/routinator
cd /opt/routinator
vi docker-compose.yml
docker compose up -d
/opt/routinator/docker-compose.yml
services:
  routinator:
    image: nlnetlabs/routinator
    container_name: routinator
    restart: unless-stopped
    ports:
      - 3323:3323   # RTR port
      - 8323:8323   # HTTP port
    volumes:
      - cache:/home/routinator/.rpki-cache
     environment:
      - TZ=Asia/Seoul

volumes:
  cache:
# docker logs -f routinator
[WARN] rsync://repository.lacnic.net/rpki/: @ERROR: max connections (300) reached -- try again later
[WARN] rsync://repository.lacnic.net/rpki/: rsync error: error starting client-server protocol (code 5) at main.c(1859) [Receiver=3.2.7]
[WARN] No valid trust anchor for TAL lacnic
[WARN] rsync://rpki.afrinic.net/repository/member_repository/F368F2D0/92F86E1C6E0511E8A1B5854BF8AEA228/ACCD9BA21FE611EFA3C32B487DDC24C2.roa: certificate has expired.
[WARN] rsync://rpki.afrinic.net/repository/member_repository/F368F2D0/92F86E1C6E0511E8A1B5854BF8AEA228/409A3962171811EFA4D9B319017001B1.roa: certificate has expired.
...
[WARN] RRDP https://rov-measurements.nlnetlabs.net/rrdp/notification.xml: error sending request for url (https://rov-measurements.nlnetlabs.net/rrdp/notification.xml): connection closed before message completed
[WARN] rsync://rpki.qs.nu/repo/cyntest/2/FF0595CB477C33B6B94C7E477213C842A6067D6B.mft: certificate has expired.
...
(HOST) # docker exec -it routinator /bin/sh.

(CONTAINER) / $ ps auxf
PID   USER     TIME  COMMAND
    1 routinat  0:00 /sbin/tini -- routinator server --rtr 0.0.0.0:3323 --http 0.0.0.0:8323 --http 0.0.0.0:9556
    7 routinat  0:58 routinator server --rtr 0.0.0.0:3323 --http 0.0.0.0:8323 --http 0.0.0.0:9556
   46 routinat  0:00 rsync --contimeout=10 --max-size=20000000 -rltz --delete rsync://rpki.netiface.net/repo/ /home/routinator/.rpki-cache/repository/rsync/rpki.netiface.net/repo/
~/.zshrc
alias routinator='docker exec -it routinator routinator'
# routinator config
repository-dir = "/home/routinator/.rpki-cache/repository"
exceptions = []
strict = false
stale = "reject"
unsafe-vrps = "accept"
unknown-objects = "warn"
allow-dubious-hosts = false
disable-rsync = false
rsync-command = "rsync"
rsync-timeout = 300
disable-rrdp = false
rrdp-fallback = "stale"
rrdp-fallback-time = 3600
rrdp-max-delta-count = 100
rrdp-timeout = 300
rrdp-tcp-keepalive = 60
rrdp-root-certs = []
rrdp-proxies = []
max-object-size = 20000000
max-ca-depth = 32
enable-bgpsec = false
dirty = false
validation-threads = 4
refresh = 600
retry = 600
expire = 7200
history-size = 10
rtr-listen = []
rtr-tls-listen = []
http-listen = []
http-tls-listen = []
systemd-listen = false
rtr-tcp-keepalive = 60
rtr-client-metrics = false
log-level = "WARN"
log = "default"
syslog-facility = "daemon"
# routinator --tal=list
 .---- RIR TALs
 |  .- RIR test TALs
 V  V

 X      afrinic             AFRINIC production TAL
 X      apnic               APNIC production TAL
 X      arin                ARIN production TAL
 X      lacnic              LACNIC production TAL
 X      ripe                RIPE production TAL
    X   apnic-testbed       APNIC RPKI Testbed
    X   arin-ote            ARIN Operational Test and Evaluation Environment
    X   ripe-pilot          RIPE NCC RPKI Test Environment
        nlnetlabs-testbed   NLnet Labs RPKI Testbed

Fort

mkdir -p /opt/fort
cd /opt/fort
vi docker-compose.yml
docker compose up -d
/opt/fort/docker-compose.yml
services:
  rpki-client:
    image: nicmx/fort-validator
    container_name: fort-validator
    restart: unless-stopped
    volumes:
      - ./config.json:/etc/fort/fort.conf
      - tals:/etc/fort/tal
      - cache:/var/local/fort
    ports:
      - 3323:323 # RTR port
    environment:
      - TZ=Asia/Seoul

volumes:
  tals:
  cache:

https://nicmx.github.io/FORT-validator/usage.html#--configuration-file

/opt/fort/config.json
 {
  "tal":"/etc/fort/tal",
  "local-repository":"/var/local/fort"

  "mode": "server",
  "work-offline": false,
  "daemon": false,

  "log": {
    "enabled": true,
    "output": "console",
    "level": "info",
    "tag": "Operation",
    "facility": "daemon",
    "file-name-format": "global-url",
    "color-output": false
  },

  "validation-log": {
    "enabled": false,
    "output": "console",
    "level": "warning",
    "tag": "Validation",
    "facility": "daemon",
    "file-name-format": "global-url",
    "color-output": false
  }
}
(HOST) # docker exec -it fort-validator /bin/sh
(CONTAINER) / # ps auxf
PID   USER     TIME  COMMAND
    1 root      0:00 tini -g -- fort --configuration-file /etc/fort/fort.conf
    7 root      1:21 fort --configuration-file /etc/fort/fort.conf
# docker logs -f fort-validator
Jun 11 08:50:37 INF [Operation]: fort 1.6.2
Jun 11 08:50:37 INF [Operation]: Configuration {
Jun 11 08:50:37 INF [Operation]: tal: /etc/fort/tal
Jun 11 08:50:37 INF [Operation]: local-repository: /var/local/fort
Jun 11 08:50:37 INF [Operation]: shuffle-uris: false
Jun 11 08:50:37 INF [Operation]: maximum-certificate-depth: 32
Jun 11 08:50:37 INF [Operation]: slurm: (null)
Jun 11 08:50:37 INF [Operation]: mode: server
Jun 11 08:50:37 INF [Operation]: work-offline: false
...
Jun 11 08:50:37 INF [Operation]: }
Jun 11 08:50:37 INF [Operation]: Main loop: Starting...
Jun 11 08:50:37 INF [Operation]: [::]:323: Setting up socket...
Jun 11 08:50:37 INF [Operation]: [::]:323: Success.
Jun 11 08:50:37 INF [Operation]: The cache appears to have been built by a different version of Fort. I'm going to clear it, just to be safe.

RPKI-client

https://academy-training-wiki-media.storage.googleapis.com/_media/rpki20211109/rpki-client_lab.pdf


mkdir -p /opt/rpki-client
cd /opt/rpki-client
vi docker-compose.yml
docker compose up -d
/opt/rpki-client/docker-compose.yml
services:
  rpki-client:
    image: rpki/rpki-client
    container_name: rpki-client
    restart: unless-stopped
    ports:
      - 9099:9099
    volumes:
      - tals:/etc/tals
      - output:/var/lib/rpki-client
      - cache:/var/cache/rpki-client
    environment:
      - TZ=Asia/Seoul

volumes:
  tals:
  output:
  cache:
(HOST) # docker ps -a
CONTAINER ID   IMAGE              COMMAND                  CREATED         STATUS                    PORTS      NAMES
3bd59461cc28   rpki/rpki-client   "/entrypoint.sh rpki…"   8 minutes ago   Up 8 minutes (healthy)    9099/tcp   rpki-client

(HOST) # docker exec -it rpki-client /bin/sh

(CONTAINER) / # ps auxf
PID   USER     TIME  COMMAND
    1 root      0:00 multirun /rpki-client.sh rpki-client -B -c -j -m -o -v haproxy -f /etc/haproxy/haproxy.cfg -q -W -S /run/haproxy.sock
   13 root      0:00 {rpki-client.sh} /bin/sh /rpki-client.sh rpki-client -B -c -j -m -o -v
   14 root      0:00 haproxy -f /etc/haproxy/haproxy.cfg -q -W -S /run/haproxy.sock
   84 haproxy   0:00 haproxy -sf 22 -x sockpair@4 -f /etc/haproxy/haproxy.cfg -q -W -S /run/haproxy.sock
   89 root      0:00 sleep 600
(HOST) # cd /var/lib/docker/volumes/rpki-client_output/_data

(HOST) # ls -alh
total 116M
drwxr-sr-x 2  900  900 4.0K 2024-06-10 Mon 17:30:38 .
drwx-----x 3 root root 4.0K 2024-06-10 Mon 16:56:15 ..
-rw-r--r-- 1  900  900  17M 2024-06-10 Mon 17:30:37 bird
-rw-r--r-- 1  900  900  13M 2024-06-10 Mon 17:30:37 bird1v4
-rw-r--r-- 1  900  900 3.3M 2024-06-10 Mon 17:30:37 bird1v6
-rw-r--r-- 1  900  900  18M 2024-06-10 Mon 17:30:37 csv
-rw-r--r-- 1  900  900  43M 2024-06-10 Mon 17:30:38 json
-rw-r--r-- 1  900  900 469K 2024-06-10 Mon 17:30:38 metrics
-rw-r--r-- 1  900  900  23M 2024-06-10 Mon 17:30:36 openbgpd

(HOST) # tail -n 10 csv
AS37100,2c0f:feb1::/32,48,afrinic,1718150685
AS36959,2c0f:feb8::/32,32,afrinic,1718150685
AS22822,2c0f:fed8::/32,48,afrinic,1718150685
AS37277,2c0f:fed8::/32,48,afrinic,1718150685
AS26506,2c0f:fed8:2::/48,48,afrinic,1718150685
AS36958,2c0f:fef0::/32,48,afrinic,1718150685
AS37334,2c0f:ff30::/32,64,afrinic,1718150685
AS3741,2c0f:ff40::/26,48,afrinic,1718150685
AS10474,2c0f:ff40::/26,48,afrinic,1718150685
AS37105,2c0f:ffd8::/32,32,afrinic,1718150685


etc

https://github.com/inex/IXP-Manager

https://github.com/inex/IXP-Manager/blob/master/docker-compose.yml

https://academy.apnic.net/en/events?id=a0B2e000000dWAW

https://blog.apnic.net/2022/04/06/how-to-installing-an-rpki-validator-2/

https://academy.apnic.net/en/virtual-labs


  • No labels