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).
- ¿Cómo creo una red de acoplador macvlan si mi puerta de enlace está fuera de mi subred?
- ¿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.