# Una LAN privada detrás de un router de borde con NAT, un proveedor y un servidor
# externo. Las direcciones "públicas" salen de 100.64.0.0/10.
#
#   a1 ---+
#   a2 ---+-- sw --- gw ======= isp --- ext
#   a3 ---+
#     10.200.50.0/24   100.64.0.0/30   100.64.9.0/24
#
# a3 empieza sin dirección: la pide por DHCP.
name: w04-nat
mgmt:
  network: redes-w04-nat
  ipv4-subnet: 172.90.4.128/25
  ipv6-subnet: 3fff:172:90:4:1::/80
topology:
  defaults:
    kind: linux
    image: redes-router
  nodes:
    # Se borra la ruta por defecto de gestión (eth0): sin esto, lo que un nodo no
    # sabe a dónde mandar se iría por Docker en vez de fallar.
    a1:
      exec:
        - ip route del default
        - ip -6 route del default
        - ip addr add 10.200.50.10/24 dev eth1
        - ip route add default via 10.200.50.1
    a2:
      exec:
        - ip route del default
        - ip -6 route del default
        - ip addr add 10.200.50.11/24 dev eth1
        - ip route add default via 10.200.50.1
    a3:
      exec:
        - ip route del default
        - ip -6 route del default
    sw:
      exec:
        - ip route del default
        - ip -6 route del default
        - ip link add br0 type bridge
        - ip link set eth1 master br0
        - ip link set eth2 master br0
        - ip link set eth3 master br0
        - ip link set eth4 master br0
        - ip link set br0 up
    gw:
      binds:
        - gw/frr.conf:/etc/frr/frr.conf:ro
        - dhcp_server.py:/opt/dhcp_server.py
      exec: ["ip route del default", "ip -6 route del default"]
    isp:
      binds: [isp/frr.conf:/etc/frr/frr.conf:ro]
      exec: ["ip route del default", "ip -6 route del default"]
    ext:
      exec:
        - ip route del default
        - ip -6 route del default
        - ip addr add 100.64.9.10/24 dev eth1
        - ip route add default via 100.64.9.1
  # Containerlab usa MTU 9500 por defecto; aquí queremos el valor de Ethernet.
  links:
    - endpoints: ["a1:eth1", "sw:eth1"]
      mtu: 1500
    - endpoints: ["a2:eth1", "sw:eth2"]
      mtu: 1500
    - endpoints: ["a3:eth1", "sw:eth3"]
      mtu: 1500
    - endpoints: ["gw:eth1", "sw:eth4"]
      mtu: 1500
    - endpoints: ["gw:eth2", "isp:eth1"]
      mtu: 1500
    - endpoints: ["isp:eth2", "ext:eth1"]
      mtu: 1500
