VPS-এ WireGuard VPN সেটআপ করার নিয়ম
Linux VPS-এ WireGuard সেটআপ করুন। key generation, wg0.conf এবং IP forwarding এর সঠিক নিয়ম জানুন। handshake failure এবং NAT সংক্রান্ত সমস্যা সমাধান করুন।
What you are building
A WireGuard VPN on a server you own is about forty lines of config: one key pair, one interface file, one sysctl, one NAT rule, one firewall hole. The install is trivial, so most of this guide covers what breaks — key permissions, AllowedIPs, forwarding and DNS.
WireGuard is a Layer 3 tunnel in the kernel, mainline since Linux 5.6, so Ubuntu 24.04 and Debian 13 ship it with no external module. No cipher negotiation, no certificate authority, no username/password step: a peer is a public key plus the IP addresses that key may use. A packet failing its MAC check is dropped with no reply, so the port does not answer scans. The flip side: no auth server exists, so removing access means deleting a peer on the box.
প্রথমে virtualisation পরীক্ষা করুন
WireGuard-এর জন্য এমন একটি kernel প্রয়োজন যেখানে module load করা যায়। KVM VPS-এ এটি সরাসরি কাজ করে। Container virtualisation (যেমন: OpenVZ, LXC) host kernel শেয়ার করে। এই ক্ষেত্রে প্রথম command-টি RTNETLINK answers: Operation not supported এর কারণে fail করে। সেক্ষেত্রে fallback হিসেবে wireguard-go userspace implementation ব্যবহার করা হয়। প্রথমে sudo modprobe wireguard && echo ok দিয়ে পরীক্ষা করে নিন।
চাবি বা keys লিক হওয়া ছাড়াই তৈরি করুন
একটি world-readable /etc/wireguard/server.key থাকা মানে কোনো VPN না থাকার মতোই। সাধারণ umask 077 && wg genkey | sudo tee ... লাইনটি নির্ভরযোগ্য নয়, কারণ sudo ফাইল tee তৈরি করার সময় নিজস্ব umask প্রয়োগ করে। mode স্পষ্টভাবে সেট করুন।
sudo apt update && sudo apt install -y wireguard nftables
sudo install -d -m 700 /etc/wireguard
sudo sh -c 'umask 077; wg genkey > /etc/wireguard/server.key'
sudo sh -c 'wg pubkey < /etc/wireguard/server.key > /etc/wireguard/server.pub'
sudo chmod 600 /etc/wireguard/server.keyএকই পদ্ধতিতে client pair তৈরি করুন। wg genpsk একটি ঐচ্ছিক pre-shared key যোগ করে, যা প্রতিটি config-এ এক লাইনের হয়।
সার্ভার ইন্টারফেস: /etc/wireguard/wg0.conf
[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = <contents of /etc/wireguard/server.key>
[Peer]
PublicKey = <laptop public key>
PresharedKey = <psk, optional>
AllowedIPs = 10.8.0.2/32chmod 600 এটি; ফাইলটি world accessible হওয়ার যে startup warning আসে, তার মানে আপনি সেটি এড়িয়ে গেছেন। Address হলো টানেলের ভেতরে সার্ভারের অ্যাড্রেস, যা পুরো VPN subnet-এর মাস্ক বহন করে। এমন একটি রেঞ্জ বেছে নিন যা সাধারণ নেটওয়ার্কে পাওয়া যাবে না — 192.168.1.0/24 ক্লায়েন্টদের ব্যবহৃত অর্ধেক হোম রাউটারের সাথে সংঘর্ষ (collide) তৈরি করে, যার ফলে টানেলটি লোকাল রাউটের কাছে নিঃশব্দে পরাজিত হয়।
server সাইডে একটি peer-এর AllowedIPs হলো একটি /32, যা ক্লায়েন্টের একমাত্র টানেল অ্যাড্রেস। যদি দুটি peer-কে একই allowed IP দেওয়া হয়, তবে সেটি সর্বশেষ কনফিগার করা অ্যাড্রেসটি গ্রহণ করবে এবং প্রথমটি কোনো এরর ছাড়াই ট্রাফিক রিসিভ করা বন্ধ করে দেবে। SaveConfig আনসেট (unset) রাখুন, অন্যথায় wg-quick down লাইভ স্টেট থেকে এই ফাইলটি পুনরায় লিখে ফেলবে।
বক্সটিকে একটি রাউটারে রূপান্তর করুন
একটি Linux server সেই সব packet ড্রপ করে যা এর জন্য নির্ধারিত নয়। ডিফল্টভাবে Forwarding এবং source NAT উভয়ই অনুপস্থিত থাকে।
printf 'net.ipv4.ip_forward = 1\nnet.ipv6.conf.all.forwarding = 1\n' \
| sudo tee /etc/sysctl.d/99-wireguard.conf
sudo sysctl --system
sysctl net.ipv4.ip_forwardএকটি bare sysctl -w পরবর্তী reboot পর্যন্ত কাজ করে এবং তারপর নীরবে কাজ করা বন্ধ করে দেয়। NAT-এর জন্য egress interface প্রয়োজন — অর্থাৎ সেই NIC যা internet-এর সাথে সংযুক্ত, wg0 নয়। eth0 ধরে নেবেন না; আপনার ইন্টারফেসটি ip route show default থেকে সংগ্রহ করুন, কারণ বর্তমান image গুলোতে enp1s0 বা ens3 এর মতো নাম ব্যবহৃত হয়।
Firewall: port, এবং forward path
একটি nftables ফাইল filter এবং NAT নিয়ন্ত্রণ করে। /etc/nftables.conf লিখুন — এটি বিদ্যমান ruleset মুছে ফেলে (flush), তাই যে সার্ভার ইতিমধ্যে ufw বা Docker দ্বারা পরিচালিত হচ্ছে সেখানে এটি করবেন না।
#!/usr/sbin/nft -f
flush ruleset
table inet filter {
chain input {
type filter hook input priority filter; policy drop;
ct state established,related accept
iif lo accept
tcp dport 22 accept
udp dport 51820 accept
}
chain forward {
type filter hook forward priority filter; policy drop;
ct state established,related accept
iifname "wg0" oifname "enp1s0" accept
}
}
table ip nat {
chain postrouting {
type nat hook postrouting priority srcnat; policy accept;
ip saddr 10.8.0.0/24 oifname "enp1s0" masquerade
}
}একটি দ্বিতীয় SSH session খোলা রেখে sudo systemctl enable --now nftables দিয়ে এটি প্রয়োগ করুন: policy drop এবং SSH rule-এ একটি বানান ভুল (typo) আপনার সার্ভার থেকে আপনাকে লক আউট করতে পারে। forward chain কী করতে দেয় না তা লক্ষ্য করুন — wg0 থেকে wg0। Peer-রা ইন্টারনেট অ্যাক্সেস করতে পারবে, কিন্তু একে অপরকে নয়; peer-to-peer VPN-এর জন্য iifname "wg0" oifname "wg0" accept যোগ করুন। একই chain সার্ভারের অভ্যন্তরীণ বিষয়গুলো নিয়ন্ত্রণ করে, যা তখন গুরুত্বপূর্ণ হয় যখন সার্ভারটি tmux-এ Claude Code running remote development box হিসেবে ব্যবহৃত হয় এবং আপনি সেই অংশটি পাবলিকলি প্রকাশ করতে চান না।
একটি ufw সার্ভারে: ufw allow 51820/udp, /etc/default/ufw-এ DEFAULT_FORWARD_POLICY="ACCEPT", এবং /etc/ufw/before.rules-এর শুরুতে একটি *nat POSTROUTING MASQUERADE rule।
systemd এর অধীনে এটি চালু করুন
sudo systemctl enable --now wg-quick@wg0
sudo wg showwg-quick ইন্টারফেস তৈরি করে, অ্যাড্রেস যোগ করে এবং AllowedIPs থেকে প্রাপ্ত রুটগুলো ইনস্টল করে। enable --now হলো সবচেয়ে গুরুত্বপূর্ণ অংশ: পরবর্তী রিবুটের পরে হাতে চালানো wg-quick up wg0 মুছে যাবে, এবং kernel upgrade করার জন্য রিবুট করতে হয়।
Client configuration, এবং একটি সাধারণ ভুল ধারণা
[Interface]
PrivateKey = <laptop private key>
Address = 10.8.0.2/32
DNS = 10.8.0.1
[Peer]
PublicKey = <server public key>
Endpoint = vpn.example.com:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25AllowedIPs একসাথে দুটি ভিন্ন কাজ করে। এই দুটি কাজকে গুলিয়ে ফেলাটাই WireGuard ব্যবহারের ক্ষেত্রে অধিকাংশ বিভ্রান্তির কারণ।
Outbound হিসেবে এটি একটি routing table। যদি কোনো packet-এর destination একটি peer-এর AllowedIPs-এর সাথে মিলে যায়, তবে সেটি encrypt করা হয় এবং ওই peer-এর কাছে পাঠানো হয়। 0.0.0.0/0, ::/0 টানেলের মাধ্যমে সব ডেটা পাঠায় — অর্থাৎ server-কে default route হিসেবে ব্যবহার করে একটি full tunnel তৈরি করে। অন্যদিকে, split tunnel হলো একটি ছোট তালিকা: AllowedIPs = 10.8.0.0/24, 10.20.0.0/16 শুধুমাত্র VPN traffic এবং server-এর পেছনে থাকা একটি private network বহন করে, বাকি সব ডেটা তার local route অনুসরণ করে। এই ছোট তালিকাটি আপনাকে কোনো service-কে সম্পূর্ণভাবে public internet থেকে আলাদা রাখতে সাহায্য করে — যেমন VPS-এ থাকা একটি private Nextcloud instance যা tunnel address-এর সাথে যুক্ত, অথবা একই machine-এ চলা nested-virtualisation lab VMs; এগুলো peer-দের জন্য reachable থাকে কিন্তু অন্যদের কাছে অদৃশ্য থাকে।
Inbound হিসেবে এটি একটি access-control list। যদি কোনো peer থেকে আসা decrypted packet-এর source address ওই peer-এর AllowedIPs-এ না থাকে, তবে সেটি drop করা হয়। এই কারণেই server-এ laptop-এর জন্য 10.8.0.2/32 ব্যবহার করা হয়: সেখানে যদি 0.0.0.0/0 থাকে, তবে ওই client টানেলের যেকোনো address spoof করতে পারবে।
PersistentKeepalive হলো NAT-এর পেছনে থাকা client-দের জন্য, যেখানে router শুধুমাত্র packet flow চলাকালীন UDP mapping খোলা রাখে। যখন এটি expire হয়ে যায়, server আর client-এর সাথে যোগাযোগ করতে পারে না। PersistentKeepalive = 25 এই mapping খোলা রাখে — এটি client-এ সেট করুন, public IP যুক্ত server-এ নয়।
DNS, এবং একটি লিক যা কেউ লক্ষ্য করে না
AllowedIPs = 0.0.0.0/0 এবং কোনো DNS = লাইন না থাকলে, ক্লায়েন্ট তার লোকাল নেটওয়ার্ক থেকে পাওয়া resolver টি ব্যবহার করে থাকে — যা হলো 192.168.1.1-এ অবস্থিত ক্যাফে রাউটার। এই রুটটি default route-এর চেয়ে বেশি specific, তাই DNS query গুলো cleartext হিসেবে লোকাল লিঙ্ক দিয়ে চলে যায়, যদিও অন্য সব ট্রাফিক tunnel-এর মাধ্যমে যায়। ট্রাফিক প্রাইভেট থাকে; কিন্তু নামের তালিকাটি থাকে না।
দুটি সঠিক উপায় আছে। DNS-কে একটি public resolver (DNS = 9.9.9.9)-এ পয়েন্ট করুন; এতে query গুলো tunnel-এর মাধ্যমে আপনার সার্ভার দিয়ে বের হবে, যদিও সেই resolver সেটি দেখতে পাবে। অথবা 10.8.0.1-এর সাথে bound করা unbound বা dnsmasq চালান, DNS = 10.8.0.1 সেট করুন, এবং input chain-এ udp dport 53 iifname "wg0" accept যোগ করুন — এই লাইনটি সেট করলে resolver নিয়ে চিন্তা করতে হবে না, তবে কোনো কিছুই resolve হবে না।
Linux ক্লায়েন্টগুলোতে wg-quick, resolvconf-এর মাধ্যমে DNS প্রয়োগ করে; এটি না থাকলে আপনি resolvconf: command not found পাবেন। openresolv ইনস্টল করুন, অথবা systemd-resolved ক্লায়েন্টে PostUp = resolvectl dns %i 10.8.0.1 সেট করুন।
Tunnel সংযোগ বিচ্ছিন্ন না করে peer যোগ করা এবং সরানো
নতুন user যোগ করার জন্য interface restart করলে সকল connected user বিচ্ছিন্ন হয়ে যায়। wg0.conf ফাইলে [Peer] block টি append করুন, তারপর peer set টি reload করুন।
sudo bash -c 'wg syncconf wg0 <(wg-quick strip wg0)'wg-quick strip কমান্ডটি wg-quick-only keys (Address, DNS, PostUp) ছাড়া config প্রদর্শন করে। syncconf কমান্ডটি live session বজায় রেখে পরিবর্তনগুলো apply করে। এটি শুধুমাত্র peer আপডেট করে: যদি Address পরিবর্তন করা হয়, তবে interface পূর্ণাঙ্গভাবে down/up করতে হবে। সংযোগ বাতিল করতে sudo wg set wg0 peer <public key> remove ব্যবহার করুন, এরপর ফাইল থেকে block টি মুছে ফেলুন; অন্যথায় পরবর্তী reload-এ এটি আবার ফিরে আসবে।
Failure modes, with the strings you will see
Handshake never completes. wg show lists the peer with no latest handshake, এবং ক্লায়েন্ট লগ দেখায়:
Handshake for peer 1 (10.0.0.10:51820) did not complete after 5 seconds, retrying (try 2)কোনো ডেটা আসছে না, অথবা কোনো ডেটা গ্রহণ করা হচ্ছে না। নিচের বিষয়গুলো পরীক্ষা করুন: VPS firewall এবং আপনার প্রোভাইডারের নেটওয়ার্ক firewall (যা বেশিরভাগ প্যানেলে আলাদাভাবে থাকে) উভয় জায়গাতেই UDP 51820 ওপেন আছে কি না; Endpoint অ্যাড্রেস এবং পোর্ট সঠিক কি না; এবং কী (key) গুলো সঠিকভাবে বিনিময় করা হয়েছে কি না। ক্লায়েন্টের [Peer] ব্লকের কী অবশ্যই সার্ভারের পাবলিক কী হতে হবে, এবং এর উল্টোটা সত্য — প্রাইভেট কী অথবা ক্লায়েন্টের নিজস্ব পাবলিক কী পেস্ট করলে এই সমস্যাটি হয়। সার্ভারে sudo tcpdump -ni any udp port 51820 চেক করলে বোঝা যাবে প্যাকেট আদৌ পৌঁছাচ্ছে কি না। ডিফল্টভাবে কার্নেল মডিউল কোনো লগ দেখায় না; WireGuard মেসেজগুলো dmesg-এ কেবল তখনই দেখা যাবে যখন আপনি dynamic debug (echo module wireguard +p | sudo tee /sys/kernel/debug/dynamic_debug/control) চালু করবেন; এটি চালু থাকলে, কী মিসম্যাচ (key mismatch) হলে invalid-MAC drop হিসেবে দেখাবে।
Handshake works, no internet. ping 10.8.0.1 সফল হয় কিন্তু ping 1.1.1.1 টাইম-আউট হয়: এর মানে forwarding বা NAT নেই। চেক করুন sysctl net.ipv4.ip_forward 1 রিড করছে কি না, তারপর ক্লায়েন্ট যখন পিং (ping) করবে তখন sudo nft list ruleset বা sudo iptables -t nat -L POSTROUTING -n -v দিয়ে কাউন্টারগুলো পর্যবেক্ষণ করুন। masquerade রুলের প্যাকেট সংখ্যা শূন্য হওয়ার মানে হলো এর egress interface নাম ভুল; আর রিপ্লাই ছাড়াই কাউন্টার বাড়তে থাকা মানে হলো forward chain policy-তে সমস্যা আছে।
Internet works, names do not. ping 1.1.1.1 সফল হয় এবং curl https://example.com Could not resolve host রিটার্ন করে। DNS লাইনটি নেই, অথবা এটি এমন একটি resolver নির্দেশ করছে যা টানেলের ভেতর থেকে পাওয়া সম্ভব নয়।
Some HTTPS sites hang. SSH এবং ping ঠিকঠাক কাজ করে; কিন্তু বড় পেজ লোড হতে আটকে যায়। এটি path MTU-এর সমস্যা: টানেল অতিরিক্ত ওভারহেড যোগ করে, ফলে মাঝপথের কোনো লিঙ্ক বড় প্যাকেটগুলোকে ICMP মেসেজ ছাড়াই ড্রপ করে দেয়। ক্লায়েন্টের [Interface] এ MTU কমিয়ে দেখুন — প্রথমে 1420, তারপর 1380, এবং সবশেষে 1280 চেষ্টা করুন।
Interface refuses to start. Address already in use মানে অন্য কোনো প্রসেস UDP 51820 ব্যবহার করছে। up ফেইল করার পর Cannot find device wg0 আসা মানে সাধারণত কনফিগারেশন রিজেক্ট হয়েছে; journalctl -u wg-quick@wg0 -n 50 চেক করুন।
Streisand অথবা OpenVPN থেকে মাইগ্রেট করা
Streisand এখন আর রক্ষণাবেক্ষণ করা হয় না এবং এর repository আর্কাইভ করা হয়েছে। পরিত্যক্ত অটোমেশনের ওপর VPN চালানো একটি দীর্ঘমেয়াদী নিরাপত্তা ঝুঁকি। এতে সরাসরি upgrade করার কোনো উপায় নেই। OpenVPN-এর PKI সরাসরি কনভার্ট করা সম্ভব নয়; WireGuard-এ কোনো certificate, CA বা expiry নেই, তাই প্রতিটি client-এর জন্য নতুন key pair তৈরি করতে হয়।
সমান্তরালভাবে মাইগ্রেট করুন — একই সার্ভারে UDP 51820-এ WireGuard এবং 1194-এ OpenVPN একসাথে চালানো সম্ভব। প্রথমে wg0 সেটআপ করুন, এরপর একে একে client-দের সরিয়ে নিন এবং সবশেষে পুরনো service-টি বন্ধ করে দিন। OpenVPN-এর username/password এবং revocation model WireGuard-এ কাজ করবে না; আপনার যদি account বা audit trail প্রয়োজন হয়, তবে তা WireGuard-এর উপরে আলাদাভাবে যুক্ত করতে হবে।
Backups, upgrades, and what strains at scale
/etc/wireguard হলো সার্ভার। এর ব্যাকআপ নিন (sudo tar czf wg-backup.tgz -C /etc wireguard, mode 600, সার্ভারের বাইরে রাখুন) এবং আপনি কয়েক মিনিটের মধ্যে একটি নতুন VPS-এ এটি পুনরায় তৈরি করতে পারবেন। সার্ভারের private key হারিয়ে ফেললে প্রতিটি ক্লায়েন্ট কনফিগারেশন পুনরায় ইস্যু করতে হবে, কারণ ক্লায়েন্টরা সার্ভারের public key পিন করে রাখে। আপগ্রেড করা একটি সাধারণ apt upgrade প্রক্রিয়া এবং kernel আপডেট করার জন্য একটি reboot প্রয়োজন; আপনি যদি এটি সক্ষম করে থাকেন তবে wg-quick@wg0 নিজে থেকেই রিস্টার্ট হবে।
প্রতিটি peer-এর স্টেট খুব ছোট এবং crypto kernel-এ চলে, তাই এই কনফিগারেশনের কোনো সীমাবদ্ধতা নেই; এর সর্বোচ্চ ক্ষমতা নির্ভর করে আপনার VPS-এর CPU এবং bandwidth allowance-এর ওপর — কোনো প্রকাশিত তথ্যের ওপর নির্ভর না করে টানেলের মাধ্যমে iperf3 দিয়ে এটি পরিমাপ করুন। বড় স্কেলে অপারেশনাল কাজগুলো কঠিন হয়ে পড়ে। প্রতিটি peer-এর জন্য একটি ইউনিক tunnel IP প্রয়োজন, এবং ষাটটি [Peer] ব্লক হাতে লিখে এডিট করা মানে হলো ভুলবশত ডুপ্লিকেট AllowedIPs তৈরি করা: কনফিগারেশনগুলো একটি script থেকে জেনারেট করুন। একটি সার্ভার মানে একটি UDP endpoint এবং একটি single point of failure; WireGuard-এ কোনো clustering নেই: redundancy নিশ্চিত করতে দ্বিতীয় একটি সার্ভার এবং তার নিজস্ব keys প্রয়োজন। Key rotation ম্যানুয়ালি করতে হয়, তাই কে কোন key ব্যবহার করছে এবং কীভাবে একটি key revoke করতে হয় তা লিখে রাখুন।
এই সবকিছুর জন্য আপনার নিয়ন্ত্রণে থাকা একটি Linux box প্রয়োজন — একটি public IP, একটি kernel যেখানে আপনি module লোড করতে পারবেন, এবং একটি firewall যা সম্পূর্ণভাবে আপনার নিয়ন্ত্রণে থাকবে।
FAQ
কেন WireGuard handshake কখনও সম্পন্ন হয় না?
wg show এ যদি কোনো peer-এর জন্য কোনো latest handshake না থাকে, তার মানে হলো প্যাকেটগুলো পৌঁছাচ্ছে না অথবা গ্রহণ করা হচ্ছে না। VPS firewall এবং আপনার প্রোভাইডারের আলাদা নেটওয়ার্ক firewall উভয় ক্ষেত্রেই UDP 51820 চেক করুন। Endpoint হোস্ট এবং পোর্ট নিশ্চিত করুন। এরপর কী (key) গুলো উল্টে গেছে কিনা তা পরীক্ষা করুন — ক্লায়েন্টের [Peer] ব্লকে সার্ভারের public key থাকতে হবে। সার্ভারে sudo tcpdump -ni any udp port 51820 দিয়ে বোঝা যায় প্যাকেট আদৌ পৌঁছাচ্ছে কিনা; echo module wireguard +p | sudo tee /sys/kernel/debug/dynamic_debug/control দিয়ে dynamic debug চালু করার পর dmesg শুধুমাত্র WireGuard handshake ব্যর্থতা রিপোর্ট করে, যেখানে কী mismatch হলে invalid-MAC drop হিসেবে দেখায়।
টানেল কানেক্ট হয়েছে কিন্তু ইন্টারনেট নেই। কী সমস্যা হতে পারে?
ping 1.1.1.1 টাইম-আউট হচ্ছে কিন্তু ping 10.8.0.1 কাজ করছে, এর মানে হলো forwarding বা NAT-এ সমস্যা আছে। নিশ্চিত করুন যে sysctl net.ipv4.ip_forward এ 1 আছে এবং এটি /etc/sysctl.d/ এ সেট করা আছে, শুধুমাত্র sysctl -w দিয়ে নয় যা রিবুট করার পর মুছে যায়। এরপর masquerade rule চেক করুন যা আপনার আসল egress interface হিসেবে ip route show default — enp1s0 বা ens3, খুব কম ক্ষেত্রে eth0।
ক্লায়েন্ট কনফিগারেশনে কি আমার DNS = লাইনটি প্রয়োজন?
ফুল টানেল এবং কোনো DNS = লাইন না থাকলে, ক্লায়েন্ট তার লোকাল নেটওয়ার্ক থেকে পাওয়া resolver ব্যবহার করে। ফলে অন্যান্য সব ট্রাফিক টানেল হয়ে গেলেও, সেই কুয়েরিগুলো লোকাল লিঙ্কের মাধ্যমে cleartext হিসেবে চলে যায়। DNS কে একটি পাবলিক resolver-এ পয়েন্ট করুন, অথবা 10.8.0.1 এর সাথে যুক্ত unbound/dnsmasq চালান এবং input chain-এ udp dport 53 iifname "wg0" ওপেন করুন।
AllowedIPs আসলে কী নিয়ন্ত্রণ করে?
এটি দুটি কাজ করে। আউটবাউন্ডের ক্ষেত্রে এটি একটি routing table: কোনো peer-এর AllowedIPs এর সাথে মিলে যাওয়া ট্রাফিক এনক্রিপ্ট হয়ে সেই peer-এর কাছে পাঠানো হয়। ইনবাউন্ডের ক্ষেত্রে এটি একটি access-control list: যদি কোনো ডিক্রিপ্ট করা প্যাকেটের সোর্স ওই peer-এর AllowedIPs এর বাইরে হয়, তবে সেটি ড্রপ করা হয়। এই কারণেই সার্ভার সাইডে প্রতিটি ক্লায়েন্টের জন্য একটি করে /32 থাকে, যেখানে ক্লায়েন্ট সাইডে 0.0.0.0/0 থাকতে পারে।
WireGuard কি যেকোনো VPS-এ চলবে?
KVM VPS-এ এটি ইন-কার্নেল মডিউল দিয়ে কোনো অতিরিক্ত সেটআপ ছাড়াই কাজ করে। OpenVZ বা LXC-এর মতো কন্টেইনার ভার্চুয়ালাইজেশনে যা হোস্ট কার্নেল শেয়ার করে, সেখানে modprobe wireguard Operation not supported এর কারণে ব্যর্থ হয় এবং বিকল্প হিসেবে wireguard-go userspace ইমপ্লিমেন্টেশন ব্যবহার করতে হয়। অন্য যেকোনো কিছু করার আগে sudo modprobe wireguard && echo ok চালান।