Informasi latar belakang
Saya memiliki server dengan dua antarmuka jaringan yang menjalankan Docker. Docker, seperti beberapa alat virtualisasi, menciptakan antarmuka jembatan Linux yang disebut docker0
. Antarmuka ini dikonfigurasi secara default dengan IP 172.17.42.1
dan semua wadah Docker berkomunikasi dengan antarmuka ini sebagai gateway mereka dan diberi alamat IP dalam /16
kisaran yang sama . Seperti yang saya pahami, semua lalu lintas jaringan ke / dari kontainer melewati NAT, jadi keluar sepertinya berasal 172.17.42.1
, dan masuk itu akan dikirim ke 172.17.42.1
.
Pengaturan saya terlihat seperti ini:
+------------+ /
| | |
+-------------+ 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| |
+------------+
Masalah
Saya ingin merutekan semua lalu lintas dari / ke wadah Docker apa pun dari eth1
192.168.1.2
antarmuka kedua ke gateway default 192.168.1.1
, sementara semua lalu lintas dari / ke mesin host keluar eth0
10.1.1.2
antarmuka ke gateway default 10.1.1.1
. Saya sudah mencoba berbagai hal sejauh ini tidak berhasil tetapi satu hal yang saya pikir paling dekat dengan yang benar adalah dengan menggunakan iproute2 seperti:
# 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
Ketika saya membawa wadah saya tidak bisa keluar sama sekali setelah melakukan ini. Saya tidak yakin apakah antarmuka jembatan ditangani dengan cara yang sama dengan antarmuka fisik untuk jenis perutean ini, dan hanya ingin pemeriksaan kewarasan serta tips tentang cara menyelesaikan tugas yang tampaknya sederhana ini.