পেছনের তথ্য
আমার কাছে দুটি নেটওয়ার্ক ইন্টারফেসের সাথে একটি সার্ভার রয়েছে যা ডকার চলছে। কিছু ভার্চুয়ালাইজেশন সরঞ্জামের মতো ডকার একটি লিনাক্স ব্রিজ ইন্টারফেস তৈরি করে docker0
। এই ইন্টারফেসটি একটি আইপি দিয়ে ডিফল্টরূপে কনফিগার করা হয় 172.17.42.1
এবং সমস্ত ডকার পাত্রে তাদের গেটওয়ে হিসাবে এই ইন্টারফেসের সাথে যোগাযোগ করে এবং একই /16
পরিসরে আইপি ঠিকানা বরাদ্দ করা হয় । আমি এটি বুঝতে পেরেছি, ধারকগুলিতে / থেকে সমস্ত নেটওয়ার্ক ট্র্যাফিক একটি NAT এর মধ্য দিয়ে যায়, সুতরাং বহির্মুখী এটি আসে বলে মনে হয় 172.17.42.1
এবং অভ্যন্তরে এটি প্রেরণ হয়ে যায় 172.17.42.1
।
আমার সেটআপটি দেখতে এমন দেখাচ্ছে:
+------------+ /
| | |
+-------------+ 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| |
+------------+
সমস্যাটি
আমি রুট থেকে / সেকেন্ডের যে কোনো Docker পাত্রে সব ট্রাফিক চান eth1
192.168.1.2
একটি ডিফল্ট গেটওয়ে ইন্টারফেস 192.168.1.1
, যখন হোস্ট মেশিনের থেকে / সমস্ত ট্রাফিক থাকার বাইরে যেতে eth0
10.1.1.2
একটি ডিফল্ট গেটওয়ে ইন্টারফেস 10.1.1.1
। আমি এখন পর্যন্ত বিভিন্ন জিনিস চেষ্টা করেও লাভ করতে পারি নি তবে একটি জিনিস যা আমি মনে করি এটি সংশোধন করা সবচেয়ে নিকটতম তা iproute2 এর মতো ব্যবহার করা:
# 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
আমি যখন কোনও ধারক নিয়ে আসি আমি এগুলি করার পরে একেবারে পিন করতে পারি না। এই ধরণের রাউটিংয়ের জন্য শারীরিক ইন্টারফেসগুলি ঠিক সেভাবেই ব্রিজ ইন্টারফেসগুলি পরিচালনা করা হয় কিনা তা আমি অনিশ্চিত এবং কেবল একটি স্যানিটি পরীক্ষার পাশাপাশি আমি কীভাবে এই আপাতদৃষ্টিতে সহজ কাজটি সম্পাদন করতে পারি তার কোনও টিপস চাই।