server-up/docs/netwerken.md
Ramon 58d9be1f48
All checks were successful
Deploy server-up (dev) / deploy (push) Successful in 2m1s
v0.7.90-beta - ARR-stack opgesplitst, /data-mount, netwerkopties per container
- Elk *arr-onderdeel is nu ook een losse app in de store (46 nieuwe sjablonen);
  los en gebundeld komen uit één bron (tools/arr_sjablonen.py) met een test die
  bewaakt dat ze niet uiteen lopen
- Alles deelt één /data-map, zodat hardlinks werken; losse /tv-, /movies- en
  /downloads-mounts zijn eruit, UMASK=002 erbij
- Nieuwe eerste stap "Onderdelen" in het invulmenu, met kopjes per soort; de
  dubbele groepsschakelaar en de lege kaarten in Instellingen zijn weg
- Eigen IP-adres per container in plaats van per stack; containers zonder adres
  houden hun poortmapping. Ook Pangolin publiceert nu per container
- Huntarr vervangen door NeutArr (project offline na lekken, image bestaat niet
  meer), Maintainerr naar zijn nieuwe organisatie
- 31 apps toegevoegd uit het *arr-ecosysteem, alle images tegen hun registry
  gecontroleerd
- data_dir hernoemd naar appdata_dir in de hele catalogus, naast de nieuwe
  data_root; qBittorrent van poort 8080 naar 8097

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q9eqpADJSRs49SoGGr4NAy
2026-07-31 22:21:04 +02:00

10 KiB
Raw Permalink Blame History

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 — Netwerk aanmaken in Server Up

Ga naar Instellingen → Netwerken → Netwerk. Server Up kijkt zelf welk netwerk je server gebruikt en toont dat bovenaan als voorstel: interface, subnet, gateway en een vrije IP-range. Eén klik vult het hele formulier.

Die detectie werkt door heel kort een container te starten die de netwerknamespace van de host deelt en daar de routetabel uitleest. Server Up zelf zit in een eigen namespace en ziet anders alleen zijn eigen bridge.

Lukt detecteren niet, dan vul je het met de hand in. De vier velden:

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

Hoe die vier zich tot elkaar verhouden

Dit is waar het meestal misgaat, dus expliciet:

        ┌─────────────── subnet: 192.168.1.0/24 ───────────────┐
        │                                                       │
        .1            .20 ──── DHCP ──── .239      .240 ── Docker ── .255
        │              │                    │        │                │
     gateway     je laptop, telefoon,   einde     begin          einde
    (je router)   printer, enz.         DHCP     IP-range       IP-range
  • Subnet — precies hetzelfde als je router gebruikt. Een ander subnet betekent dat je containers niemand kunnen bereiken.
  • Gateway — je router, bijna altijd het eerste adres (.1). Laat je dit leeg, dan kunnen de containers wel het LAN op maar niet het internet.
  • IP-range — het deel dat Docker mag uitdelen. Dit moet buiten het bereik liggen dat je router via DHCP uitgeeft, anders krijgt een container hetzelfde adres als een apparaat in huis. Het einde van het subnet is meestal vrij, vandaar .240/28.
  • Host-interface — de netwerkkaart waar het LAN op zit. Niet die van Docker (docker0, br-…) en niet wifi.

Belangrijk: het instellen van de range in Server Up doet niets aan je router. Je moet dáár het DHCP-bereik verkleinen, bijvoorbeeld naar 192.168.1.20 192.168.1.239. Doe je dat niet, dan blijven er dubbele adressen mogelijk.

Terwijl je typt controleert Server Up de combinatie en toont hoeveel adressen je overhoudt (192.168.1.240/28 → veertien bruikbare adressen, .241 t/m .254). Klopt er iets niet, dan staat er in gewone taal bij waarom.

Veelgebruikte ranges

Subnet Gateway Voorstel Ruimte
192.168.1.0/24 192.168.1.1 192.168.1.240/28 14 stacks
192.168.0.0/24 192.168.0.1 192.168.0.240/28 14 stacks
10.0.0.0/24 10.0.0.1 10.0.0.240/28 14 stacks
192.168.1.0/24 192.168.1.1 192.168.1.224/27 30 stacks

Meer nodig? Neem een groter blok: /27 geeft 30 adressen, /26 geeft 62. Zorg dan wel dat je DHCP-bereik navenant kleiner wordt.

Stap 2 — Wat Server Up ermee doet

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"                     default:
                                      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. Het default-netwerk blijft erbij staan: zodra een container een networks-blok krijgt, vervalt zijn lidmaatschap van het netwerk van de stack, en dan vindt hij zijn eigen database niet meer.

Meerdere containers, meerdere adressen

Bestaat een stack uit meerdere containers, dan kies je bij Adres per container wie er een eigen adres krijgt. Dat hoeft niet iedereen te zijn: geef Sonarr en Radarr een adres en laat de rest op zijn hostpoort staan.

Een container die je geen adres geeft, houdt zijn poortmapping. Dat is precies het verschil met hoe dit eerder werkte: toen raakte élke container in de stack zijn poorten kwijt zodra er één een adres kreeg, en waren de andere daarna nergens meer te bereiken.

Containers met network_mode — de downloadclients achter een VPN — slaat Server Up over. Die delen al de namespace van een andere container, en compose weigert network_mode en networks naast elkaar.


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

Gedeelde netwerken tussen apps

Naast een eigen IP-adres is er het gedeelde bridge-netwerk waarop apps elkaar op containernaam vinden. Tot v0.7.70 was dat er één (serverup) en hing élke app eraan: Vaultwarden kon bij je mediaserver, en andersom.

Nu kies je per app aan welke netwerken hij meedoet, en kun je er bij het installeren zelf een maken. Laat je de naam leeg, dan wordt er een voorgesteld (su-<appnaam>). Het netwerk verschijnt daarna in de lijst bij elke andere app.

Stap 2 — Verbinden

  ☑ serverup   standaard        12 containers
  ☑ su-media                     3 containers
  ☐ su-beheer                    2 containers

  [ media          ]  [+ Netwerk maken]

Een app kan aan meerdere netwerken tegelijk hangen — handig voor een reverse proxy die bij alles moet kunnen.

Verwijderen kan alleen als er geen containers meer aan hangen, en het standaardnetwerk blijft altijd staan.


Is dit adres nog vrij?

Bij het invullen van een IP-adres controleert Server Up vier dingen:

  1. valt het binnen het subnet van het netwerk;
  2. valt het binnen het ingestelde bereik (buiten je DHCP-pool dus);
  3. is het al toegekend aan een container in dit netwerk of gereserveerd door een andere stack;
  4. heeft de host het adres recent op het LAN gezien — dat leest de ARP-tabel van de host, en vangt een fysiek apparaat met een DHCP-adres.

Klopt er iets niet, dan staat erbij wat en krijg je een vrij adres voorgesteld.

Punt 4 is geen garantie: een apparaat dat uit staat, staat niet in de ARP-tabel. Houd je macvlan-bereik daarom buiten wat je router uitdeelt.


Is deze poort nog vrij?

Poortvelden krijgen automatisch een vrij nummer voorgesteld. Daarbij wordt niet alleen gekeken naar wat Docker publiceert, maar ook naar wat er rechtstreeks op de host luistert — een nginx of DNS-server buiten Docker zag Server Up eerder niet, terwijl je er net zo goed mee botst.

Dat laatste gaat via een korte hulpcontainer met --network host. Lukt dat niet, dan meldt het antwoord host_checked: false: "vrij" is dan een aanname op basis van Docker alleen.