1

Below is my configuration of my docker containers

network

nw1: This is a private network containers in this network cannot access the internet (ping google.com doesn't work)

bridge:This is not a private network and is the default network of a container and containers in this network can access the internet (ping google.com works)

containers :

vm1_nw1:This container is connected to nw1(private network nw1)

vm2_nw1:This conatiner is connected to nw1(private network nw1)

ext_world_vm :This container is connected to both networks(nw1,bridge)

with the below configuration i was able to ssh from ext_world_vm to vm1_nw1 and vm2_nw1 i.e the containers vm1_nw1 and vm2_nw1 can be accessed using ext_world_vm container

    #!/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"

The following is my problem statement

now i want to configure these containers as follows

1st configuration: The containers vm1_nw1,vm2_nw1 must be able to access the internet via ext_world_vm (i.e ext_world_vm must act as gateway for vm1_nw1,vm2_nw1 ping google.com should work from vm1_nw1,vm2_nw1)

The following is what i have tried but the outcome was not successful:

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

please help me configure such that the containers in private(vm1_nw1,vm2_nw1) network can access the internet using the container in bridge network(ext_world_vm i.e it should act as gateway for vm1_nw1,vm2_nw1)

  • 1
    If your `ext_world_vm` container doesn't use the `macvlan` network type, then the internal containers will have to route via the `ext_world_vm` container _and_ via the physical host. The physical host will thus also need to have iptables rules et cetera to make this work. – Tommiie Aug 30 '18 at 11:54
  • `docker network create -d bridge nw1 --internal` ` docker run --privileged --name vm1 -itd ubuntu` – Sai Teja Pakalapati Aug 30 '18 at 12:02

1 Answers1

1

create the network using macvlan driver

            `docker network create -d macvlan  nw1  --internal`