আমার হোম সার্ভারের দুটি প্রধান ইন্টারফেস রয়েছে eth1
(একটি মানক ইন্টারনেট সংযোগ) এবং tun0
(একটি ওপেনভিপিএন টানেল)। আমি iptables
ইউআইডি 1002 এর মালিকানাধীন স্থানীয় প্রক্রিয়া দ্বারা উত্পন্ন সমস্ত প্যাকেটগুলি বাইরে বেরিয়ে আসতে tun0
এবং অন্য সমস্ত প্যাকেটগুলি বাইরে বেরিয়ে আসতে বাধ্য করতে চাই eth1
।
আমি সহজেই ম্যাচ করা প্যাকেটগুলি চিহ্নিত করতে পারি:
iptables -A OUTPUT -m owner --uid-owner 1002 -j MARK --set-mark 11
এখন, আমি পোস্টারুটিং চেইনে (সম্ভবত মঙ্গলের টেবিলের) কিছু নিয়ম রাখতে চাই যাতে ১১ টি চিহ্নিত প্যাকেটগুলি মেলে এবং তাদের পাঠানো হয় tun0
, তারপরে একটি নিয়ম অনুসরণ করা হয় যা সমস্ত প্যাকেটের সাথে মেলে এবং সেগুলি প্রেরণ করে eth1
।
আমি রুট লক্ষ্যটি পেয়েছি, তবে এটি কেবল উত্স ইন্টারফেসটি পুনরায় লিখবে বলে মনে হচ্ছে (যদি না আমি এটি ভুলভাবে পড়ছি)।
Iptables এটি সক্ষম? এর পরিবর্তে আমার কী রাউটিং টেবিলটি দিয়ে ( ip route
কেবলমাত্র উত্তরাধিকার route
আদেশের মাধ্যমে বা কেবলমাত্র উত্তরাধিকারী আদেশগুলি) নিয়ে গণ্ডগোল করতে হবে?
সম্পাদনা: আমি ভেবেছিলাম সম্ভবত আমার আরও তথ্য সরবরাহ করা উচিত। আমার কাছে বর্তমানে অন্য কোনও iptables নিয়ম নেই (যদিও ভবিষ্যতে সম্পর্কযুক্ত কাজ সম্পাদনের জন্য আমি কিছু বিধি তৈরি করতে পারি)। এছাড়াও, এর ফলাফল ip route
:
default via 192.168.1.254 dev eth1 metric 203
10.32.0.49 dev tun0 proto kernel scope link src 10.32.0.50
85.17.27.71 via 192.168.1.254 dev eth1
192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.73 metric 203
আমি রাউটিং টেবিলটি স্পর্শ করি নি - এটি বর্তমানে এটি ঠিক এমনভাবে হয় (যদিও এটি মোটামুটি ময়লা দেখাচ্ছে)। আমি দুঃখিত, তবে আমার কাছে route
এই মেশিনে লিগ্যাসি কমান্ড ইনস্টল নেই।
এবং ip addr
(অবশ্যই, eth0 এবং eth2 এর আউটপুটটিকে উপেক্ষা করা যেতে পারে - এগুলি এনআইসি যেগুলি বর্তমানে ব্যবহৃত হচ্ছে না):
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
link/ether 1c:6f:65:2a:73:3f brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:1b:21:9d:4e:bb brd ff:ff:ff:ff:ff:ff
inet 192.168.1.73/24 brd 192.168.1.255 scope global eth1
inet6 fe80::21b:21ff:fe9d:4ebb/64 scope link
valid_lft forever preferred_lft forever
4: eth2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
link/ether 00:1b:21:6a:c0:4b brd ff:ff:ff:ff:ff:ff
5: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 100
link/none
inet 10.32.0.50 peer 10.32.0.49/32 scope global tun0
সম্পাদনা: আমি কিছু বাছাইয়ের কাজ করেছি, তবে এটি চিহ্নিত প্যাকেটগুলি টিউনটিতে ফরোয়ার্ড করছে না। মূলত, আমি একটি সারণী (11) যুক্ত করেছি এবং ব্যবহার করেছি:
ip route add table 11 via 10.32.0.49 dev tun0
ip rule add priority 10000 fwmark 11 table 11
যখন আমি কেবল sudo -u user1000 wget -qO- whatismyip.org
, আমি আমার বাড়ির বাহ্যিক আইপি ঠিকানা পাই, তবে আমি যদি তা করি তবে আমি sudo -u user1002 wget -qO- whatismyip.org
আমার বাড়ির আইপি ঠিকানাও পাই (তবে ওপেনভিপিএন টানেলের অপর প্রান্তে আমার আইপি পাওয়া উচিত)।
রানিং iptables -vL
নিশ্চিত করে যে প্যাকেটগুলি চিহ্নিতকরণের নিয়মের সাথে মিলছে, তবে তারা রাউটিং বিধি অনুসরণ করছে বলে মনে হয় না।
সম্পাদনা: আমি এটিতে দীর্ঘ সময় ব্যয় করেছি এবং এটি এখনও কার্যকর না হলেও আমি মনে করি আমি কিছুটা কাছাকাছি এসেছি।
Iptables নিয়মটি mangle
টেবিলের OUTPUT চেইনে থাকতে হবে। আমি মনে করি nat
উত্সের ঠিকানাটি সেট করার জন্য আমারও টেবিলের POSTROUTING চেইনে একটি মাস্কেরড নিয়ম দরকার need তবে, OUTPUT এর ম্যাঙ্গেলের পরে পুনঃ-রাউটিংটি সঠিকভাবে কাজ করছে না।
আমি এখন এটিতে 5 ঘন্টা অতিবাহিত করেছি, তাই আমি একটি বিরতি নিচ্ছি এবং সম্ভবত আজকের রাতের পরে বা আগামীকাল কোনও দিন এটিতে ফিরে আসব।