允許 docker 容器使用容器作為網關與網際網路進行通信

允許 docker 容器使用容器作為網關與網際網路進行通信

以下是我的 docker 容器的配置

網路

西北1:這是一個私人網絡,該網絡中的容器無法訪問互聯網(ping google.com 不起作用)

:這不是私人網絡,而是容器的預設網絡,並且該網絡中的容器可以訪問互聯網(ping google.com 有效)

容器

vm1_nw1:此容器連接到nw1(私有網路nw1)

vm2_nw1:此容器連接到nw1(私有網路nw1)

ext_world_vm:此容器連接到兩個網路(nw1,bridge)

透過以下配置,我能夠從 ext_world_vm ssh 到 vm1_nw1 和 vm2_nw1,即可以使用 ext_world_vm 容器存取容器 vm1_nw1 和 vm2_nw1

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

以下是我的問題陳述

現在我想如下設定這些容器

第一個配置: 容器 vm1_nw1、vm2_nw1 必須能夠透過 ext_world_vm 存取網際網路(即 ext_world_vm 必須充當 vm1_nw1、vm2_nw1 ping google.com 的網關,應從 vm1_nw1、vm2_nw1 工作)

以下是我嘗試過但結果並不成功:

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

請幫我配置,以便私有(vm1_nw1,vm2_nw1)網路中的容器可以使用橋接網路(ext_world_vm,即它應該充當vm1_nw1,vm2_nw1)中的容器存取互聯網

答案1

使用 macvlan 驅動程式建立網絡

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

相關內容