Linux
允許 docker 容器使用容器作為網關與 Internet 通信
下面是我的 docker 容器的配置
網路
nw1:這是一個私有網路容器在這個網路不能訪問網際網路(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,即容器 vm1_nw1 和 vm2_nw1 可以使用 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"
以下是我的問題陳述
現在我想按如下方式配置這些容器
第一種配置: 容器 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 的網關)
使用 macvlan 驅動程序創建網路
`docker network create -d macvlan nw1 --internal`