Arkaplan bilgisi
Docker çalıştıran iki ağ arabirimine sahip bir sunucum var. Docker, bazı sanallaştırma araçları gibi, adlı bir Linux köprü arayüzü oluşturur docker0
. Bu arabirim varsayılan olarak bir IP'si ile yapılandırılır 172.17.42.1
ve tüm Docker kapsayıcıları bu arabirimle ağ geçidi olarak iletişim kurar ve aynı /16
aralıkta IP adresleri atanır . Anladığım kadarıyla, kapsayıcılara / kapsayıcılardan gelen tüm ağ trafiği bir NAT'dan geçer, bu yüzden giden 172.17.42.1
ve gelen gönderilir 172.17.42.1
.
Kurulumum şöyle görünür:
+------------+ /
| | |
+-------------+ Gateway 1 +-------
| | 10.1.1.1 | /
+------+-------+ +------------+ |
| eth0 | /
| 10.1.1.2 | |
| | |
| DOCKER HOST | |
| | | Internet
| docker0 | |
| (bridge) | |
| 172.17.42.1 | |
| | |
| eth1 | |
| 192.168.1.2 | \
+------+-------+ +------------+ |
| | | \
+-------------+ Gateway 2 +-------
| 192.168.1.1| |
+------------+
Sorun
Ben yönlendirmek için / den ikinci dışına herhangi Docker kaplara tüm trafiği istiyorum eth1
192.168.1.2
varsayılan ağ geçidine arayüzüne 192.168.1.1
dışarı çıkmak konak makineye / den tüm trafiği yerken, eth0
10.1.1.2
varsayılan ağ geçidi için arayüzü 10.1.1.1
. Şimdiye kadar boşuna çeşitli şeyler denedim ama düzeltmek için en yakın olduğunu düşünüyorum tek şey iproute2 böyle kullanmaktır:
# Create a new routing table just for docker
echo "1 docker" >> /etc/iproute2/rt_tables
# Add a rule stating any traffic from the docker0 bridge interface should use
# the newly added docker routing table
ip rule add from 172.17.42.1 table docker
# Add a route to the newly added docker routing table that dictates all traffic
# go out the 192.168.1.2 interface on eth1
ip route add default via 192.168.1.2 dev eth1 table docker
# Flush the route cache
ip route flush cache
# Restart the Docker daemon so it uses the correct network settings
# Note, I do this as I found Docker containers often won't be able
# to connect out if any changes to the network are made while it's
# running
/etc/init.d/docker restart
Bir konteyneri kaldırdığımda, bunu yaptıktan sonra hiç ping alamıyorum. Köprü arabirimlerinin bu tür bir yönlendirme için fiziksel arabirimlerle aynı şekilde ele alınıp alınmadığından emin değilim ve sadece akıl sağlığı kontrolünün yanı sıra bu basit görünen görevi nasıl gerçekleştirebileceğime dair ipuçları istiyorum.