VPN লিক ঠিক করতে IPv6 বন্ধ করবেন? বরং নীতি ঠিক করুন
লিংক-লোকাল ঠিকানা লিক নয়, গ্লোবাল IPv6 রুটও নয়। আগে ব্লক, বহন ও অপরিবর্তিত রাখার মধ্যে বেছে নিন।
IPv6 রেঞ্জের একটি ঠিকানা টেস্ট পেজে দেখা যাচ্ছে, টানেল স্পষ্টতই তা বহন করছে না, আর ইন্টারনেটের সবচেয়ে জনপ্রিয় পরামর্শ হলো সব জায়গায় IPv6 বন্ধ করে দেওয়া। ওই কমান্ড প্যানেলকে সত্যিই চুপ করিয়ে দেয়। এটি অ্যাক্সেস নেটওয়ার্ক যে প্রোটোকলের ওপর নির্ভর করতে পারে সেটিও সরিয়ে দেয়, আর ঠিকানাটি আসল লিক ছিল, লিংক-লোকাল ইন্টারফেস ঠিকানা ছিল, নাকি একটি রিজলভার নিজের কাজ করছিল তা জানার কোনো উপায় আপনার কাছে রাখে না। সঠিক নিয়ন্ত্রণ ঠিক করে তিনটি শর্ত, আর তাদের মধ্যে কেবল একটি ব্লকিংয়ের দিকে নিয়ে যায়।
টুলটি আসলে কী মেপেছে তা শনাক্ত করুন
সবচেয়ে সাধারণ ভুল অ্যালার্ম হলো লিংক-লোকাল ঠিকানা, যা fe80: দিয়ে শুরু হয় এবং IPv6 সক্ষম প্রতিটি ইন্টারফেসে থাকে, মেশিনটি IPv6-এর মাধ্যমে ইন্টারনেটে পৌঁছাক বা না পৌঁছাক। এটি ইন্টারফেস তালিকায় এবং কিছু অ্যাপ্লিকেশন ডায়াগনস্টিকে দেখা যায়, আর আপনার ট্রাফিক পথ সম্পর্কে কিছুই বলে না।
দ্বিতীয় ভুল অ্যালার্ম হলো fc00::/7-এর মধ্যে একটি ইউনিক লোকাল ঠিকানা, যা নেটওয়ার্কের ভেতরে ব্যবহৃত একটি প্রাইভেট রেঞ্জ। হোস্টের সব ঠিকানা ছাপানো টুল এটি পাবলিক ঠিকানার পাশে আনন্দেই দেখাবে। দ্রুত পড়ে যে কেউ এটিকে লিক বলে ডাকে, তারপর এমন সমস্যায় এক ঘণ্টা নষ্ট করে যা আসলে নেই।
তৃতীয়টি মোটেও ভুল অ্যালার্ম নয়। টানেলের বাইরে ইন্টারনেটে পৌঁছানো গ্লোবাল ঠিকানাই আসল লিক, আর কিছু সিদ্ধান্ত নেওয়ার আগে এটি মাপা উচিত:
ip -6 addr show scope global
ip -6 route show default
curl -6 -sS --max-time 6 https://ifconfig.co
যদি প্রথম কমান্ড একটি গ্লোবাল ঠিকানা ছাপায় এবং তৃতীয়টি টানেলের নয় এমন একটি পাবলিক IPv6 ঠিকানা ফেরত দেয়, তবে টানেলের বাইরে আপনার সত্যিকারের পথ আছে। যদি প্রথমটি লিংক-লোকাল এন্ট্রি ছাড়া কিছু না ছাপায়, তবে ঠিক করার মতো কোনো লিক ছিলই না।
নিয়ন্ত্রণ ঠিক করে তিনটি শর্ত
সিদ্ধান্তটি "IPv6 ভালো" বা "IPv6 খারাপ" নয়। সিদ্ধান্তটি হলো আপনি তিনটি পরিস্থিতির কোনটিতে আছেন, আর প্রতিটির সঠিক উত্তর আলাদা এবং ভুল করলে তার মূল্যও আলাদা।
| Situation | Correct control | Cost if you disable IPv6 instead |
|---|---|---|
| Exit has no IPv6, host does | Block IPv6 deliberately in the tunnel policy | Same visible result, no documentation of intent |
| Exit carries IPv6, host leaks | Route IPv6 into the tunnel and verify | You lose IPv6 reachability entirely |
| Access network is IPv6-only | Change nothing; use the tunnel's IPv6 | Machine loses connectivity completely |
প্রথম সারিটি মানুষ সাধারণত যা বোঝায়, আর তা বৈধ। যে ক্লায়েন্টের এগজিটে IPv6 সমর্থন নেই, সে হোস্টের নিজস্ব IPv6 ট্রাফিক চুপচাপ বের হতে দেবে না, কারণ সেটাই নথিভুক্ত ডুয়াল-স্ট্যাক লিক। উদ্দেশ্য হলো এটিকে ঘোষিত নীতি হিসেবে ব্লক করা, কার্নেলে প্রোটোকল বন্ধ করা নয়। দৃশ্যমান ফলাফল একই, আর পরবর্তীতে কেবল একটিই যাচাই করা যায়।
তৃতীয় সারিতেই সাধারণ পরামর্শ সক্রিয়ভাবে ক্ষতিকর হয়ে ওঠে। মোবাইল অপারেটর ও কিছু হোম সংযোগ IPv4 গন্তব্যের জন্য অনুবাদসহ IPv6-only নেটওয়ার্ক চালায়। সেখানে IPv6 সরিয়ে দিলে নেটওয়ার্কের দেওয়া একমাত্র পরিবহনই সরিয়ে ফেলবেন, যা আপনার ডিবাগ করা সমস্যার চেয়ে অনেক খারাপ বিভ্রাট তৈরি করে।
এগজিটে IPv6 না থাকলে ইচ্ছাকৃতভাবে ব্লক করুন
ক্লায়েন্টের নিজস্ব ব্যবস্থাকে অগ্রাধিকার দিন, কারণ এটি ঠিক ততক্ষণ প্রযোজ্য যতক্ষণ টানেল চালু থাকে এবং বন্ধ হলে ফিরে যায়। OpenVPN -এ এর জন্য একটি অপশন আছে, আর অন্য ক্লায়েন্টের জন্য iptables-এ সমতুল্য নিয়ম আছে:
block-ipv6
ip6tables -A OUTPUT -o eth0 -j REJECT --reject-with ipv6-port-unreachable
নির্দেশিকাটি প্রোফাইলে থাকে; নিয়মটি থাকে ফায়ারওয়ালে, যা আপনি দেখে সরাতে পারেন। দুটোই বন্ধ অবস্থায় ব্যর্থ হয়, যা আপনি চান, আর দুটোই কনফিগারেশন ডিফে দৃশ্যমান, যা স্টার্টআপ স্ক্রিপ্টে পোঁতা কার্নেল sysctl নয়।
কেন এটি আছে তা লিখে রাখুন। মন্তব্যহীন ব্লকিং নিয়ম পরের যে ব্যক্তির অন্য কিছুর জন্য IPv6 দরকার সে সরিয়ে দেয়, তারপর লিক চুপচাপ ফিরে আসে।
এগজিট IPv6 বহন করলে এটি রাউট করুন এবং দুই ফ্যামিলিই পরীক্ষা করুন
সার্ভার সমর্থন করলে IPv6 বহন করাই ভালো উত্তর, আর এটি খুব বেশি কঠিনও নয়। শর্ত হলো টানেল ইন্টারফেসে সেই ফ্যামিলির একটি ঠিকানা থাকতে হবে এবং তার ডিফল্ট রুট ফিজিক্যাল ইন্টারফেসের বাইরে নয়, টানেলের ভেতরে যেতে হবে:
ip -6 route get 2606:4700:4700::1111
ip -6 route show default
curl -6 -sS --max-time 6 https://ifconfig.co
curl -4 -sS --max-time 6 https://ifconfig.co
রুট লুকআপই নির্ধারক পরীক্ষা: এটি টানেল ইন্টারফেসের নাম বললে IPv6 ট্রাফিক বহন হচ্ছে। এরপর দুটি curl কল দেখায় প্রতিটি ফ্যামিলি কী দেখছে, আর তাদের তুলনা করাই প্রমাণ যে দুটি পথই এখন একই এগজিট দিয়ে বেরোচ্ছে।
সফল সংযোগেই থেমে যাবেন না। টানেল আবার সংযুক্ত করে আবার যাচাই করুন, কারণ সার্ভার যদি শুধু প্রাথমিক কনফিগারেশনে পাঠায়, তবে পুশ করা IPv6 রুট পুনঃস্থাপনে হারিয়ে যেতে পারে। এরপর একটি বাদ দেওয়া গন্তব্য যাচাই করুন, কারণ স্প্লিট-টানেল নিয়মেই দুই ফ্যামিলি সবচেয়ে বেশি মেলে না।
অ্যাক্সেস নেটওয়ার্ক শুধু IPv6 হলে এটিকে অপরিবর্তিত রাখুন
কিছু নেটওয়ার্ক কেবল IPv6 দেয় এবং আশা করে ডিভাইসটি অপারেটরের দিকে অনুবাদ ব্যবস্থার মাধ্যমে IPv4 সেবায় পৌঁছাবে। এমন মেশিনে IPv6 বন্ধ করা নিরাপত্তার উন্নতি নয়; এটি যেকোনো কিছুতে যাওয়ার একমাত্র পথ সরিয়ে দেয়। এটি নিজের তৈরি বিভ্রাট, কারও দরকার নেই এমন একটি টেস্ট ফলাফলের জন্য।
ভুল করার লক্ষণটি স্বতন্ত্র ও অপ্রিয়: টানেল প্রতিষ্ঠিত হচ্ছে বলে মনে হয়, নাম রিজলিউশন কাজ করে, কিন্তু কিছুই লোড হয় না। IPv6 পরিবর্তনের পরে এমন দেখলে সঙ্গে সঙ্গে সেটিং ফিরিয়ে আনুন এবং ডায়াগনসিস অন্য জায়গায় চালিয়ে যান।
যা-ই বেছে নিন, সিদ্ধান্তটি প্রোফাইল বা ফায়ারওয়ালে স্পষ্ট রাখুন, এগজিট আসলে যা সমর্থন করে তার সঙ্গে তা যুক্ত করুন, এবং যে ডুয়াল-স্ট্যাক আচরণের কথা বলে RFC 7359 ডুয়াল-স্ট্যাক আলোচনা তা লক্ষ করুন। ঘোষিত ব্লক একটি নীতি। বন্ধ করা প্রোটোকল এমন একটি উপায় যা কেউ নিরীক্ষা করতে পারে না, আর টেস্ট পেজ থেকে দুটোই একই রকম দেখায়।