একটি VPN ক্লায়েন্টের জন্য NGINX কোন উৎস ঠিকানা লগ করবে?
একই হোস্টে OpenVPN-এর পাশে NGINX কী দেখে তা নির্ধারণ করুন: অভ্যন্তরীণ টানেল ঠিকানা, পাবলিক বহির্গমন ঠিকানা, নাকি ফরওয়ার্ড করা পিয়ার — নির্ভর করে নেওয়া পথের উপর।
একই হোস্টে NGINX ও OpenVPN সেটআপে তিনটি ক্লায়েন্ট ঠিকানা দেখা যায়, একটি করে প্রতিটি পথের জন্য যা একটি অনুরোধ নিতে পারে. টানেল ঠিকানায় পৌঁছানো ব্রাউজার, পাবলিক ঠিকানায় পৌঁছানো ব্রাউজার এবং গেটওয়ের ইন্টারনেট পথ দিয়ে বেরোনো প্রোগ্রাম — সবই শোনা সকেটে আলাদা দেখায়। লগ লাইন ব্যাখ্যা করার আগে নির্ধারণ করুন আপনি কোন পথ দেখছেন। সিদ্ধান্ত নির্ভর করে ক্লায়েন্ট যে গন্তব্য ব্যবহার করেছে, বাইরের VPN এন্ডপয়েন্টের জন্য তার যে ব্যতিক্রম আছে, এবং পথে কিছু প্যাকেট অনুবাদ করে কি না তার উপর।
গন্তব্য দেখে সিদ্ধান্ত নিন, ব্যবহারকারী কে তা দেখে নয়
অনুরোধ যে ঠিকানায় পাঠানো হয়েছে তা দিয়ে শুরু করুন, কারণ সেই ঠিকানাই পথ বেছে নেয়। হোস্টের টানেল ঠিকানায় অনুরোধ টানেল ইন্টারফেসে আসে ক্লায়েন্টের অভ্যন্তরীণ ঠিকানা উৎস হিসেবে নিয়ে। হোস্টের পাবলিক ঠিকানায় অনুরোধ সাধারণত ইন্টারনেটমুখী ইন্টারফেসে আসে ক্লায়েন্টের পাবলিক ঠিকানা নিয়ে, এমনকি সেই ল্যাপটপে ওই মুহূর্তে টানেল প্রতিষ্ঠিত থাকলেও। তাই VPN পুলে সদস্যতা প্যাকেটের পথের বৈশিষ্ট্য, ব্যবহারকারীকে অনুসরণ করা বৈশিষ্ট্য নয়।
| Path the request took | Source the site normally records |
|---|---|
| Client reaches the site at its tunnel address, 10.24.0.1 | Client inner address, 10.24.0.20 |
| Client reaches another internet site through the gateway | Gateway public egress address, 192.0.2.44 |
| Client reaches the gateway's public address through the endpoint exception | Client's own public access address |
লগে যখন এমন ঠিকানা নিয়ে VPN ব্যবহারকারী দেখা যায় যার টানেলের সঙ্গে কোনো সম্পর্ক নেই, তখন প্রথমে এই তৃতীয় সারিটাই যাচাই করা উচিত। এটি এটাও ব্যাখ্যা করে কেন একই প্রোফাইলের দুই ব্যবহারকারী আলাদা এন্ট্রি তৈরি করতে পারেন: তাদের নিজেদের অ্যাক্সেস নেটওয়ার্ক আলাদা, এবং টানেলের ভিতরে কিছুই তা ওভাররাইট করে না।
কেন বাইরের এন্ডপয়েন্ট দ্বিতীয় একটি পাবলিক পথ তৈরি করে
ক্লায়েন্টকে টানেল প্রতিষ্ঠা করতে গেটওয়ের পাবলিক ঠিকানায় পৌঁছাতে হয়, তাই সেই ঠিকানার পথ টানেলের বাইরে থাকতে হবে। যখন ক্লায়েন্ট সব ট্রাফিক ভিতরে ঘুরিয়ে দেয়, একটি বুদ্ধিমান বাস্তবায়ন সার্ভারের পাবলিক ঠিকানার জন্য স্পষ্ট হোস্ট রুট রাখে, যাতে নিজের উপর নির্ভর করা টানেল এড়ানো যায়। সেই ব্যতিক্রম সেবা অনুযায়ী বাছাই করে না, তাই একই পাবলিক ঠিকানায় যেকোনো অনুরোধ তা অনুসরণ করে, গেটওয়েতে হোস্ট করা সাইটে ব্রাউজারের অনুরোধও সহ।
এই ক্ষেত্রের অধিকাংশ বিভ্রান্তিকর প্রতিবেদনের পেছনের প্রক্রিয়া এটিই, এবং তা সার্ভারের নয়, ক্লায়েন্ট বাস্তবায়নের উপর নির্ভর করে। তাই একই প্রোফাইলের দুই ক্লায়েন্ট আলাদা আচরণ করতে পারে। লগ »ঠিক করতে« ব্যতিক্রমটি সরালে টানেলও তার সঙ্গে পড়ে যায়, তাই এটি রাখুন এবং তার চারপাশে নকশা করুন।
সকেট, টেবিল ও লগ ফরম্যাট একসঙ্গে পড়ুন
তিনটি পর্যবেক্ষণ ঠিক করে দেয় আপনি কোন পথ দেখছেন: সকেট কোথায় শোনে, কোন ইন্টারফেস গন্তব্যের উত্তর দেয়, এবং লগ ফরম্যাট আসলে কী রেকর্ড করে। যদি শ্রোতা কেবল টানেল ঠিকানায় বাঁধা থাকে, পাবলিক অনুরোধ একেবারেই সেখানে পৌঁছাতে পারে না, যা সঙ্গে সঙ্গে দুই সারি বাদ দেয়। যদি ক্লায়েন্টের জন্য অনুসন্ধান টানেল ডিভাইস ফেরত দেয়, অনুরোধটি অভ্যন্তরীণ উৎস নিয়ে এসেছে এবং লগে তা দেখানো উচিত।
ss -lntp 'sport = :443'
ip route get 10.24.0.20
ip route get 192.0.2.44তারপর সারি নয়, ফরম্যাট পড়ুন। ফরওয়ার্ড করা হেডার দিয়ে চালিত ফিল্ড একটি দাবি রেকর্ড করে, সকেট পিয়ার নয়, এবং দাবিটি কেবল তখনই গুরুত্বপূর্ণ যখন তাৎক্ষণিক পিয়ার একটি বিশ্বস্ত প্রক্সি। দুই মানই লগে লিখলে পরবর্তী বিতর্ক মেটে, কারণ তাৎক্ষণিক পিয়ার ও প্রতিস্থাপিত ঠিকানা আলাদা তথ্য এবং তাদের একটি কেবল নেটওয়ার্ক থেকে এসেছে।
log_format tunneled '$remote_addr $realip_remote_addr $request $status';
grep -n 'log_format' /etc/nginx/nginx.confআপনার চাওয়া প্রবেশবিন্দু বেছে নিন এবং DNS একমত করুন
যদি সাইটটি কেবল টানেল দিয়ে হওয়ার কথা, তবে এমন নাম দিন যা VPN ক্লায়েন্টদের জন্য টানেল ঠিকানায় রিজলভ হয় এবং শোনা সকেটে নীতি প্রয়োগ করুন। অভ্যন্তরীণ নামের জন্য 10.24.0.1 ফেরত দেওয়া বিভক্ত DNS উত্তর হলো নাম-সমাধানের খুঁটিনাটির পোশাকে রাউটিং সিদ্ধান্ত। যদি সাইটটি পাবলিকও হতে হয়, দুটি নাম বা দুটি পোর্ট রাখুন এবং লগকে বলতে দিন কোনটি অনুরোধটি পরিবেশন করেছে।
অনুমোদনের নিয়ম একই যুক্তি অনুসরণ করে। টানেল পুলকে অনুমতি দিলে পাবলিক অনুরোধ অনুমোদিত হয় না, এবং ইন্টারনেট দিয়ে আসা সংযোগে অভ্যন্তরীণ ঠিকানা পূরণ করবে না। এক নামের অধীনে দুই প্রবেশবিন্দু মেশালে রেকর্ড করা উৎস নকশার সিদ্ধান্তের বদলে ক্লায়েন্ট রাউটিংয়ের পার্শ্বপ্রতিক্রিয়া হয়ে যায়।
পথ যাচাই করুন, তারপর নীতি
গেটওয়েতে একটি ক্যাপচার এবং আপনার নিয়ন্ত্রিত একটি অনুরোধ দিয়ে পথ নিশ্চিত করুন। টানেল ডিভাইসে একটি ও পাবলিক ইন্টারফেসে একটি ক্যাপচার দেখায় কোনটি বাইট বহন করেছে, এবং প্যাকেটের ক্রম বলে তাদের মধ্যে অনুবাদ হয়েছে কি না।
tcpdump -ni tun0 port 443 -c 5
tcpdump -ni eth0 port 443 -c 5তারপর দুই দিকেই প্রবেশাধিকার যাচাই করুন: অভীষ্ট নামযুক্ত প্রবেশ সঠিক ক্লায়েন্টের জন্য কাজ করে, এবং অননুমোদিত পাবলিক পথ কেবল ধীর না হয়ে প্রত্যাখ্যাত হয়। একটি সাধারণ IP-প্রতিধ্বনি সাইট গেটওয়ের ইন্টারনেট বহির্গমন সম্পর্কে কিছু প্রমাণ করে এবং একই হোস্টের এই সাইট সম্পর্কে কিছুই না। যখন একটি পাতা ও একটি WebSocket একমত না হয়, সার্ভার কনফিগারেশন স্পর্শ করার আগে তাদের URL, ঠিকানা পরিবার ও DNS উত্তর তুলনা করুন।