কিভাবে নিজের VPS-এ NetBird VPN সার্ভার সেটআপ করবেন
আপনার নিজস্ব VPS-এ NetBird VPN সার্ভার হোস্ট করার পূর্ণাঙ্গ গাইড। এতে DNS ও TLS কনফিগারেশন, অটোমেটেড সেটআপ স্ক্রিপ্ট এবং হেডস্কেলের সাথে এর মূল পার্থক্যগুলো বিস্তারিত আলোচনা করা হয়েছে।
NetBird VPN সার্ভার নিজে হোস্ট করার সুবিধা
NetBird VPN সার্ভার নিজে হোস্ট করলে কন্ট্রোল প্লেনটি আপনার নিজস্ব VPS-এ থাকে: এটি এমন একটি অংশ যা পিয়ার লিস্ট সংরক্ষণ করে, কোন মেশিন কোন মেশিনের সাথে যোগাযোগ করতে পারবে তা নির্ধারণ করে এবং NAT (network address translation)-এর পেছনে থাকা দুটি পিয়ারকে একে অপরের সাথে সংযোগ স্থাপনে সাহায্য করে। টানেলগুলো মূলত WireGuard-এর, যা সরাসরি আপনার মেশিনগুলোর মধ্যে এনক্রিপ্ট করা থাকে। এতে পরিবর্তন শুধু এটুকুই যে, কোনো বাইরের কোম্পানি আপনার ডিভাইসের তালিকা বা লগইন প্রবাহ নিয়ন্ত্রণ করে না। এটি আপনাকে কী সুবিধা দিচ্ছে সে সম্পর্কে পরিষ্কার ধারণা রাখুন, কারণ হোস্ট করা কন্ট্রোল প্লেনও আপনার ট্রাফিক এনক্রিপ্ট করার চাবিকাঠি (keys) ধারণ করে না এবং একটি কোঅর্ডিনেশন সার্ভার আপস করা হলে বাস্তবে কী করতে পারে তা সাধারণ মানুষের ধারণার চেয়ে অনেক সীমিত।
NetBird এমন দুটি জিনিসের মাঝে অবস্থান করে যা আপনি হয়তো ইতিমধ্যে জানেন। এটি একটি মেশ ওভারলে (mesh overlay), তাই পিয়ারগুলো একটি গেটওয়ের মধ্য দিয়ে সব ট্রাফিক না পাঠিয়ে সরাসরি একে অপরের সাথে সংযুক্ত হয়। এটি সম্পূর্ণভাবে নিজে হোস্ট করা সম্ভব, যা একে Headscale, the self-hosted Tailscale control server-এর প্রতিদ্বন্দ্বী করে তোলে। আপনি যদি কেবল একটি সিঙ্গেল-গেটওয়ে টানেল ব্যবহার করে থাকেন, তবে প্রথমে the difference between plain WireGuard and a mesh overlay পড়ে নিন, কারণ এই ধারণাটিই এই পৃষ্ঠার বাকি অংশ বোঝার জন্য জরুরি।
আপনার যদি এমন একটি সার্ভার প্রয়োজন হয় যেখান দিয়ে আপনার সমস্ত ট্রাফিক বের হবে, তবে মেশ নেটওয়ার্ক আপনার প্রয়োজনের তুলনায় অনেক জটিল। A plain WireGuard VPN on a single VPS অথবা a Tailscale exit node অনেক কম পরিশ্রমে সেই কাজটি করতে পারে। আর যদি লক্ষ্য হয় মেশিনগুলোকে একে অপরের সাথে যুক্ত করার পরিবর্তে একটি প্রাইভেট নেটওয়ার্কে পৌঁছানো, তবে a Tailscale subnet router on a VPS আপনার বিদ্যমান নেটওয়ার্কে সেই রেঞ্জটি যুক্ত করতে পারে, যার জন্য নিচের কোনো জটিল কাঠামোর প্রয়োজন হয় না।
স্ট্যাকটি আসলে যা চালায়
লেআউটটি সম্প্রতি পরিবর্তিত হয়েছে এবং বেশিরভাগ পুরোনো নিবন্ধে পুরোনো লেআউটের বর্ণনা দেওয়া আছে। আগস্ট 2026 অনুযায়ী, v0.76.2 রিলিজে, কুইকস্টার্ট স্ক্রিপ্টটি ডিফল্টভাবে তিনটি সার্ভিসসহ একটি Compose ফাইল তৈরি করে।
netbird-serverম্যানেজমেন্ট API, সিগন্যাল সার্ভিস, এমবেডেড STUN লিসেনারসহ রিলে এবং একটি এমবেডেড আইডেন্টিটি প্রোভাইডার পরিচালনা করে। পুরোনো রিলিজগুলোতে এগুলো আলাদা কন্টেইনার ছিল এবং আইডেন্টিটি প্রোভাইডার ছিল একটি আলাদা Zitadel ইনস্টলেশন, যা আপনাকে আগে বিল্ড করতে হতো।dashboardহলো অ্যাডমিন ওয়েব কনসোল।traefikTLS (ট্রান্সপোর্ট লেয়ার সিকিউরিটি) টার্মিনেট করে এবং প্রথমবার স্টার্ট করার সময় Let's Encrypt থেকে একটি সার্টিফিকেট অনুরোধ করে।
আরও দুটি সার্ভিস রয়েছে যা প্রম্পটে সম্মতি না দেওয়া পর্যন্ত বন্ধ থাকে। NetBird Proxy সার্ভিসটি অভ্যন্তরীণ সার্ভিসগুলোকে পাবলিক হোস্টনামে প্রকাশ করে। CrowdSec ক্ষতিকারক ট্রাফিক ফিল্টার করে। একটি কার্যকর মেশ (mesh) তৈরি করতে এগুলোর কোনোটিরই প্রয়োজন নেই এবং উভয়ই ছোট সার্ভারে মেমরি খরচ বাড়ায়।
আপনি যদি একটি সিঙ্গেল Docker কন্টেইনারে wg-easy থেকে এসে থাকেন, তবে এটি পার্টস বা উপাদানের সংখ্যার দিক থেকে একটি বড় পরিবর্তন। এর বিনিময়ে আপনি অ্যাক্সেস পলিসি, প্রতি ব্যবহারকারীর জন্য আলাদা অ্যাকাউন্ট এবং এমন পিয়ার (peer) পাচ্ছেন যারা একটি গেটওয়ের মাধ্যমে না গিয়ে সরাসরি একে অপরের সাথে সংযুক্ত হয়।
শুরু করার আগে আপনার যা প্রয়োজন
একটি পাবলিক ডোমেইন নাম থাকা বাধ্যতামূলক। ড্যাশবোর্ড, API এবং রিলে—সবই পোর্ট 443-এ HTTPS ব্যবহার করে। Traefik তার সার্টিফিকেট Let's Encrypt থেকে HTTP challenge-এর মাধ্যমে সংগ্রহ করে, যার জন্য এমন একটি ডোমেইন নাম প্রয়োজন যা পাবলিক ইন্টারনেট থেকে আপনার VPS-এর আইপি ঠিকানায় রিজলভ হয়। শুধুমাত্র একটি IP address এই প্রক্রিয়ায় কাজ করবে না।
একটি A record তৈরি করুন, netbird.example.com যা আপনার VPS-এর পাবলিক IPv4 ঠিকানাকে নির্দেশ করবে এবং কোনো কিছু রান করার আগে DNS প্রপাগেশনের জন্য অপেক্ষা করুন।
dig +short netbird.example.comএটি অবশ্যই আপনার সার্ভারের ঠিকানা প্রদর্শন করবে। DNS প্রপাগেশনের আগেই ইনস্টলার রান করলে সার্টিফিকেট রিকোয়েস্ট প্রথমবারই ব্যর্থ হবে। বারবার ব্যর্থ ভ্যালিডেশনের ফলে Let's Encrypt-এর রেট লিমিটে পড়ে যাবেন, যার ফলে পুনরায় চেষ্টা করার জন্য আপনাকে এক ঘণ্টা অপেক্ষা করতে হবে।
ইন্টারনেট থেকে তিনটি পোর্ট অবশ্যই অ্যাক্সেসযোগ্য হতে হবে: সার্টিফিকেট চ্যালেঞ্জ এবং HTTPS-এ রিডাইরেক্টের জন্য TCP 80, ড্যাশবোর্ড, API, সিগন্যাল এবং রিলে ট্রাফিকের জন্য TCP 443, এবং STUN-এর জন্য UDP 3478।
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 3478/udp
sudo ufw reload
sudo ufw statusআপনার প্রোভাইডারের নেটওয়ার্ক ফায়ারওয়ালেও এই পোর্টগুলো খুলে দিন। বেশিরভাগ VPS প্যানেলে এটি একটি আলাদা কন্ট্রোল। অনেক সময় সার্ভারের নিজস্ব ufw status সঠিক থাকা সত্ত্বেও কানেকশন রিফিউজ হওয়ার মূল কারণ এটিই।
STUN (session traversal utilities for NAT) হলো এমন একটি পদ্ধতি যার মাধ্যমে একটি পিয়ার জানতে পারে তার নিজস্ব NAT তাকে কোন পাবলিক অ্যাড্রেস এবং পোর্ট বরাদ্দ করেছে, যাতে দুটি পিয়ার সরাসরি টানেল তৈরির চেষ্টা করতে পারে। UDP 3478 ব্লক করে রাখলে পিয়াররা TCP 443-এর মাধ্যমে রিলে ব্যবহার করে কানেক্ট হবে, তাই আপাতদৃষ্টিতে কোনো সমস্যা মনে হবে না। কিন্তু এর ফলে প্রতিটি পিয়ারে Connection type: Relayed দেখা যাবে এবং সমস্ত ট্রাফিক পিয়ার-টু-পিয়ার না হয়ে আপনার VPS-এর মধ্য দিয়ে যাবে।
সফটওয়্যার সাইডে আপনার প্রয়োজন Docker এবং এর Compose v2 প্লাগইন, সাথে jq এবং curl। স্ক্রিপ্টটি এই সবগুলোর উপস্থিতি পরীক্ষা করে এবং কোনো একটি অনুপস্থিত থাকলে কাজ বন্ধ করে দেয়। যদি এই বক্সে Docker নতুন হয়, তবে প্রথমে VPS-এ Docker Compose সেটআপ সম্পন্ন করুন।
যদি আপনি বিল্ট-ইন রিভার্স প্রক্সি ব্যবহার না করেন তবে প্রয়োজনীয় পোর্টসমূহ
Traefik ছাড়া রান করলে প্রতিটি সার্ভিস সরাসরি এক্সপোজড থাকে এবং পোর্টের তালিকা বড় হয়ে যায়:
- TCP 80, HTTP রিডাইরেক্ট
- TCP 443, HTTPS
- TCP 33073, ম্যানেজমেন্ট gRPC
- TCP 10000, সিগন্যাল gRPC
- TCP 33080, WebSocket বা QUIC-এর মাধ্যমে রিলে
- UDP 3478, STUN
এটি তখনই বেছে নিন যখন আপনার সার্ভারে অন্য কোনো কারণে আগে থেকেই TLS টার্মিনেশন করা থাকে। অন্যথায়, বিল্ট-ইন Traefik ব্যবহার করা সহজ এবং এতে ভুল হওয়ার সম্ভাবনা কম।
Quickstart script ব্যবহার করে NetBird সার্ভার ইনস্টল করা
ডকুমেন্টেশনে দেওয়া one-liner কমান্ডটি সরাসরি লেটেস্ট রিলিজকে পাইপ করে শেল-এ পাঠিয়ে দেয়:
curl -fsSL https://github.com/netbirdio/netbird/releases/latest/download/getting-started.sh | bashএর পরিবর্তে নির্দিষ্ট ভার্সন ব্যবহার করুন (pinning)। latest পরিবর্তিত হতে থাকে, তাই দুই সপ্তাহ ব্যবধানে একই কমান্ড চালালে দুটি ভিন্ন ইনস্টলেশন তৈরি হবে এবং ডিস্কে কোনো রেকর্ড থাকবে না যে কোনটি আপনার কনফিগারেশন তৈরি করেছে। একটি ট্যাগ করা রিলিজ ডাউনলোড করুন, সেটি পড়ুন, তারপর রান করুন।
mkdir -p ~/netbird
cd ~/netbird
curl -fsSL -o getting-started.sh \
https://github.com/netbirdio/netbird/releases/download/v0.76.2/getting-started.sh
less getting-started.sh
bash getting-started.shস্ক্রিপ্টটি প্রথমে ডোমেইন জানতে চাইবে:
Enter the domain you want to use for NetBird (e.g. netbird.my-domain.com):এরপর এটি জানতে চাইবে TLS কীভাবে হ্যান্ডেল করা হবে:
Which reverse proxy will you use?
[0] Traefik (recommended - automatic TLS, included in Docker Compose)
[1] Existing Traefik (labels for external Traefik instance)
[2] Nginx (generates config template)
[3] Nginx Proxy Manager (generates config + instructions)
[4] External Caddy (generates Caddyfile snippet)
[5] Other/Manual (displays setup documentation)
Enter choice [0-5] (default: 0):[0] বেছে নিন। 2 থেকে 5 নম্বর অপশনগুলো একটি কনফিগারেশন স্নিপেট তৈরি করে এবং বাকি কাজ আপনার ওপর ছেড়ে দেয়; এটি এমন সার্ভারের জন্য সঠিক যেখানে আগে থেকেই প্রক্সি চলছে, কিন্তু নতুন সার্ভারের জন্য এটি ভুল। 0 নম্বর অপশনটি এরপর একটি Let's Encrypt ইমেইল অ্যাড্রেস চাইবে, যা সার্টিফিকেটের মেয়াদ শেষ হওয়ার নোটিশের জন্য ব্যবহৃত হয়।
প্রথমবার ইনস্টল করার সময় NetBird Proxy সার্ভিসটি না করার পরামর্শ দেওয়া হচ্ছে। এটি আরও দুটি DNS রেকর্ড দাবি করে, proxy.netbird.example.com এবং ওয়াইল্ডকার্ড *.proxy.netbird.example.com, এবং সাধারণ মেশ নেটওয়ার্কের জন্য এটি কোনো কাজে আসে না। CrowdSec-এর ক্ষেত্রেও 'না' বলুন। এগুলো পরবর্তীতে যোগ করা সম্ভব।
স্ক্রিপ্টটি বর্তমান ডিরেক্টরিতে ফাইল লেখে: docker-compose.yml, 600 মোডে config.yaml, dashboard.env এবং যদি আপনি bundled Traefik বেছে নেন তবে traefik-dynamic.yaml। এই ডিরেক্টরিটিকে আপনার গুরুত্বপূর্ণ স্টেট হিসেবে বিবেচনা করুন, কারণ config.yaml-এ সেই কী (key) থাকে যা স্টোরের ডেটা এনক্রিপ্ট করে। এটি হারিয়ে ফেললে পুনরায় ইনস্টল করেও সমাধান করা সম্ভব নয়।
docker compose ps
docker compose logs -f netbird-serverপ্রতিটি সার্ভিসের running পড়া উচিত এবং সার্ভার লগটি লুপে রিস্টার্ট না হয়ে স্থিতিশীল হওয়া উচিত। সার্টিফিকেটটি আলাদাভাবে মনিটর করুন:
docker compose logs traefik | grep -i acmeACME (automatic certificate management environment) হলো সেই প্রোটোকল যা Traefik সার্টিফিকেট পাওয়ার জন্য ব্যবহার করে। এখানে কোনো ত্রুটি দেখা দিলে সাধারণত বুঝতে হবে সেটি DNS সংক্রান্ত সমস্যা অথবা 80 নম্বর পোর্ট বন্ধ থাকার কারণে হচ্ছে।
প্রথম অ্যাডমিন অ্যাকাউন্ট তৈরি করুন
https://netbird.example.com খুলুন। নতুন ইনস্টলেশনের ক্ষেত্রে এটি লগইন ফর্মের পরিবর্তে একটি সেটআপ পেজে নিয়ে যাবে। একটি ইমেইল ঠিকানা, নাম এবং পাসওয়ার্ড দিন, তারপর Create Account-এ ক্লিক করুন। এটিই প্রথম অ্যাডমিন অ্যাকাউন্ট হিসেবে গণ্য হবে এবং পেজটি আপনাকে লগইন ফর্মে রিডাইরেক্ট করবে।
এই অ্যাকাউন্টটি NetBird-এর নিজস্ব ইউজার স্টোরে থাকে, যা netbird-server কন্টেইনারে এমবেড করা একটি আইডেন্টিটি প্রোভাইডার দ্বারা পরিচালিত হয়। এতে বাইরের কোনো কিছুর প্রয়োজন হয় না। এক বছর আগের সেলফ-হোস্টেড NetBird-এর তুলনায় এটি সবচেয়ে বড় পরিবর্তন; তখন একটি কার্যকর ইনস্টলেশনের জন্য প্রথমে Zitadel বা Keycloak সেটআপ করতে হতো এবং কোনো কিছু শুরু করার আগেই setup.env-এ চারটি OIDC (OpenID Connect) ভ্যালু কপি করতে হতো।
যদি সেটআপ পেজের পরিবর্তে ব্রাউজারে সার্টিফিকেট ওয়ার্নিং পান, তবে বুঝবেন সার্টিফিকেট ইস্যু হয়নি। পরবর্তী ধাপে যাওয়ার আগে এটি সমাধান করুন, কারণ ড্যাশবোর্ড একই হোস্টনামের মাধ্যমে API-এর সাথে যোগাযোগ করে এবং ত্রুটিপূর্ণ সার্টিফিকেটের কারণে এটি বিভ্রান্তিকরভাবে ব্যর্থ হতে পারে।
আপনার প্রথম পিয়ার যুক্ত করুন
যেকোনো Linux মেশিনে ক্লায়েন্ট ইনস্টল করুন, এমনকি আপনি যদি এটিকে মেশের (mesh) অন্তর্ভুক্ত করতে চান তবে VPS-এও ইনস্টল করতে পারেন:
curl -fsSL https://pkgs.netbird.io/install.sh | shDebian এবং Ubuntu-তে এই স্ক্রিপ্টটি NetBird-এর প্যাকেজ রিপোজিটরি কনফিগার করে এবং তারপর apt-এর মাধ্যমে ক্লায়েন্ট ইনস্টল করে, তাই প্যাকেজ ম্যানেজারই এর নিয়ন্ত্রণ বজায় রাখে। যদি কোনো স্ক্রিপ্ট সরাসরি শেল-এ পাইপ করা আপনার কাছে নিরাপদ মনে না হয়, তবে প্রথমে curl -fsSL -o install.sh https://pkgs.netbird.io/install.sh দিয়ে তা সেভ করুন এবং sh install.sh দিয়ে চালানোর আগে তা পড়ে দেখুন। যেভাবেই হোক, কী ইনস্টল হয়েছে তা নিশ্চিত করুন:
apt-cache policy netbirdnetbird হলো কমান্ড লাইন ক্লায়েন্ট এবং ডেমোন। netbird-ui হলো ডেস্কটপ ট্রে অ্যাপ, হেডলেস সার্ভারে এর কোনো প্রয়োজন নেই।
এখন ক্লায়েন্টকে আপনার সার্ভারের দিকে নির্দেশ করুন:
sudo netbird up --management-url https://netbird.example.com--management-url বাদ দিলে ক্লায়েন্ট NetBird-এর হোস্ট করা সার্ভিসের সাথে রেজিস্টার হবে, কারণ এটিই ডিফল্ট হিসেবে কম্পাইল করা থাকে। কমান্ডটি সফল হবে, মেশিন একটি অ্যাড্রেস পাবে, কিন্তু আপনার সেলফ-হোস্টেড ড্যাশবোর্ড খালিই থাকবে। প্রায় সবাই একবার এই ভুলটি করে।
কমান্ডটি একটি URL প্রিন্ট করবে যা ব্রাউজারে খুলে লগইন সম্পন্ন করতে হবে। এরপর:
netbird status
ip addr show wt0netbird status থেকে চারটি লাইন পড়ুন: Management: Connected, Signal: Connected, প্রতিটি উপলব্ধ রিলে রিপোর্ট করা একটি Relays: লাইন, এবং ওভারলে রেঞ্জের মধ্যে একটি NetBird IP:। wt0 হলো সেই WireGuard ইন্টারফেস যা NetBird তৈরি করে এবং এতে একই অ্যাড্রেস থাকা উচিত।
একটি setup key ব্যবহার করে দ্বিতীয় মেশিন আনঅ্যাটেন্ডেড পদ্ধতিতে যুক্ত করা
যেসব মেশিনে ব্রাউজার নেই এবং সামনে কেউ নেই, সেগুলোতে ব্রাউজার-ভিত্তিক লগইন কাজ করে না। একটি setup key হলো প্রি-অথেনটিকেশন টোকেন, যা ইন্টারঅ্যাক্টিভ ধাপ ছাড়াই মেশিন রেজিস্টার করতে সাহায্য করে। ড্যাশবোর্ডের Setup Keys সেকশন থেকে এটি তৈরি করুন।
এর দুটি ধরন রয়েছে। একটি one-off key ঠিক একটি মেশিনকে অথেনটিকেশন করে এবং এরপর সেটি অকেজো হয়ে যায়। একটি reusable key অনেকগুলো মেশিন রেজিস্টার করতে পারে, যেখানে চাইলে সর্বোচ্চ কতগুলো মেশিন যুক্ত হবে তার সীমা নির্ধারণ করে দেওয়া যায়। উভয় ধরনের কি-এর জন্যই একটি মেয়াদ (expiry) থাকে এবং উভয়ই নতুন পিয়ারকে স্বয়ংক্রিয়ভাবে একটি গ্রুপে যুক্ত করতে পারে, ফলে মেশিনটি যুক্ত হওয়ার সাথে সাথেই সেই গ্রুপের অ্যাক্সেস রুলগুলো কার্যকর হয়ে যায়।
sudo netbird up --setup-key <SETUP-KEY> \
--management-url https://netbird.example.com \
--hostname build-runner-01--hostname ড্যাশবোর্ডে প্রদর্শিত মেশিনের নাম নির্ধারণ করে। এটি ছাড়া পিয়ার মেশিনটি নিজের যে নাম ব্যবহার করে সেটিই গ্রহণ করে, এবং অনেকগুলো এন্ট্রি যদি ubuntu নামে থাকে তবে তা কোনো কাজে আসে না।
কন্টেইনার এবং স্বল্পস্থায়ী বিল্ড এজেন্টের ক্ষেত্রে, কি তৈরি করার সময় সেটিকে ephemeral হিসেবে চিহ্নিত করুন। ephemeral key দিয়ে রেজিস্টার করা পিয়ারগুলো 10 মিনিটের বেশি অফলাইন থাকলে স্বয়ংক্রিয়ভাবে মুছে যায়, যা পিয়ার লিস্টে মৃত এন্ট্রি জমতে দেয় না।
setup key নিয়ে পরিকল্পনা করার আগে একটি সীমাবদ্ধতা জেনে রাখা জরুরি: একটি কি-এর মেয়াদ শেষ হলে বা মুছে ফেললে নতুন রেজিস্ট্রেশন বন্ধ হয়ে যায়, কিন্তু এর মাধ্যমে আগে থেকে রেজিস্টার করা মেশিনগুলোর সংযোগ বিচ্ছিন্ন হয় না। কোনো মেশিনের অ্যাক্সেস বন্ধ করতে হলে সেই পিয়ারটিকে মুছে ফেলতে হবে।
আপনার কি এখনও আলাদা identity provider প্রয়োজন?
ছোট কোনো ইনস্টলেশনের ক্ষেত্রে, না। বিল্ট-ইন user store ড্যাশবোর্ড থেকে তৈরি করা অ্যাকাউন্টগুলো পরিচালনা করে, যা অল্প সংখ্যক ব্যবহারকারীর জন্য যথেষ্ট।
আপনার যদি আগে থেকেই একটি identity provider থাকে এবং আপনি ব্যবহারকারীদের দ্বিতীয় কোনো তালিকা তৈরি করতে না চান, তবেই আপনার একটি external identity provider প্রয়োজন। NetBird এমন যেকোনো provider গ্রহণ করে যা OIDC সমর্থন করে। আপনার provider-এ একটি confidential OIDC client রেজিস্টার করুন, তারপর NetBird ড্যাশবোর্ডে চারটি মান যোগ করুন: name, client ID, client secret এবং issuer। NetBird আপনাকে একটি redirect URL দেবে যা আপনার provider-এ পেস্ট করতে হবে। Google, Microsoft Entra ID, Okta, Zitadel, Keycloak, Authentik এবং Pocket ID-এর জন্য নির্দিষ্ট ইন্টিগ্রেশন রয়েছে এবং অন্য যেকোনো কিছু generic OIDC হিসেবে যোগ করা যায়। আপনি যদি আগে থেকেই Authentik-কে আপনার self-hosted single sign-on হিসেবে ব্যবহার করেন, তবে এটিই সেই উপায় যার মাধ্যমে আপনি দুটি তালিকার পরিবর্তে একটি অ্যাকাউন্ট তালিকা বজায় রাখতে পারবেন।
একটি provider যোগ করার পরেও local login চালু থাকে এবং কনফিগার করা প্রতিটি provider লগইন পৃষ্ঠায় প্রদর্শিত হয়। একটি শক্তিশালী পাসওয়ার্ডসহ একটি local admin অ্যাকাউন্ট সবসময় রাখুন। এতে OIDC কনফিগারেশনে কোনো সমস্যা হলেও আপনি সিস্টেমে প্রবেশ করার একটি উপায় পাবেন।
NetBird নাকি Headscale: কোন কন্ট্রোল প্লেনটি আপনার চালানো উচিত?
উভয়ই একই নির্ভরতা দূর করে, অর্থাৎ সেই হোস্ট করা কন্ট্রোল সার্ভার যার সাথে আপনার ক্লায়েন্টরা অন্যথায় যোগাযোগ করত। এগুলো একই ধরনের প্রজেক্ট নয়।
Headscale হলো Tailscale কন্ট্রোল সার্ভারের একটি পুনঃবাস্তবায়ন, এবং আপনি অফিসিয়াল Tailscale ক্লায়েন্টগুলোই ব্যবহার করতে থাকেন। এতে কোনো অফিসিয়াল ওয়েব কনসোল নেই। আপনি একটি কনফিগারেশন ফাইলের বিপরীতে headscale কমান্ড ব্যবহার করে ব্যবহারকারী এবং প্রি-অথেন্টিকেশন কি (pre-authentication keys) পরিচালনা করেন। কমিউনিটি ওয়েব ইন্টারফেস রয়েছে, তবে সেগুলো এই প্রজেক্টের অংশ নয়। যারা তাদের স্টেট ফাইলে রাখতে এবং পরিবর্তনগুলো ভার্সন কন্ট্রোলে রাখতে চান, তাদের জন্য এটি উপযুক্ত।
NetBird পুরো পণ্যটিই সরবরাহ করে: এর নিজস্ব ক্লায়েন্ট, নিজস্ব ড্যাশবোর্ড, একটি এমবেডেড আইডেন্টিটি প্রোভাইডার এবং ব্রাউজারে এডিট করার মতো অ্যাক্সেস পলিসি। আপনার VPS-এ এতে অনেক বেশি অংশ কাজ করে, তবে এমন কোনো সহকর্মীর কাছে এটি হস্তান্তর করা অনেক সহজ, যিনি কখনোই টার্মিনাল খুলবেন না।
আপনি যদি ইতিমধ্যে Tailscale ক্লায়েন্টে অভ্যস্ত হন অথবা সবচেয়ে ছোট কন্ট্রোল প্লেন চান, তবে Headscale চালান। যদি একাধিক ব্যক্তির পিয়ার পরিচালনা করার প্রয়োজন হয় এবং আপনি কোনো কিছু তৈরি না করেই একটি কনসোল ও SSO চান, তবে NetBird চালান। যেকোনো একটি বেছে নেওয়ার আগে, Tailscale-এর ফ্রি প্ল্যানে আসলে কী কী অন্তর্ভুক্ত থাকে তা যাচাই করুন, কারণ ছয়জন ব্যবহারকারী এবং আনলিমিটেড ডিভাইসের মধ্যে থাকা একটি গ্রুপ হোস্ট করা কন্ট্রোল প্লেনের জন্য কিছুই খরচ করে না এবং তাদের এটি চালানোর কোনো কারণ নাও থাকতে পারে। সেই সীমার পরে বিলটি মেশিনের সংখ্যার পরিবর্তে মানুষের সংখ্যার ওপর ভিত্তি করে বাড়ে, তাই আপনার গ্রুপের জন্য Tailscale কত চার্জ করবে তা হিসাব করলে আপনি একটি সংখ্যা পাবেন যা আপনার VPS-এর খরচ এবং এই স্ট্যাকের পেছনে ব্যয় করা সময়ের সাথে তুলনা করে সিদ্ধান্ত নিতে পারবেন।
এই কাজের জন্য সর্বনিম্ন কতটুকু VPS প্রয়োজন?
নথিপত্র অনুযায়ী সর্বনিম্ন 1টি CPU এবং 2 GB মেমোরি প্রয়োজন। NetBird-এর নিজস্ব তথ্য অনুযায়ী, বর্তমানে ব্যবহারকারী ব্যবস্থাপনা লোকাল হওয়ায় 1 GB RAM-এই কাজ চলে। আগে Zitadel ব্যবহারের সময় 2 GB থেকে 4 GB RAM লাগত। 2 GB RAM-এর একটি VPS কেনাই ভালো। অতিরিক্ত মেমোরি থাকলে নতুন ইমেজ ডাউনলোড করার সময় পুরনো ইমেজগুলো ডিস্কে থাকা সত্ত্বেও কোনো সমস্যা হয় না।
ছোট সার্ভারে তিনটি বিষয় বাদ দেওয়া নিরাপদ। NetBird Proxy সার্ভিসটি বাদ দিতে পারেন; এটি ইন্টারনাল সার্ভিসকে পাবলিক হোস্টনামে প্রকাশ করার জন্য ব্যবহৃত হয়, পিয়ার কানেকশনের সাথে এর কোনো সম্পর্ক নেই। CrowdSec বাদ দিতে পারেন, এটি প্রথম দিনেই না লাগিয়ে পরে প্রয়োজন অনুযায়ী যোগ করা যাবে। ডিফল্ট SQLite স্টোর netbird_data ভলিউমে রাখুন। যখন আপনি একাধিক মেশিনে ডেপ্লয়মেন্ট ভাগ করবেন বা অনেক বেশি কনকারেন্সি (concurrency) প্রয়োজন হবে, তখনই কেবল PostgreSQL-এ স্থানান্তর করুন। এই মাইগ্রেশনটি পরে করা সম্ভব।
Relay এমন একটি উপাদান যা আপনি বাদ দিতে পারবেন না। দুটি পিয়ারের NAT যদি প্রতিটি গন্তব্যের জন্য আলাদা পোর্ট বরাদ্দ করে, তবে তাদের মধ্যে সরাসরি টানেল তৈরি করা অসম্ভব। সেক্ষেত্রে Relay-ই একমাত্র উপায় যা কানেকশন সচল রাখে। এটি বন্ধ করলে মেমোরি খুব সামান্যই বাঁচে, কিন্তু কানেকশন এমনভাবে বিচ্ছিন্ন হয় যা খুঁজে বের করা কঠিন।
যখন একটি সার্ভারে আর কুলাবে না, তখন Relay-কে অন্য মেশিনে সরিয়ে নেওয়াই প্রথম পদক্ষেপ। একটি স্ট্যান্ডঅ্যালোন Relay চালাতে NB_LISTEN_ADDRESS, NB_EXPOSED_ADDRESS, NB_AUTH_SECRET এবং NB_ENABLE_STUN প্রয়োজন হয়। Relay এবং মূল সার্ভারে শেয়ারড সিক্রেট (shared secret) অবশ্যই একই হতে হবে, অন্যথায় ক্লায়েন্টরা অথেন্টিকেট করতে পারবে না।
ব্যর্থতার ধরন এবং যা আপনি দেখতে পাবেন
ড্যাশবোর্ডে একটি সার্টিফিকেট সতর্কবার্তা দেখাচ্ছে। Traefik সার্টিফিকেট সংগ্রহ করতে পারেনি। docker compose logs traefik | grep -i acme চালান। এর দুটি কারণ থাকতে পারে। হয় dig +short netbird.example.com এখনও এই VPS-কে নির্দেশ করছে না, অথবা Let's Encrypt এবং কন্টেইনারের মাঝে কোথাও TCP 80 পোর্ট বন্ধ আছে, যা সাধারণত ufw-এর পরিবর্তে প্রোভাইডারের নেটওয়ার্ক ফায়ারওয়ালে হয়ে থাকে। পুনরায় চেষ্টা করার আগে কারণটি সমাধান করুন, কারণ ব্যর্থ ভ্যালিডেশনের ক্ষেত্রে রেট লিমিট থাকে এবং আপনি এক ঘণ্টার জন্য পুনরায় চেষ্টার সুযোগ হারাবেন।
ক্লায়েন্ট বলছে এটি সংযুক্ত হয়েছে কিন্তু ড্যাশবোর্ড খালি দেখাচ্ছে। ক্লায়েন্ট NetBird-এর হোস্ট করা সার্ভিসের সাথে নিবন্ধিত হয়েছে, কারণ --management-url অনুপস্থিত ছিল। netbird status --detail চালান এবং Management: লাইনটি পড়ুন, যেখানে সার্ভারের নাম উল্লেখ থাকে যার সাথে এটি বর্তমানে যোগাযোগ করছে। Management: Connected to https://api.netbird.io:443 দেখার অর্থ হলো এটি ক্লাউডে চলে গেছে। sudo netbird down চালান, তারপর পুনরায় sudo netbird up --management-url https://netbird.example.com করুন।
প্রতিটি পিয়ার Connection type: Relayed দেখাচ্ছে। কোনো সরাসরি টানেল তৈরি হচ্ছে না, তাই সমস্ত ট্রাফিক আপনার VPS হয়ে যাচ্ছে এবং ল্যাটেন্সি বৃদ্ধি পাচ্ছে। VPS ফায়ারওয়াল এবং প্রোভাইডার ফায়ারওয়ালে UDP 3478 পোর্ট চেক করুন, কারণ STUN-এর মাধ্যমেই একটি পিয়ার তার নিজস্ব পাবলিক অ্যাড্রেস এবং পোর্ট জানতে পারে। netbird status --detail কমান্ডটি Direct: false এবং প্রতিটি পিয়ারের জন্য ICE (interactive connectivity establishment) ক্যান্ডিডেট টাইপও প্রদর্শন করে, যা থেকে বোঝা যায় সংযোগের চেষ্টা কতদূর এগিয়েছে। কিছু নেটওয়ার্কে রিলেড (relayed) সংযোগই একমাত্র উপায় এবং এতে কোনো সমস্যা নেই।
একটি পিয়ার যুক্ত হয়েছে কিন্তু কোনো কিছুতে পৌঁছাতে পারছে না। মেশ নেটওয়ার্কে থাকার অর্থ এই নয় যে দুটি পিয়ার একে অপরের সাথে কথা বলতে পারবে। অ্যাক্সেস পলিসি এটি নির্ধারণ করে, এবং কোনো পলিসি যুক্ত না থাকলে একটি গ্রুপ কোনো কিছুতেই পৌঁছাতে পারে না। রাউট এবং ফায়ারওয়াল ডিবাগ করার আগে ড্যাশবোর্ডে পলিসি চেক করুন।
netbird status একটি ডেমোন সমস্যার রিপোর্ট করছে। সার্ভিসটি চলছে না। sudo netbird service status এবং sudo netbird service start ব্যবহার করুন। ক্লায়েন্ট লগ /var/log/netbird/client.log-এ থাকে। যদি কোনো সমস্যা চিহ্নিত করতে না পারেন, তবে netbird debug bundle --anonymize --system-info ব্যবহার করুন যা লগ, স্ট্যাটাস, রাউট, DNS সেটিংস এবং ফায়ারওয়ালের অবস্থাকে একটি আর্কাইভে সংগ্রহ করে।
ব্যাকআপ এবং আপগ্রেড
পুরো ইন্সটলেশনটি দুটি জিনিসের ওপর নির্ভর করে: যে ডিরেক্টরিতে docker-compose.yml এবং config.yaml থাকে, এবং যে Docker volume-এ ডাটাবেস ও এনক্রিপশন কি (keys) সংরক্ষিত থাকে। এই দুটি একসাথে ব্যাকআপ নিন। config.yaml-এ সেই কি থাকে যা স্টোরের ডাটা এনক্রিপ্ট করে, তাই এটি ছাড়া ডাটাবেসের কপি পুনরুদ্ধার করলে আপনি কোনো কিছুই পড়তে পারবেন না।
docker volume ls
docker compose down
sudo tar czf netbird-config.tgz -C ~ netbird
docker run --rm -v netbird_netbird_data:/data -v "$PWD":/backup \
alpine tar czf /backup/netbird-data.tgz -C /data .
docker compose up -dCompose ভলিউমের নামের শুরুতে প্রজেক্ট ডিরেক্টরির নাম যুক্ত করে, তাই netbird_data হিসেবে নথিবদ্ধ ভলিউমটি সাধারণত netbird_netbird_data নামে দেখা যায়। প্রথমে docker volume ls চালান এবং এটি যে নাম দেখাবে তা ব্যবহার করুন, অন্যথায় উপরের docker run কমান্ডটি ব্যর্থ হবে এবং নীরবে একটি খালি ভলিউম তৈরি করে কিছুই আর্কাইভ করবে না। আর্কাইভগুলো VPS-এর বাইরে রাখুন। আপনার যদি ইতিমধ্যে কোনো ব্যাকআপ টুল থাকে, তবে restic বা BorgBackup অফসাইট ব্যাকআপের কাজটি সম্পন্ন করতে পারে।
সার্ভার আপগ্রেড করার প্রক্রিয়াটি হলো ইমেজ পুল করা এবং কন্টেইনার পুনরায় তৈরি করা:
docker compose pull
docker compose up -d
docker compose psএর ওপর নির্ভর করার আগে, docker compose config | grep image: চালান। latest লেখা যেকোনো ট্যাগ একটি নির্দিষ্ট ভার্সনের সাথে পিন (pin) করে রাখা উচিত, কারণ ইন্সটল স্ক্রিপ্ট পিন করার পেছনে যে কারণ ছিল সেটিই এখানে প্রযোজ্য: আপনি জানতে চান কী চলছে, এবং আপগ্রেড ঠিকমতো কাজ না করলে আগের ভার্সনে ফিরে যাওয়ার সুযোগ রাখতে চান। ক্লায়েন্টরা তাদের ইন্সটল করা প্যাকেজ ম্যানেজারের মাধ্যমে আপগ্রেড সম্পন্ন করে।
FAQ
NetBird self-host করার জন্য কি আমার নিজস্ব identity provider প্রয়োজন?
না। বর্তমান releases-এ একটি বিল্ট-ইন ইউজার স্টোর অন্তর্ভুক্ত থাকে, তাই আপনি ব্রাউজারে https://netbird.example.com-এ প্রথম অ্যাডমিন অ্যাকাউন্ট তৈরি করতে পারেন এবং পরবর্তীতে ড্যাশবোর্ড থেকে ব্যবহারকারী যোগ করতে পারেন। একটি এক্সটারনাল OIDC প্রোভাইডার ঐচ্ছিক এবং পরবর্তীতে চারটি ভ্যালু দিয়ে যোগ করা যায়: name, client ID, client secret এবং issuer। যে গাইডগুলো আপনাকে NetBird-এর আগে Zitadel বা Keycloak ডেপ্লয় করতে বলে, সেগুলো এমন একটি সেটআপ বর্ণনা করে যা এখন আর প্রয়োজন নেই; সেগুলো অনুসরণ করলে আপনাকে বাড়তি একটি সার্ভিস চালাতে হবে।
আমার সব পিয়ার কেন Connection type: Relayed দেখাচ্ছে?
সরাসরি সংযোগ তৈরি হচ্ছে না, তাই ট্রাফিক আপনার VPS-এর রিলে হয়ে যাচ্ছে। সাধারণত UDP 3478 পোর্ট ব্লক থাকার কারণে এমন হয়; এটি সেই STUN পোর্ট যা পিয়াররা তাদের নিজস্ব পাবলিক অ্যাড্রেস এবং পোর্ট খুঁজে বের করতে ব্যবহার করে। এটি VPS ফায়ারওয়ালে এবং আপনার প্রোভাইডারের আলাদা নেটওয়ার্ক ফায়ারওয়ালে ওপেন করুন, তারপর আবার netbird status --detail চালান এবং Direct: লাইনটি পড়ুন। এমন কোনো নেটওয়ার্কে যেখানে NAT প্রতিটি গন্তব্যের জন্য আলাদা পোর্ট বরাদ্দ করে, সেখানে relayed হওয়াটাই স্বাভাবিক এবং এতে কোনো কনফিগারেশন ভুল নেই।
আমার ক্লায়েন্ট কানেক্ট হয়েছে কিন্তু ড্যাশবোর্ডে কোনো পিয়ার দেখাচ্ছে না। কী হয়েছে?
ক্লায়েন্টটি আপনার সার্ভারের পরিবর্তে NetBird-এর হোস্ট করা সার্ভারের সাথে রেজিস্টার হয়েছে, যা ঘটে যখন --management-url বাদ দেওয়া হয়। netbird status --detail কমান্ডটি Management: লাইনে সার্ভারের ঠিকানা দেখায়, তাই https://api.netbird.io:443-এর মতো কোনো ভ্যালু থাকলে তা নিশ্চিত করে যে এটি ভুল সার্ভারে যুক্ত হয়েছে। sudo netbird down চালান, তারপর sudo netbird up --management-url https://netbird.example.com দিন, তাহলে পিয়ারটি আপনার ড্যাশবোর্ডে দেখা যাবে।
self-hosted NetBird এবং Headscale-এর মধ্যে পার্থক্য কী?
উভয়ই একটি হোস্ট করা কন্ট্রোল সার্ভারকে আপনার নিজের চালানো সার্ভার দিয়ে প্রতিস্থাপন করে। Headscale শুধুমাত্র একটি কন্ট্রোল প্লেন: আপনি এটি headscale কমান্ড এবং একটি কনফিগ ফাইলের মাধ্যমে ম্যানেজ করেন, এর কোনো অফিসিয়াল ওয়েব কনসোল নেই এবং এটি অফিসিয়াল Tailscale ক্লায়েন্ট ব্যবহার করে। NetBird-এর নিজস্ব ক্লায়েন্ট, অ্যাডমিন ড্যাশবোর্ড এবং আইডেন্টিটি প্রোভাইডার ইন্টিগ্রেশন একই প্যাকেজে থাকে। Headscale চালানো সহজ এবং এটি ফাইল আকারে স্টেট জমা রাখে। NetBird তাদের জন্য ব্যবহার করা সহজ যারা টার্মিনাল ব্যবহার করতে চান না।
self-hosted NetBird সার্ভারের জন্য কী সাইজের VPS প্রয়োজন?
ডকুমেন্টেশনে সর্বনিম্ন 1টি CPU এবং 2 GB মেমরির কথা বলা হয়েছে, এবং 2 GB-ই কেনা উচিত। সাম্প্রতিক releases-এ ব্যবহারিক প্রয়োজনীয়তা 1 GB-এর কাছাকাছি নেমে এসেছে কারণ আইডেন্টিটি প্রোভাইডার এখন আলাদা ডেপ্লয়মেন্টের পরিবর্তে এমবেডেড থাকে। ইনস্টল করার সময় ঐচ্ছিক proxy এবং CrowdSec সার্ভিসগুলো বাদ দিন এবং যতক্ষণ না PostgreSQL প্রয়োজন হচ্ছে, ডিফল্ট SQLite স্টোরেই থাকুন।