Android OpenVPN টানেল ঠিকানা ছাড়া রুট যোগ করে না
Android OpenVPN ক্লায়েন্ট ফোনে টানেল ঠিকানা না থাকা পর্যন্ত রুট যোগ করে না। কে তা দেয়, pull ফিল্টার কী বাদ দেয় এবং কখন নিজে লিখবেন তা দেখুন।
আপনার Android OpenVPN প্রোফাইল রুট যোগ করতে পারে না, কারণ ফোনে ভার্চুয়াল ইন্টারফেসে কোনো ঠিকানা নেই, তাই রুটের দেখানোর মতো কিছু নেই। রুট শুধু বলে প্যাকেট কোথায় যাবে। টানেল ঠিকানা বলে টানেলের ভেতরে ফোনটি কে, আর ইন্টারফেস তৈরি হওয়ার আগেই ক্লায়েন্টকে একটি দিতে হবে। নিচের চারটি পরীক্ষা ক্রমে করুন এবং প্রথম ব্যর্থতায় থামুন, কারণ ঠিকানা তৈরির আগে রুট বদলালে আসল সমস্যা ঢাকা পড়ে।
ক্লায়েন্ট যে ক্রমে চালায় সেই ক্রমে ব্যর্থতা পড়ুন
Android-এর VpnService.Builder দুটি ধারণা আলাদা রাখে: addAddress() অ্যাপ যে ইন্টারফেস বানাচ্ছে তাতে ঠিকানা বসায়, addRoute() গন্তব্য প্রিফিক্স যোগ করে, আর establish() অন্তত একটি ঠিকানা যোগ না হলে ইন্টারফেস তৈরি করতে অস্বীকার করে। OpenVPN ক্লায়েন্ট প্রোফাইল ও সার্ভারের পাঠানো অপশনগুলো ঠিক সেই কলগুলোর উপর ম্যাপ করে, তাই ঠিকানা না পড়া সংযোগ ইন্টারফেসই বানাতে পারে না।
তাই আপনি যে লগ লাইন পড়ছেন তা রুটের নাম নিতে পারে, অথচ কারণ এক ধাপ আগে। ইন্টারফেস থাকার পরেই ক্লায়েন্ট রুট পর্যায়ে পৌঁছায়; ঠিকানা না থাকলে কলটি সঙ্গে সঙ্গে ব্যর্থ হয় বা কখনো চলে না। লগ যদি বলে রুট যোগ করতে পারছে না, তবে রুটের বাক্য নয়, ঠিকানা থেকেই শুরু করুন।
পরীক্ষা 1: সার্ভার কি উত্তরে ঠিকানা দেয়?
রাউটেড OpenVPN সেবায় ঠিকানা আসে সার্ভার পুল থেকে বা প্রতি ক্লায়েন্টের বরাদ্দ থেকে, আর টোপোলজি তার আকৃতি ঠিক করে। OpenVPN 2.4 বা তার পরের সার্ভারে সাবনেট টোপোলজির সেবা এমন দেখায়:
topology subnet
server 10.8.0.0 255.255.255.0
client-config-dir ccdএই আকৃতিতে সার্ভার ifconfig 10.8.0.6 255.255.255.0 এর মতো কিছু পাঠায়। পুরনো topology net30 স্থাপনা এর বদলে পিয়ার ঠিকানা পাঠায়, যেমন ifconfig 10.8.0.6 10.8.0.5, তাই দুই মডেলের মধ্যে সরানো প্রোফাইল সঠিক মনে হলেও ভুল নেটমাস্ক বহন করে।
ক্লায়েন্টের সংযোগ লগে পাঠানো অপশনগুলোর সেট খুঁজুন। যদি সেখানে কোনো ifconfig লাইন না থাকে, সার্ভার কখনো ঠিকানা পাঠায়নি বা ক্লায়েন্ট অপশনটি নাকচ করেছে। client-config-dir ব্যবহার করা সার্ভারে সার্টিফিকেটের কমন নেমে নামকরণ করা ফাইলটি থাকতে হবে এবং বরাদ্দটি বহন করতে হবে:
# ccd/phone-anna
ifconfig-push 10.8.0.6 255.255.255.0পরীক্ষা 2: ক্লায়েন্ট কি দেওয়া ঠিকানাটি রাখে?
অতিরিক্ত প্রশস্ত ফিল্টার দ্বিতীয় সাধারণ কারণ। pull-filter OpenVPN 2.4 ও পরের সংস্করণে আছে, আর একই অপশনে কয়েকটি ফিল্টার মিললে শেষটি জেতে, তাই শেষে থাকা সর্বগ্রাহী ফিল্টার ত্রুটি ছাড়াই ঠিকানা সরিয়ে দেয়:
# removes every pushed option, including the address
pull-filter ignore "ifconfig"
pull-filter ignore "route"আপনি সত্যিই সরাতে চান এমন অপশনে ফিল্টার সংকুচিত করুন এবং ঠিকানাটি একা ছেড়ে দিন:
# keeps the pushed address, drops one unwanted LAN route
pull-filter ignore "route 10.60.0.0"সব pull বন্ধ করার পরামর্শ সাধারণত একজন একটা রুট সরাতে চাওয়া লোকের কাছ থেকে আসে। route-nopull আরও সংকীর্ণ সুইচ: এটি ifconfig ও বাকি পাঠানো অপশন রাখে, শুধু পাঠানো রুট ও DHCP অপশন নাকচ করে। সত্যিই এটাই চাইলে এটি ব্যবহার করুন, আর ঠিকানার প্রশ্নের উত্তর আলাদা দিন।
পরীক্ষা 3: ঠিকানাটি কি নিজে লেখার অধিকার আপনার?
হাতে ঠিকানা দেওয়া বৈধ কেবল তখনই যখন অপারেটর আপনাকে মানটি দেন। নিজে লিখলে তা VPN ক্লায়েন্ট সাবনেটের হতে হবে, সক্রিয় সেশনের মধ্যে অনন্য হতে হবে এবং সার্ভারের টোপোলজির সঙ্গে মিলতে হবে। ডেস্কটপ ব্রিজ বা দূরবর্তী LAN-এর হোস্টের ঠিকানা কপি করা দুই দিকেই ব্যর্থ: ফোন এমন ঠিকানা দাবি করবে যা অন্যত্র আগেই আছে, আর গেটওয়ের সেখানে ফেরার পথ থাকবে না।
রুটে থাকা দূরবর্তী LAN প্রিফিক্স গন্তব্য, কখনোই ফোনের পরিচয় নয়। 10.60.0.0/24 এর জন্য রুট বলে টানেল দিয়ে ওই নেটওয়ার্কে পৌঁছাও; ফোনের কোন 10.60.0.x ঠিকানা রাখা উচিত তা বলে না, আর ফোনের সেগুলোর একটিও রাখা উচিত নয়। স্থির বরাদ্দ সার্ভারের দিকে থাকে, যেখানে গতিশীল পুলের সঙ্গে সংঘর্ষ হয় না।
এক পরিচয়ে দুটি সেশন একই সংঘর্ষ দেখায়। একই সার্টিফিকেট দুবার সংযোগ করলে এবং সার্ভার দুটিকেই একটি স্থির ঠিকানা পাঠালে দ্বিতীয় সেশন প্রথমটির নকল করে, আর সমাধান আলাদা পরিচয় বা আলাদা বরাদ্দ, ক্লায়েন্টে বদল নয়।
পরীক্ষা 4: অন্য কিছু কি টানেলের জায়গা দখল করেছে?
Android একসঙ্গে একটি সক্রিয় VPN সেবারই অনুমতি দেয়। অন্য VPN অ্যাপ, বা আর কাজ করে না এমন প্রোফাইলের জন্য চালু থাকা always-on এন্ট্রি আপনার OpenVPN ক্লায়েন্ট establish() ডাকার আগেই জায়গাটি নিতে পারে। তখন প্রোফাইল বৈধ হলেও ইন্টারফেস কখনো দেখা যায় না, তাই অন্য VPN বিচ্ছিন্ন করুন, always-on বন্ধ করুন এবং প্রোফাইলে হাত দেওয়ার আগে আবার সংযোগ করুন।
ইথারনেট ব্রিজিংয়ে জেদ করা সেবা আরেকটি বন্ধ পথ। root ছাড়া Android অ্যাপ IP টানেল বানাতে পারে, ব্রিজ করা ইথারনেট সেগমেন্ট নয়, তাই আপনার লেখা কোনো ঠিকানাই dev tap সার্ভার চালু করাতে পারবে না; অপারেটরকে রাউটেড সেবা দিতে হবে। সমস্যা জানানোর সময় ক্লায়েন্টের নাম ও সংস্করণ, পাঠানো অপশন, টোপোলজি এবং ঠিকানা দেখা উচিত ছিল এমন নির্দিষ্ট ধাপটি যোগ করুন।
চারটি পরীক্ষাই পাশ হলে এবং ঠিকানাটি উপস্থিত, অনন্য ও সঠিকভাবে মাস্ক করা থাকলে রুটের প্রশ্ন সাধারণটিতে পরিণত হয়: সার্ভার কোন প্রিফিক্স অনুমোদন করে এবং ক্লায়েন্ট কীভাবে সেগুলো সীমিত করবে। অন্য কিছু বদলানোর আগে টানেল ঠিকানা, নেটমাস্ক ও টোপোলজি লিখে রাখুন, কারণ এই তিনটি মানই অপারেটরের সার্ভার দৃশ্যের সঙ্গে মেলানোর জন্য দরকার।