AWS Client VPN সংযুক্ত কিন্তু ইন্টারনেট নেই: রুট যাচাই
AWS Client VPN সংযুক্ত কিন্তু ইন্টারনেট অ্যাক্সেস নেই? ক্লায়েন্ট রুট, এন্ডপয়েন্ট অনুমোদন, সাবনেট এগ্রেস ও DNS এই ক্রমে যাচাই করুন।
আপনি AWS Client VPN এন্ডপয়েন্টে সংযুক্ত, প্রাইভেট সাবনেট উত্তর দিচ্ছে, তবুও প্রতিটি পাবলিক পেজ টাইম আউট হচ্ছে। এই সমন্বয় সমস্যাটিকে ম্যানেজড দিকের তিনটি অবজেক্টের একটিতে সংকুচিত করে: ক্লায়েন্ট যে রুটটি ইনস্টল করে, এন্ডপয়েন্টের রুট ও তার অনুমোদন নিয়ম, অথবা সংযুক্ত সাবনেটের পরবর্তী হপ। আমি এই ক্রমেই যাচাই করি, কারণ প্রতিটি ব্যর্থতা ক্লায়েন্টের দিক থেকে আলাদা দেখায়। এই রানবুকটি VPC-সংযুক্ত ম্যানেজড এন্ডপয়েন্ট নিয়ে, EC2 ইনস্ট্যান্সে OpenVPN সার্ভার নয় এবং Cloud WAN বা Transit Gateway সংযুক্তি নয়।
ক্লায়েন্ট আসলে কী রুট করে তা দিয়ে শুরু করুন
সংযুক্ত অবস্থা TLS সেশন ও ক্লায়েন্ট CIDR বরাদ্দ প্রমাণ করে, এর বেশি কিছু নয়. টানেল চালু থাকা অবস্থায় একটি পাবলিক ঠিকানা কোথায় যাবে তা অপারেটিং সিস্টেমকে জিজ্ঞাসা করুন। Linux-এ ip route get 1.1.1.1 টানেল ইন্টারফেসের নাম বলা উচিত; macOS-এ netstat -rn -f inet | head -5 ডিফল্ট এন্ট্রি দেখায়; Windows-এ Find-NetRoute -RemoteIPAddress 1.1.1.1 নির্বাচিত ইন্টারফেস ও পরবর্তী হপ প্রিন্ট করে।
তারপর স্প্লিট-টানেল ফ্ল্যাগ পড়ুন, কারণ এটি ঠিক করে এন্ডপয়েন্টের প্রকাশিত রুটগুলোই ক্লায়েন্ট টানেলে পাঠানো একমাত্র গন্তব্য কি না:
aws ec2 describe-client-vpn-endpoints \
--client-vpn-endpoint-ids cvpn-endpoint-0123456789abcdef0 \
--query 'ClientVpnEndpoints[0].SplitTunnel'যখন SplitTunnel সত্য, একটি পাবলিক গন্তব্য টানেল ব্যবহার করে কেবল তখনই যখন এন্ডপয়েন্ট এমন রুট প্রকাশ করে যা তা কভার করে, তাই অনুপস্থিত 0.0.0.0/0 সেই ট্রাফিক লোকাল ইন্টারফেসে রেখে দেয়। এটি মিথ্যা হলে ক্লায়েন্ট ট্রাফিক ধরে নেয়, কিন্তু এন্ডপয়েন্টকে এখনও তা রুট ও অনুমোদন করতে হয়; নাহলে প্যাকেট টানেলে ঢুকে সেখানেই থেমে যায়। যেকোনো একটি সেটিং বদলানোর পর ক্লায়েন্ট আবার সংযুক্ত করুন, কারণ রুট ও DNS সার্ভার সংযোগের সময়েই দেওয়া হয় এবং চলমান ক্লায়েন্ট পুরনো সেট ধরে রাখতে পারে।
এন্ডপয়েন্ট রুট ও অনুমোদন নিয়ম আলাদাভাবে পড়ুন
এগুলো দুটি অবজেক্ট, একটি তৈরি করলে অন্যটি তৈরি হয় না। এন্ডপয়েন্ট রুটগুলো তালিকাভুক্ত করুন এবং এমন ডিফল্ট খুঁজুন যার লক্ষ্য একটি সংযুক্ত সাবনেট:
aws ec2 describe-client-vpn-routes \
--client-vpn-endpoint-id cvpn-endpoint-0123456789abcdef0প্রতিটি রুটের ঠিক একটি লক্ষ্য সাবনেট থাকে, তাই তিনটি অ্যাসোসিয়েশনের জন্য প্রতিটির মিলিত ডিফল্ট রুট দরকার। AWS এই কভারেজ শর্তটি নথিভুক্ত করে, আর ফাঁক থাকলে বাস্তব উপসর্গ হলো এমন ব্যবহারকারী যিনি এক সাবনেট থেকে কাজ করেন এবং অন্য সাবনেট থেকে আটকে যান, যা অনুপস্থিত রুটের বদলে মাঝে মাঝে ঘটা ত্রুটি বলে মনে হয়। অফিসিয়াল Client VPN সিনারিও ডকুমেন্টেশন এই রুটগুলো যে পাবলিক-সাবনেট বিন্যাসের অন্তর্গত তা বর্ণনা করে।
অনুমোদন হলো দ্বিতীয় অবজেক্ট। যখন কোনো নিয়ম পাবলিক গন্তব্য কভার করে না, টানেল প্যাকেট বহন করে আর সেবা তা বাতিল করে, তাই প্রাইভেট রিসোর্স কাজ করতে থাকে কিন্তু ইন্টারনেট করে না:
aws ec2 describe-client-vpn-authorization-rules \
--client-vpn-endpoint-id cvpn-endpoint-0123456789abcdef0VPC CIDR-এর জন্য একটি নিয়ম 0.0.0.0/0 সম্পর্কে কিছুই বলে না। পূর্ণ টানেলের জন্য অনুপস্থিত অংশ যোগ করার অর্থ প্রতিটি সংযুক্ত সাবনেটের জন্য একটি রুট এবং পরে যাচাইযোগ্য একটি অনুমোদন নিয়ম:
aws ec2 create-client-vpn-route \
--client-vpn-endpoint-id cvpn-endpoint-0123456789abcdef0 \
--destination-cidr-block 0.0.0.0/0 \
--target-vpc-subnet-id subnet-0a1b2c3d4e5f67890
aws ec2 create-client-vpn-authorization-rule \
--client-vpn-endpoint-id cvpn-endpoint-0123456789abcdef0 \
--destination-cidr-block 0.0.0.0/0 \
--access-all \
--description "internet egress for full tunnel"--access-all এন্ডপয়েন্টের প্রতিটি ক্লায়েন্টকে গন্তব্যটি দেয়, তাই টানেল পূর্ণ হওয়ার কথা থাকলেই এটি রাখুন; ডিরেক্টরি গ্রুপে বাঁধা নিয়ম বেশি পছন্দনীয় যখন বাঁধার গ্রুপ থাকে।
সংযুক্ত সাবনেটের বাইরে প্যাকেট অনুসরণ করুন
এন্ডপয়েন্ট রুট ঠিক করে যে AWS প্যাকেটটি সেই সাবনেটকে দেয়। এর পরের হপ এটি ঠিক করে না, যা সাবনেটের নিজের VPC রুট টেবিলে থাকে:
aws ec2 describe-route-tables \
--filters Name=association.subnet-id,Values=subnet-0a1b2c3d4e5f67890 \
--query 'RouteTables[].Routes[?DestinationCidrBlock==`0.0.0.0/0`]'ব্যবহারযোগ্য ডিফল্ট পাবলিক সাবনেটের জন্য ইন্টারনেট গেটওয়ে বা প্রাইভেটের জন্য NAT গেটওয়ে দেখায়, আর blackhole অবস্থার অর্থ লক্ষ্যটি মুছে ফেলা হয়েছে এবং পথটি এখন নীরবে মরে যাচ্ছে। এগুলো এন্ডপয়েন্টের রুট তালিকা থেকে আলাদা টেবিল, একটি ঠিক করলে অন্যটি ঠিক হয় না।
এই হপে দুটি ফিল্টার বসে। লক্ষ্য নেটওয়ার্ক অ্যাসোসিয়েশনে প্রয়োগ করা সিকিউরিটি গ্রুপকে পাবলিক গন্তব্যের দিকে আউটবাউন্ড ট্রাফিক অনুমোদন করতে হবে, আর প্রযোজ্য যেকোনো নেটওয়ার্ক ACL-কে অনুরোধ ও এফিমেরাল পোর্টে ফেরত ট্রাফিক অনুমোদন করতে হবে। সীমিত অ্যাসোসিয়েশন সিকিউরিটি গ্রুপ প্রাইভেট অ্যাক্সেস কাজ করলেও পাবলিক অ্যাক্সেস না করার একটি সাধারণ কারণ।
তিনটিই একসঙ্গে না বদলে উপসর্গ থেকে প্রথম স্তরটি বেছে নিন:
| What you observe | Layer to check first |
|---|---|
| No tunnel interface for a public IP | Client route or split-tunnel flag |
| Tunnel interface chosen, request times out | Endpoint route and authorization rule |
| Endpoint route present, still times out | Subnet route table, association security group |
| Named host fails, numeric address works | DNS servers and their own authorization |
DNS ব্যর্থতাকে মৃত রুট থেকে আলাদা করুন
নাম রেজলিউশন ফরওয়ার্ডিং থেকে ভিন্নভাবে ব্যর্থ হয়, আর পূর্ণ টানেল এই পার্থক্যকে গুরুত্বপূর্ণ করে কারণ পুশ করা রিজলভার এখন টানেল দিয়েই পৌঁছায়। এন্ডপয়েন্ট যদি VPC DNS সার্ভার নির্দিষ্ট করে, তবে তাদের ঠিকানারও অন্য যেকোনো গন্তব্যের মতো রুট কভারেজ ও অনুমোদন দরকার। কোন ব্যর্থতা আছে দেখতে রিজলভারকে সরাসরি জিজ্ঞাসা করুন: dig +short example.com @10.0.0.2, অথবা nslookup example.com 10.0.0.2 Windows-এ।
যখন সংখ্যাসূচক URL উত্তর দেয় আর নামযুক্ত URL দেয় না, তখন ডিফল্ট রুট সম্পাদনা বন্ধ করে DNS নিয়ে কাজ করুন। IP ঠিকানায় অনুরোধ নামযুক্ত ভার্চুয়াল হোস্ট ও তার সার্টিফিকেট সম্পর্কে কিছুই প্রমাণ করে না, তাই চূড়ান্ত যাচাইয়ে একটি নামযুক্ত পরীক্ষা রাখুন।
সময় নির্ধারণ সাহায্য করে। কয়েক সেকেন্ডের মধ্যে উত্তর না পাওয়া TCP সংযোগ রাউটিং বা ফিল্টারের দিকে ইঙ্গিত করে, আর নাম খোঁজার ভেতরে আটকে থাকা অনুরোধ রিজলভারের দিকে। রিজলভার অপ্রাপ্য থাকা অবস্থায় ডিফল্ট রুট বদলালে সাধারণত একটি ব্যর্থতা দুটি হয়ে যায়।
পরিচ্ছন্নভাবে ফিরিয়ে নিন, তারপর এগ্রেস পথ যাচাই করুন
দুটি অবজেক্টই সংযোজনমূলক ছিল, তাই ফিরিয়ে নেওয়া মেরামত নয়, মুছে ফেলা:
aws ec2 delete-client-vpn-route \
--client-vpn-endpoint-id cvpn-endpoint-0123456789abcdef0 \
--destination-cidr-block 0.0.0.0/0 \
--target-vpc-subnet-id subnet-0a1b2c3d4e5f67890
aws ec2 delete-client-vpn-authorization-rule \
--client-vpn-endpoint-id cvpn-endpoint-0123456789abcdef0 \
--destination-cidr-block 0.0.0.0/0 \
--access-allআবার সংযুক্ত হয়ে নিশ্চিত করুন ট্রাফিক কোন পথে বেরোচ্ছে। দেখা যাওয়া পাবলিক ঠিকানাটি NAT গেটওয়ের ইলাস্টিক IP ঠিকানা বা আপনি যে ইন্টারনেট গেটওয়ে ব্যবহার করতে চেয়েছিলেন তার সঙ্গে তুলনা করুন, এবং একই সেশনে প্রাইভেট রিসোর্স এখনও উত্তর দিচ্ছে কি না দেখুন।
সংক্ষিপ্ত তালিকা দিয়ে শেষ করুন, আর শেষ আইটেমটিকে ডকুমেন্টেশন নয়, পরিবর্তনের অংশ হিসেবে গণ্য করুন:
- প্রতিটি সংযুক্ত সাবনেটের জন্য একটি
0.0.0.0/0এন্ডপয়েন্ট রুট। - আপনি যাদের সেবা দিতে চান সেই ক্লায়েন্টদের জন্য
0.0.0.0/0কভার করা একটি অনুমোদন নিয়ম। - প্রতিটি সংযুক্ত সাবনেটে blackhole নয় এমন VPC ডিফল্ট রুট।
- অ্যাসোসিয়েশন সিকিউরিটি গ্রুপ এগ্রেস, সঙ্গে ACL ফেরত ট্রাফিক।
- রিজলভার ঠিকানা রুট ও অনুমোদিত, নামযুক্ত অনুরোধে যাচাই করা।
- রুট ও নিয়মের জন্য লিপিবদ্ধ রোলব্যাক।
একটি পরিধি নোট: এটি IPv4 পথ। ডুয়াল-স্ট্যাক ক্লায়েন্টের আগে থেকে থাকা IPv6 সংযোগ যেমন আছে তেমনই থাকে, তাই IPv6 ডিফল্ট রুট এটির পার্শ্বপ্রতিক্রিয়া নয়, বরং নিজস্ব অনুমোদনসহ আলাদা সিদ্ধান্ত।