A continuación se muestra mi configuración de mis contenedores acoplables.
red
nw1: Esta es una red privada. Los contenedores de esta red no pueden acceder a Internet (ping google.com no funciona)
puente:Esta no es una red privada y es la red predeterminada de un contenedor y los contenedores en esta red pueden acceder a Internet (ping google.com funciona)
contenedores:
vm1_nw1:Este contenedor está conectado a nw1(red privada nw1)
vm2_nw1:Este contenedor está conectado a nw1 (red privada nw1)
ext_world_vm:Este contenedor está conectado a ambas redes (nw1,puente)
con la siguiente configuración pude realizar ssh desde ext_world_vm a vm1_nw1 y vm2_nw1, es decir, se puede acceder a los contenedores vm1_nw1 y vm2_nw1 utilizando el contenedor ext_world_vm
#!/bin/bash
docker run --privileged --name vm1 -itd ubuntu
docker exec vm1 useradd -c "saiteja" -m saiteja
docker exec vm1 echo "saiteja:saiteja"|chpasswd
docker exec vm1 apt-get update -y
docker exec vm1 apt-get install net-tools -y
docker exec vm1 apt-get install iproute2 -y
docker exec vm1 apt-get install iputils-ping -y
docker exec vm1 apt-get install curl -y
docker exec vm1 apt-get install iptables -y
docker exec vm1 apt-get install openssh-server -y
docker exec vm1 apt-get install ssh -y
docker exec vm1 service ssh restart
docker commit vm1 vm_with_nw:latest
docker network create -d bridge nw1 --internal
docker run --privileged --name vm1_nw1 -itd --network=nw1 vm_with_nw
docker run --privileged --name vm2_nw1 -itd --network=nw1 vm_with_nw
docker run --privileged --name ext_world_vm -itd vm_with_nw:latest
docker network connect nw1 ext_world_vm
docker exec ext_world_vm service ssh start
docker exec ext_world_vm service ssh restart
docker inspect ext_world_vm
echo -n "enter ext_world_vm_ip:"
read ext_world_vm_ip
docker exec vm1_nw1 iptables -P FORWARD DROP
docker exec vm1_nw1 iptables -A INPUT -m state --state INVALID -j DROP
docker exec vm1_nw1 iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
docker exec vm1_nw1 iptables -A INPUT -i lo -j ACCEPT
docker exec vm1_nw1 iptables -A INPUT -s ${ext_world_vm_ip} -j ACCEPT
docker exec vm1_nw1 service ssh start
docker exec vm1_nw1 service ssh restart
docker exec vm1_nw1 iptables -P INPUT DROP
docker exec vm2_nw1 iptables -P FORWARD DROP
docker exec vm2_nw1 iptables -A INPUT -m state --state INVALID -j DROP
docker exec vm2_nw1 iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
docker exec vm2_nw1 iptables -A INPUT -i lo -j ACCEPT
docker exec vm2_nw1 iptables -A INPUT -s ${ext_world_vm_ip} -j ACCEPT
docker exec vm2_nw1 service ssh start
docker exec vm2_nw1 service ssh restart
docker exec vm2_nw1 iptables -P INPUT DROP
echo "done"
El siguiente es el enunciado de mi problema.
ahora quiero configurar estos contenedores de la siguiente manera
1ª configuración: Los contenedores vm1_nw1,vm2_nw1 deben poder acceder a Internet a través de ext_world_vm (es decir, ext_world_vm debe actuar como puerta de enlace para vm1_nw1,vm2_nw1, el ping a google.com debería funcionar desde vm1_nw1,vm2_nw1).
Lo siguiente es lo que intenté pero el resultado no fue exitoso:
ext_world_vm
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
iptables -A INPUT -i eth0 -j ACCEPT
iptables -A INPUT -i eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -j ACCEPT
vm1_nw1,vm2_nw1:
route add default gw <ext_world_vm ip address> eth0
Ayúdenme a configurarlo de manera que los contenedores en la red privada (vm1_nw1, vm2_nw1) puedan acceder a Internet utilizando el contenedor en la red puente (ext_world_vm, es decir, debería actuar como puerta de enlace para vm1_nw1, vm2_nw1).
Respuesta1
crear la red usando el controlador macvlan
`docker network create -d macvlan nw1 --internal`