# r4ulcl/wifichallengelab-docker architecture

> Architecture diagram of the GitHub repository r4ulcl/wifichallengelab-docker, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/r4ulcl/wifichallengelab-docker
- Repository: https://github.com/r4ulcl/wifichallengelab-docker

## Overview

WiFiChallengeLab is a Docker-based wireless security training lab. An attacker uses virtual Wi-Fi adapters to exercise configured AP and client scenarios across open, PSK, WPA3, and enterprise networks; the lab also provides captive-portal and phishing challenges, while nzyme monitors wireless activity. The repository tree and README support the major subsystem boundaries, but sampled source is limited, so internal call-level wiring is not inferred. CTFd is a separate guided-challenge platform, not shown as part of the local runtime.

Main entry points: [`APs/config/startAPs.sh`](https://github.com/r4ulcl/wifichallengelab-docker/blob/main/APs/config/startAPs.sh) (AP Launcher), [`Clients/config/startClients.sh`](https://github.com/r4ulcl/wifichallengelab-docker/blob/main/Clients/config/startClients.sh) (Client Launcher), [`APs/mac80211_hwsim`](https://github.com/r4ulcl/wifichallengelab-docker/tree/main/APs/mac80211_hwsim) (Virtual Radios), [`docker-compose.yml`](https://github.com/r4ulcl/wifichallengelab-docker/blob/main/docker-compose.yml) (Container Topology)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_lab["Lab Runtime"]
  node_compose["Container Topology<br/>[docker-compose.yml]"]
  node_kernel["Virtual Radios"]
  node_adapters(("Attacker Adapters"))
  node_certs["TLS Certificates"]
end

subgraph group_accesspoints["Access Points"]
  node_aplauncher["AP Launcher<br/>[startAPs.sh]"]
  node_apconfigs["AP Scenarios"]
  node_portal["Captive Portal"]
  node_radius["Enterprise Auth"]
end

subgraph group_clients["Wireless Clients"]
  node_clientlauncher["Client Launcher<br/>[startClients.sh]"]
  node_clientconfigs["Client Scenarios"]
  node_clientweb["Isolation Challenge<br/>[index.php]"]
end

subgraph group_monitoring["Monitoring"]
  node_nzyme["nzyme WIDS"]
  node_nzymedb[("nzyme State")]
end

node_attacker(("Attacker"))
node_ctfd["CTFd Challenges"]

node_attacker -->|"uses"| node_adapters
node_compose -->|"starts"| node_aplauncher
node_compose -->|"starts"| node_clientlauncher
node_compose -->|"starts"| node_nzyme
node_aplauncher -->|"loads"| node_apconfigs
node_aplauncher -->|"serves"| node_portal
node_aplauncher -->|"uses"| node_radius
node_clientlauncher -->|"loads"| node_clientconfigs
node_clientlauncher -->|"serves"| node_clientweb
node_aplauncher -->|"uses radios"| node_kernel
node_clientlauncher -->|"uses radios"| node_kernel
node_adapters -->|"uses radios"| node_kernel
node_certs -->|"provides TLS"| node_radius
node_kernel -->|"wireless activity"| node_nzyme
node_nzyme -->|"stores state"| node_nzymedb
node_attacker -.->|"follows challenges"| node_ctfd

click node_compose "https://github.com/r4ulcl/wifichallengelab-docker/blob/main/docker-compose.yml"
click node_kernel "https://github.com/r4ulcl/wifichallengelab-docker/tree/main/APs/mac80211_hwsim"
click node_aplauncher "https://github.com/r4ulcl/wifichallengelab-docker/blob/main/APs/config/startAPs.sh"
click node_apconfigs "https://github.com/r4ulcl/wifichallengelab-docker/tree/main/APs/config"
click node_portal "https://github.com/r4ulcl/wifichallengelab-docker/tree/main/APs/config/html"
click node_radius "https://github.com/r4ulcl/wifichallengelab-docker/tree/main/APs/config/freeradius"
click node_clientlauncher "https://github.com/r4ulcl/wifichallengelab-docker/blob/main/Clients/config/startClients.sh"
click node_clientconfigs "https://github.com/r4ulcl/wifichallengelab-docker/tree/main/Clients/config"
click node_clientweb "https://github.com/r4ulcl/wifichallengelab-docker/blob/main/Clients/config/html/index.php"
click node_certs "https://github.com/r4ulcl/wifichallengelab-docker/tree/main/certs"
click node_nzyme "https://github.com/r4ulcl/wifichallengelab-docker/tree/main/nzyme"
click node_nzymedb "https://github.com/r4ulcl/wifichallengelab-docker/tree/main/nzyme/nzyme-logs/data"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_compose,node_kernel,node_adapters,node_certs toneBlue
class node_aplauncher,node_apconfigs,node_portal,node_radius toneAmber
class node_clientlauncher,node_clientconfigs,node_clientweb toneMint
class node_nzyme,node_nzymedb toneRose
class node_attacker,node_ctfd toneIndigo
```

## Components

### Lab Runtime

- [Container Topology](https://github.com/r4ulcl/wifichallengelab-docker/blob/main/docker-compose.yml): `docker-compose.yml`
- [Virtual Radios](https://github.com/r4ulcl/wifichallengelab-docker/tree/main/APs/mac80211_hwsim): `APs/mac80211_hwsim`
- **Attacker Adapters**
- [TLS Certificates](https://github.com/r4ulcl/wifichallengelab-docker/tree/main/certs): `certs`

### Access Points

- [AP Launcher](https://github.com/r4ulcl/wifichallengelab-docker/blob/main/APs/config/startAPs.sh): `APs/config/startAPs.sh`
- [AP Scenarios](https://github.com/r4ulcl/wifichallengelab-docker/tree/main/APs/config): `APs/config`
- [Captive Portal](https://github.com/r4ulcl/wifichallengelab-docker/tree/main/APs/config/html): `APs/config/html`
- [Enterprise Auth](https://github.com/r4ulcl/wifichallengelab-docker/tree/main/APs/config/freeradius): `APs/config/freeradius`

### Wireless Clients

- [Client Launcher](https://github.com/r4ulcl/wifichallengelab-docker/blob/main/Clients/config/startClients.sh): `Clients/config/startClients.sh`
- [Client Scenarios](https://github.com/r4ulcl/wifichallengelab-docker/tree/main/Clients/config): `Clients/config`
- [Isolation Challenge](https://github.com/r4ulcl/wifichallengelab-docker/blob/main/Clients/config/html/index.php): `Clients/config/html/index.php`

### Monitoring

- [nzyme WIDS](https://github.com/r4ulcl/wifichallengelab-docker/tree/main/nzyme): `nzyme`
- [nzyme State](https://github.com/r4ulcl/wifichallengelab-docker/tree/main/nzyme/nzyme-logs/data): `nzyme/nzyme-logs/data`

### Other components

- **Attacker**
- **CTFd Challenges**

## Connections

- Attacker → Attacker Adapters: uses
- Container Topology → AP Launcher: starts
- Container Topology → Client Launcher: starts
- Container Topology → nzyme WIDS: starts
- AP Launcher → AP Scenarios: loads
- AP Launcher → Captive Portal: serves
- AP Launcher → Enterprise Auth: uses
- Client Launcher → Client Scenarios: loads
- Client Launcher → Isolation Challenge: serves
- AP Launcher → Virtual Radios: uses radios
- Client Launcher → Virtual Radios: uses radios
- Attacker Adapters → Virtual Radios: uses radios
- TLS Certificates → Enterprise Auth: provides TLS
- Virtual Radios → nzyme WIDS: wireless activity
- nzyme WIDS → nzyme State: stores state
- Attacker → CTFd Challenges: follows challenges
