Tengo un servidor dedicado con múltiples direcciones IP, algunas IP tienen una dirección mac asociada mientras que otras (en una subred) no tienen direcciones mac. He creado la red docker macvlan usando:
docker network create -d macvlan -o macvlan_mode=bridge --subnet=188.40.76.0/26 --gateway=188.40.76.1 -o parent=eth0 macvlan_bridgeTengo ip: 88.99.102.115 con mac: 00:50:56:00:60:42. Creó un contenedor usando:
docker run --name cont1 --net=macvlan_bridge --ip=88.99.102.115 --mac-address 00:50:56:00:60:42 -itd nginxEsto funciona, puedo acceder a nginx alojado en esa dirección IP desde el exterior.
Caso con IP que no tiene dirección MAC y la puerta de enlace está fuera de la subred.
subred: 88.99.114.16/28, puerta de enlace: 88.99.102.103
No se puede crear la red usando:
docker network create -d macvlan -o macvlan_mode=bridge --subnet=88.99.114.16/28 --gateway=88.99.102.103 -o parent=eth0 mynetworkLanza error:
no matching subnet for gateway 88.99.102.103Intenté aumentar el alcance de la subred para incluir la puerta de enlace:
docker network create -d macvlan -o macvlan_mode=bridge --subnet=88.99.0.0/16 --gateway=88.99.102.103 -o parent=eth0 mynetworkSe creó la red, luego comenzó el contenedor nginx usando 'mynetwork' y bueno, no tengo la dirección mac para 88.99.114.18, así que usé una dirección mac aleatoria 40: 1c: 0f: bd: a1: d2.
docker run --name cont1 --net=mynetwork --ip=88.99.114.18 --mac-address 40:1c:0f:bd:a1:d2 -itd nginxNo se puede acceder a nginx (88.99.102.115).
No tengo mucho conocimiento en redes, sería muy útil si lo explicas en detalle.
Mi archivo /etc/network/interfaces:
### Hetzner Online GmbH - installimage # Loopback device: auto lo iface lo inet loopback iface lo inet6 loopback # device: eth0 auto eth0 iface eth0 inet static address 88.99.102.103 netmask 255.255.255.192 gateway 88.99.102.65 # default route to access subnet up route add -net 88.99.102.64 netmask 255.255.255.192 gw 88.99.102.65 eth0 iface eth0 inet6 static address 2a01:4f8:221:1266::2 netmask 64 gateway fe80::1Es posible que desee comenzar leyendo conceptos simples de enrutamiento o subredes y enrutamiento .
¿Cómo creo una red docker macvlan si mi puerta de enlace está fuera de mi subred?
Una dirección de puerta de enlace debe estar en la misma subred que una interfaz. Para usar esta nueva subred, deberá usar una de las direcciones IP y asignarla en algún lugar del host como puerta de enlace.
Desde la captura de pantalla del alojamiento, la subred 88.99.114.16/28 se configuró para enrutar a través de su host 88.99.102.103. Debe crear una interfaz en algún lugar de su host para usar como puerta de enlace si desea que Docker use el resto de las direcciones IP en la subred.
Cree una red de puente para que la use Docker, al puente se le asignará la dirección de puerta de enlace 88.99.114.17
docker network create \ --driver=bridge \ --subnet 88.99.114.16/28 \ --gateway=88.99.114.17 \ name0 Es posible que también deba habilitar el reenvío de IP para que funcione el enrutamiento. Configure el reenvío de ip en /etc/sysctl.conf :
net.ipv4.ip_forward = 1y aplicar la nueva configuración
sysctl -p /etc/sysctl.confLuego ejecute un contenedor en el nuevo puente con su red enrutada debería poder acceder a la puerta de enlace e Internet
docker run --net=name0 --rm busybox \ sh -c "ip ad sh && ping -c 4 88.99.114.17 && wget api.ipify.org" Es posible que deba permitir el acceso a la subred en iptables, según su política FORWARD predeterminada
iptables -I DOCKER -d 88.99.114.16/28 -j ACCEPTLos servicios en la subred serán accesibles desde el mundo exterior
docker run --net=name0 busybox \ nc -lp 80 -e echo -e "HTTP/1.0 200 OK\nContent-Length: 3\n\nHi\n"luego afuera
○→ ping -c 2 88.99.114.18 PING 88.99.114.18 (88.99.114.18): 56 data bytes 64 bytes from 88.99.114.18: icmp_seq=0 ttl=63 time=0.527 ms 64 bytes from 88.99.114.18: icmp_seq=1 ttl=63 time=0.417 ms --- 88.99.114.18 ping statistics --- 2 packets transmitted, 2 packets received, 0.0% packet loss round-trip min/avg/max/stddev = 0.417/0.472/0.527/0.055 ms ○→ curl 88.99.114.18 HiNo es necesario mapear la interfaz macvlan.
¿Cómo ejecuto un contenedor usando la red macvlan cuando solo tengo una dirección IP pero no una dirección mac?
macvlan se usa para mapear una interfaz física/host en un contenedor. Como no tiene una interfaz física para estas direcciones, será difícil asignar una a un contenedor.