two other networks network expose container compose linux networking docker containers

linux - other - docker network connection



Docker Macvlan Network, no puede acceder a internet (1)

Tengo un servidor dedicado con múltiples direcciones IP, algunas direcciones 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_bridge

Tengo 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 nginx

Esto funciona, puedo acceder a nginx alojado en esa dirección IP desde afuera.

Caso con IP que no tiene una 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 una 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 mynetwork

Lanza el error:

no matching subnet for gateway 88.99.102.103

Intentó con 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 mynetwork

Se creó la red, luego se inició el contenedor nginx usando ''mynetwork'' y bueno, no tengo la dirección MAC para 88.99.114.18, así que utilicé alguna 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 nginx

No se puede llegar a nginx (88.99.102.115).

  1. ¿Cómo creo una red de acoplador macvlan si mi puerta de enlace está fuera de mi subred?
  2. ¿Cómo ejecuto un contenedor usando la red macvlan cuando solo tengo una dirección IP pero no una dirección MAC?

No tengo mucho conocimiento sobre la creación de redes, será de gran ayuda si explica 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::1


Es posible que desee comenzar leyendo conceptos de enrutamiento simple o subredes y enrutamiento

¿Cómo creo una red de acoplador 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.

Enrutamiento de subred a una red de puente.

Desde la captura de pantalla de alojamiento, la subred 88.99.114.16/28 se ha configurado para enrutar a través de su host 88.99.102.103. Debe crear una interfaz en algún lugar de su host para utilizarla como puerta de enlace si desea que Docker use el resto de las direcciones IP en la subred.

Cree una red de puente para utilizar Docker, al puente se le asignará la dirección de la 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 el enrutamiento funcione. Configure el reenvío de IP en /etc/sysctl.conf :

net.ipv4.ip_forward = 1

y aplicar la nueva configuración

sysctl -p /etc/sysctl.conf

A continuación, ejecute un contenedor en el nuevo puente con su red enrutada para 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 ACCEPT

Los 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 Hi

No es necesario mapeo de 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 / de host en un contenedor. Como no tiene una interfaz física para estas direcciones, será difícil mapear una en un contenedor.