দুটি কমান্ডই একটি স্থানীয় সেবা Tailscale HTTPS নামের মাধ্যমে প্রকাশ করে, এবং যে মেশিনে সেগুলো চালানো হয় সেখান থেকে দেখতে প্রায় একই রকম লাগে। পার্থক্য হলো এরপর URL-এ কে পৌঁছাতে পারে, আর সেই পার্থক্যই ঠিক করে আপনার অ্যাপ্লিকেশনের এখনো কোন নিয়ন্ত্রণগুলো দরকার। Serve দর্শককে tailnet-এর ভেতরে রাখে, আর Funnel সেটি উন্মুক্ত ইন্টারনেটে নিয়ে যায়। আগে দর্শক বেছে নিন, তারপর সেই কমান্ড বেছে নিন যা তার সঙ্গে মেলে।

Serve আপনার tailnet-এর ভেতরে একটি প্রশ্নের উত্তর দেয়

Serve একটি স্থানীয় পোর্ট প্রক্সি করে বা আপনার tailnet-এর ডিভাইসগুলোকে স্থানীয় কনটেন্ট পরিবেশন করে, এবং tailnet-এর অ্যাক্সেস নিয়ম প্রতিটি অনুরোধে প্রযোজ্য থাকে। পোর্ট 3000-এ থাকা একটি ড্যাশবোর্ড এমন একটি HTTPS নামে পৌঁছানো যায় যা কেবল আপনার ডিভাইসগুলোই রিজলভ ও সংযোগ করতে পারে। অভ্যন্তরীণ টুলের জন্য এটি সঠিক ডিফল্ট, কারণ দর্শক ইতিমধ্যে tailnet দ্বারা প্রমাণিত এবং আপনি কোনো উন্মুক্ত পৃষ্ঠ যোগ করছেন না। URL-টি সাধারণ ওয়েবসাইটের মতো দেখায়, আর ঠিক এ কারণেই মানুষ এটিকে তা ভেবে ভুল করে।

Serve যে অনুরোধগুলো ফরোয়ার্ড করে সেগুলোর সঙ্গে tailnet ব্যবহারকারীর পরিচয় বর্ণনা করা পরিচয়-হেডারও যুক্ত করতে পারে। আপনার অ্যাপ্লিকেশন যদি সেই হেডারগুলোকে প্রমাণীকরণ হিসেবে বিশ্বাস করে, তবে ব্যাকএন্ডটি localhost-এ বেঁধে দিন যাতে অন্য কিছু সরাসরি এতে পৌঁছাতে না পারে, কারণ রাউটেবল ঠিকানায় শোনা ব্যাকএন্ড এমন অনুরোধ পেতে পারে যা কখনো প্রক্সি হয়ে যায়নি।

Funnel দর্শককে উন্মুক্ত ইন্টারনেটে বদলে দেয়

Funnel একটি নির্বাচিত সেবা URL আছে এমন সবার কাছে প্রকাশ করে, এবং দর্শকদের ক্লায়েন্ট, অ্যাকাউন্ট বা আপনার tailnet-এ সদস্যপদ প্রয়োজন হয় না। তাই রিসোর্সটির প্রমাণীকরণ, হার-সীমা এবং প্যাচিং দরকার যা আপনি যেকোনো উন্মুক্ত সেবায় প্রয়োগ করতেন। উন্মুক্ত অনুরোধ Serve-এর tailnet পরিচয়-হেডার বহন করে না, তাই যে অ্যাপ্লিকেশন সেগুলোর উপর নির্ভর করেছিল Funnel-এর অধীনে তার কোনো ব্যবহারকারী পরিচয়ই থাকে না। ভিন্ন একটি প্রকাশনা কমান্ড বেছে নিলে প্রমাণীকরণের প্রশ্নটি আপনার হয়ে উত্তর পায় না।

Funnel-এর এমন কিছু সীমাবদ্ধতাও আছে যা পুরোনো সংস্করণের টিউটোরিয়ালে উল্লেখ নাও থাকতে পারে। এটি নামের জন্য Tailscale যে সার্টিফিকেট পায় তা দিয়ে TLS সমাপ্ত করে, এবং কেবল নির্দিষ্ট লিসেনিং পোর্ট সমর্থন করে, যেমন Funnel ডকুমেন্টেশন বর্ণনা করে। আপনার সেবা যদি সেই পোর্টগুলোর একটিতে HTTPS ছাড়া অন্য প্রোটোকল প্রত্যাশা করে, তবে Funnel কনফিগারেশনের ধাঁধা নয়, বরং ভুল টুল।

