## Docker macvlan bridge

MACVLAN creëert meerdere virtuele netwerkinterfaces met verschillende MAC-adressen. Op deze manier, als je systeem meerdere IP-adressen met MAC-adressen heeft, kunnen we meerdere virtuele netwerkinterfaces maken die elk hun eigen IP-adres en MAC-adres hebben.

MACVLAN hoeft geen mac-adressen van de systemen binnen het netwerk te leren (identificeren) om verkeer te verdelen, aangezien het elk Mac-adres kent, dit maakt het snel en gemakkelijk in te stellen dan een bridge-type netwerk.

## Problemen met poortbinding van docker-containers:

- Als een container poort 8000 van de host gebruikt, kunnen geen andere containers die poort gebruiken.

- Het koppelen van meerdere poorten aan de container kan worden gedaan door het poortbereik op te geven, maar deze bewerking kost meer tijd, afhankelijk van nr. van te binden poorten.

- IPTables-regels worden omslachtig omdat de bindingen toenemen.

## Voordelen van MACVLAN:

- IPTables worden niet beïnvloed.

- Geen poortbinding.

- Makkelijk op te zetten.

- Sneller dan bridge-netwerken.

## MACVLAN-netwerk maken:

Voorbeeld:

Host-IP: 192.168.182.130

Hostsubnet: 192.168.182.0

Gastheermasker: 24

Hostgateway: 192.168.182.2

Host ethernet-interface: ens33

    docker network create -d macvlan -o macvlan_mode=bridge --subnet=192.168.182.0/24 --gateway=192.168.182.2 -o parent=ens33 macvlan_bridge

Bovenstaande opdracht maakt netwerk met de naam 'macvlan_bridge'. Controleer goed jouw gegevens dat die overeenkomen en pas de opdracht op jouw omgeving aan.

## Een container draaien met het 'macvlan_bridge'-netwerk:

Voorbeeld:

Host bevat meerdere openbaar toegankelijke IP-adressen met MAC-adressen.

Extra IP/MAC host: 192.168.182.10/00:50:56:00:60:42

    docker run --name cont1 --net=macvlan_bridge --ip=192.168.182.10 --mac-address 00:50:56:00:60:42 -itd nginx

Voorbeeld zonder MAC-adres:

    docker run --name cont2 --net=macvlan_bridge --ip=192.168.182.11 -itd nginx

Voorbeeld van een andere container:

    docker run --name cont3 --net=macvlan_bridge --ip=192.168.182.12 -itd httpd

Controleer of de containers draaien met:

    docker ps

Controleer op IP-adres in je URL:

Om de container en de netwerk instellingen te controleren gaan we met `docker inspect` de container instellingen bekijken.

    docker container inspect cont2

    "Networks": {

                    "macvlan_bridge": {

                        "IPAMConfig": {

                            "IPv4Address": "192.168.182.11"

                        },

                        "Links": null,

                        "Aliases": [

                            "f68a60aba763"

                        ],

                        "NetworkID": "d6adfdaa0159d03df6a5106c7d5b397283af35a41424f9daf7fa25cf3140d5c3",

                        "EndpointID": "286a9f6bf98384e426e703c4124e2135537c6a4bc1bde5dc7879e7b1338b505b",

                        "Gateway": "192.168.182.2",

                        "IPAddress": "192.168.182.11",

                        "IPPrefixLen": 24,

                        "IPv6Gateway": "",

                        "GlobalIPv6Address": "",

                        "GlobalIPv6PrefixLen": 0,

                        "MacAddress": "02:42:c0:a8:b6:0b",

                        "DriverOpts": null