# NAT reachable scenario — see README.md. Run via testreachable.nim. name: nat-reachable # Topology addresses, named for their role (defined once, referenced below). x-addresses: # fake public internet; a routable range so B looks public to A wan_subnet: &wan_subnet 7.7.7.0/24 # private network behind the NAT lan_subnet: &lan_subnet 10.99.0.0/24 # A: public bootstrap, relay + autonat server bootstrap_ip: &bootstrap_ip 7.7.7.10 # router's public face router_wan_ip: &router_wan_ip 7.7.7.2 # router's private face = B's gateway router_lan_ip: &router_lan_ip 10.99.0.2 # B, behind the NAT (also the DNAT target) node_ip: &node_ip 10.99.0.10 networks: wan: # Keep the fake public range private, not exposed to the host internal: true ipam: config: - subnet: *wan_subnet lan: ipam: config: - subnet: *lan_subnet services: router: image: localhost/storage-nat cap_add: [NET_ADMIN] sysctls: net.ipv4.ip_forward: 1 networks: wan: ipv4_address: *router_wan_ip lan: ipv4_address: *router_lan_ip environment: ROUTER_WAN_IP: *router_wan_ip LAN_SUBNET: *lan_subnet # where the router forwards the port NODE_IP: *node_ip # scripts mounted, not baked, so editing them needs no image rebuild volumes: - ../router-common.sh:/scripts/router-common.sh:ro,z - ./router-entrypoint.sh:/scripts/router-entrypoint.sh:ro,z entrypoint: ["bash", "/scripts/router-entrypoint.sh"] bootstrap: image: localhost/storage-nat networks: wan: ipv4_address: *bootstrap_ip entrypoint: ["/app/build/storage"] command: - --listen-ip=0.0.0.0 - --api-bindaddr=0.0.0.0 - --listen-port=8070 - --disc-port=8090 - --api-port=8080 # bootstrap_ip (anchors can't go inside a string) - --nat=extip:7.7.7.10 - --relay-server - --autonat-server - --no-bootstrap-node - --data-dir=/data - --log-level=DEBUG node: image: localhost/storage-nat cap_add: [NET_ADMIN] depends_on: [router, bootstrap] networks: lan: ipv4_address: *node_ip # B's API, published so the test can poll it ports: - "127.0.0.1:18081:8080" environment: ROUTER_LAN_IP: *router_lan_ip # B fetches A's SPR from this API at startup to join the network (bootstrap_ip) BOOTSTRAP_API: http://7.7.7.10:8080 volumes: - ../node-entrypoint.sh:/scripts/node-entrypoint.sh:ro,z entrypoint: ["bash", "/scripts/node-entrypoint.sh"]