মোডটি পোর্ট থেকে নয়, ক্লায়েন্ট থেকে পড়ুন

কিছু ভাগ করার আগে বর্তমান অবস্থা যাচাই করুন, কারণ দুটি মোড একই স্থানীয় পোর্টের জন্য ভিন্ন সময়ে কনফিগার করা যেতে পারে। স্ট্যাটাস কমান্ডগুলো জানায় আসলে কী প্রকাশিত হয়েছে এবং কার কাছে। URL সাড়া দিচ্ছে এই তথ্য থেকে দর্শক অনুমান করবেন না।

tailscale serve status
tailscale funnel status
tailscale status --json | head -40

ক্লায়েন্ট সংস্করণভেদে কমান্ডের সিনট্যাক্স বদলেছে, তাই কপি করা একটি আহ্বান আপনার উদ্দিষ্ট মোডের চেয়ে ভিন্ন মোড বেছে নিতে পারে। আপনি যে সংস্করণ চালান তার জন্য নথিভুক্ত রূপটি পছন্দ করুন, এবং ধরে নেওয়ার বদলে ক্লায়েন্ট যে নিশ্চিতকরণ ছাপে তা পড়ুন। যদি Serve ও Funnel উভয়ের কনফিগারেশন থাকে, তবে উন্মুক্তটিই প্রকাশের জন্য গুরুত্বপূর্ণ। আপনি যে কনফিগারেশন চাননি তা সরিয়ে ফেলুন, তার উপরে আরেকটি স্তর চাপাবেন না।

আউটপুটে দর্শকের নাম না থাকলে থামুন এবং স্ট্যাটাস আবার পড়ুন। ঘোষিত দর্শক ছাড়া প্রকাশিত URL একটি অনুমান, আর অনুমানই হলো যেভাবে অভ্যন্তরীণ ড্যাশবোর্ড উন্মুক্ত ইন্টারনেটে পৌঁছে যায়।

আপনি যে দর্শক সত্যিই চেয়েছিলেন তার সঙ্গে পরীক্ষা করুন

tailnet-এর বাইরে থেকে পরীক্ষা করুন, যে মেশিন সেবাটি প্রকাশ করেছে সেখান থেকে নয়। tailnet ডিভাইস থেকে আসা অনুরোধ প্রমাণ করে প্রক্সি কাজ করছে, কিন্তু এটি প্রমাণ করে না যে কোনো অপরিচিত ব্যক্তি বাদ পড়েছে। এমন নেটওয়ার্ক ব্যবহার করুন যেখানে কোনো Tailscale ক্লায়েন্ট নেই এবং tailnet-এ কোনো রুট নেই।

curl -sI https://host.tailnet-name.ts.net
curl -sI https://host.tailnet-name.ts.net --resolve host.tailnet-name.ts.net:443:203.0.113.10

অভ্যন্তরীণ ড্যাশবোর্ডের ক্ষেত্রে বাইরের অনুরোধ সংযোগে ব্যর্থ হওয়া উচিত বা অনুমোদনে ব্যর্থ হওয়া উচিত, আর ভেতরের অনুরোধ আপনার প্রত্যাশিত পরিচয়ে সফল হওয়া উচিত। উন্মুক্ত সেবার ক্ষেত্রে বাইরের অনুরোধ সফল হওয়া উচিত এবং অ্যাপ্লিকেশন নিজের ক্রেডেনশিয়াল চাওয়া উচিত। এই দুটি ফলাফলের মধ্যে কোনটি আপনি দেখেছেন তা লিখে রাখুন, কারণ কেবল URL তা বলে না। ফলাফল যদি উদ্দেশ্যের বিপরীত হয়, তবে আগে উন্মুক্ত কনফিগারেশন সরান, পরে তদন্ত করুন।

একটি সেবা প্রকাশ করা আর exit node বেছে নেওয়া একই সিদ্ধান্ত নয়, কারণ exit node নিয়ন্ত্রণ করে আপনার বহির্গামী ট্র্যাফিক কোথা থেকে বের হয়। Serve ও Funnel উত্তর দেয় আপনি চালানো কোনো কিছুতে কে পৌঁছাতে পারে, আর exit node উত্তর দেয় আপনার নিজের সংযোগগুলো কোথা থেকে আসছে বলে দেখায়। দুটি প্রশ্ন আলাদা রাখুন, তুলনাটি সরল থাকবে।

সম্পর্কিত নিবন্ধ