server-up/docs/netwerken.md
Ramon 8b29553a71
Some checks failed
Deploy server-up (dev) / deploy (push) Failing after 3s
v0.5.00-beta - containerbeheer, eigen IP-adressen, veiliger installeren
- Beheer per container: de stackkaart klapt uit naar de losse containers, met
  start/stop/herstart, logs en live CPU-/geheugengebruik per container. De
  containernaam wordt getoetst aan compose_ps van díé stack, zodat de route
  geen willekeurige container op de host kan raken.
- Stacks met een eigen IP-adres (macvlan/ipvlan): netwerkbeheer onder
  Instellingen → Netwerken, netwerkkeuze in de installatiemodal met voorstel
  voor het eerstvolgende vrije adres, en automatische omzetting van het
  gerenderde compose-bestand (poortmappings eruit, ipv4_address erin). De
  templates in apps/ blijven ongewijzigd.
- Toegekende IP's worden vastgehouden in .serverup.json en getoond op de
  stackkaart, zodat een volgende installatie ze niet opnieuw uitdeelt.
- Vrije poort voorstellen bij installeren: next_free_port() bestond al maar
  werd nergens gebruikt. Bezette poorten worden in de UI gemeld.
- Genereerknop voor velden die op een geheim wijzen (token/password/secret),
  lokaal gegenereerd via crypto.getRandomValues.
- Compose valideren met `docker compose config` vóór het wegschrijven, zowel
  bij de editor als na het renderen bij installatie. Ontbreekt de compose-CLI,
  dan blokkeert dat een installatie niet.
- Uitloggen in de zijbalk; gebruikersbeheer en wachtwoord wijzigen onder
  Instellingen → Beveiliging.
- docs/netwerken.md (incl. de shim-interface die de host nodig heeft om zijn
  eigen macvlan-containers te bereiken) en docs/beveiliging.md toegevoegd.
- CHANGELOG bijgewerkt; testsuite uitgebreid naar 112 tests.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C7oLCRYzY5ixJ5Sv8Y8EFb
2026-07-26 14:51:32 +02:00

5 KiB

Stacks een eigen IP-adres geven (macvlan / ipvlan)

Standaard publiceert een stack poorten op de host: Vaultwarden op 8222, Mealie op 9925, enzovoort. Dat werkt, maar levert op den duur een lange lijst poortnummers op die je moet onthouden, en twee apps die allebei poort 8080 willen gaan niet samen.

Met een macvlan- of ipvlan-netwerk krijgt een stack een eigen IP-adres in je LAN. De app draait dan gewoon op zijn eigen standaardpoort:

Zonder Met eigen IP
http://192.168.1.10:8222 http://192.168.1.240
http://192.168.1.10:9925 http://192.168.1.241

Je kunt er ook per app op firewallen, en een DNS-naam aan koppelen.


⚠️ Lees dit eerst: de host bereikt zijn eigen containers niet

Dit is de bekendste valkuil van macvlan. De Docker-host kan niet bij een container die op een macvlan-netwerk draait, en andersom ook niet. Alle andere apparaten in je netwerk kunnen dat wél.

Draait Server Up op dezelfde machine als de containers, dan zie je dus:

  • vanaf je laptop: http://192.168.1.240 werkt
  • vanaf de server zelf: curl http://192.168.1.240 loopt vast

Heb je dat nodig (bijvoorbeeld voor een healthcheck of een reverse proxy die op de host draait), maak dan een shim-interface aan op de host:

# Eenmalig; vervang eth0 en de adressen door die van jouw netwerk.
ip link add shim link eth0 type macvlan mode bridge
ip addr add 192.168.1.239/32 dev shim
ip link set shim up
ip route add 192.168.1.240/28 dev shim

Zet dat in een systemd-unit of in /etc/network/interfaces, anders is het na een herstart weg.

ipvlan (l2) heeft dit probleem niet op dezelfde manier, maar vereist wel dat je switch en router er goed mee omgaan. Werkt macvlan niet, probeer dan ipvlan.


Stap 1 — Bepaal je netwerkgegevens

Je hebt vier dingen nodig:

Wat Voorbeeld Hoe kom je eraan
Host-interface eth0 ip -br link op de server
Subnet 192.168.1.0/24 Je router; hetzelfde subnet als de server
Gateway 192.168.1.1 ip route | grep default
IP-range 192.168.1.240/28 Een blok dat je buiten je DHCP-bereik houdt

De IP-range is optioneel maar sterk aanbevolen. Zonder range mag Docker het hele subnet gebruiken en kan het een adres uitdelen dat je DHCP-server ook aan een telefoon geeft. 192.168.1.240/28 reserveert .240 t/m .255 — zestien adressen. Zet dat bereik in je router buiten de DHCP-pool.

Stap 2 — Netwerk aanmaken in Server Up

Ga naar Instellingen → Netwerken → Netwerk en vul de gegevens in. Server Up maakt het Docker-netwerk aan en onthoudt de definitie.

Hetzelfde met de hand zou zijn:

docker network create -d macvlan \
  --subnet 192.168.1.0/24 \
  --gateway 192.168.1.1 \
  --ip-range 192.168.1.240/28 \
  -o parent=eth0 \
  lan

Stap 3 — Een stack installeren op een eigen IP

Kies in de installatiemodal bij Netwerk je netwerk in plaats van "Poorten op de host". Server Up stelt het eerstvolgende vrije adres voor; je kunt het overschrijven.

Bij het installeren gebeurt er dit met het compose-bestand:

# vóór                          # ná
services:                       services:
  vaultwarden:                    vaultwarden:
    image: vaultwarden/server       image: vaultwarden/server
    ports:                          networks:
      - "8222:80"                     lan:
                                        ipv4_address: 192.168.1.240
                                networks:
                                  lan:
                                    external: true

De poortmapping verdwijnt — die heeft geen functie meer. Vaultwarden luistert op poort 80 en is bereikbaar op http://192.168.1.240.

Bestaat een stack uit meerdere containers, dan krijgt de container die poorten publiceerde het vaste adres; de rest komt zonder vast adres in hetzelfde netwerk, zodat ze elkaar op servicenaam blijven vinden.


Adresbeheer

Server Up bewaart het toegekende adres in .serverup.json in de stackmap. Zo blijft het gereserveerd, ook als de stack gestopt is, en krijgt een volgende installatie het volgende vrije adres voorgesteld.

Wil je het adres van een bestaande stack wijzigen, pas dan het compose-bestand aan via compose bewerken en werk ipv4_address bij.

Verwijderen

Een netwerk kan pas weg als er geen containers meer op draaien. Stop eerst de betreffende stacks; Server Up weigert het anders met een melding.

Problemen oplossen

Symptoom Oorzaak
network ... not found bij het starten Netwerk verwijderd terwijl de stack er nog naar verwijst — maak het opnieuw aan
Container krijgt geen verbinding Verkeerde parent-interface, of de interface zit in een bond/bridge
Adres al in gebruik Het adres valt binnen je DHCP-bereik; verklein de DHCP-pool of kies een andere range
Vanaf de server niet bereikbaar, vanaf laptop wel Verwacht gedrag — zie de shim-interface bovenaan
Werkt niet op WiFi Klopt: macvlan werkt niet over een draadloze interface