Linux VPS वर स्वतःचे WireGuard VPN कसे सेट करावे?
तुमच्या स्वतःच्या Linux VPS वर WireGuard VPN सेट करण्यासाठी लागणारी की जनरेशन, wg0.conf कॉन्फिगरेशन आणि IP फॉरवर्डिंगची संपूर्ण माहिती. हँडशेक एरर्स टाळण्यासाठी आवश्यक टिप्स.
तुम्ही काय तयार करत आहात
तुमच्या मालकीच्या सर्व्हरवर WireGuard VPN तयार करण्यासाठी साधारण चाळीस ओळींचे कॉन्फिगरेशन लागते: एक की-पेअर, एक इंटरफेस फाईल, एक sysctl, एक NAT नियम आणि फायरवॉलमध्ये एक पोर्ट उघडणे. याचे इन्स्टॉलेशन अत्यंत सोपे आहे, त्यामुळे या मार्गदर्शकाचा मोठा भाग काय बिघडू शकते, की-परमिशन (key permissions), AllowedIPs, फॉरवर्डिंग आणि DNS यावर लक्ष केंद्रित करतो.
WireGuard हा कर्नलमध्ये असलेला लेयर 3 टनेल आहे. Linux 5.6 पासून तो मेनलाइनमध्ये समाविष्ट आहे, त्यामुळे Ubuntu 24.04 आणि Debian 13 मध्ये तो कोणत्याही बाह्य मॉड्यूलशिवाय उपलब्ध आहे. यात सायफर निगोशिएशन, सर्टिफिकेट ऑथॉरिटी किंवा युजरनेम/पासवर्डची पायरी नसते: एक पीअर (peer) म्हणजे एक पब्लिक की आणि ती की वापरू शकणारे IP ॲड्रेस. जर एखाद्या पॅकेटची MAC तपासणी अयशस्वी झाली, तर ते कोणतेही उत्तर न देता ड्रॉप केले जाते, त्यामुळे पोर्ट स्कॅनिंगला कोणताही प्रतिसाद मिळत नाही. याचा दुसरा पैलू असा की, यात कोणतेही ऑथेंटिकेशन सर्व्हर नसते, त्यामुळे प्रवेश काढून टाकण्यासाठी सर्व्हरवरून तो पीअर डिलीट करावा लागतो.
प्रथम व्हर्च्युअलायझेशन तपासा
WireGuard ला अशा कर्नलची आवश्यकता असते ज्यामध्ये तुम्ही मॉड्यूल लोड करू शकता, आणि KVM VPS वर ते कोणत्याही अतिरिक्त बदलाशिवाय कार्य करते. होस्ट कर्नल शेअर करणाऱ्या कंटेनर व्हर्च्युअलायझेशनवर, जसे की OpenVZ किंवा LXC, पहिली कमांड RTNETLINK answers: Operation not supported एररमुळे अपयशी ठरते आणि अशा वेळी wireguard-go युजरस्पेस इम्प्लिमेंटेशन हा पर्याय वापरावा लागतो. प्रथम 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) जोडते, जी प्रत्येक कॉन्फिगरेशनमध्ये एका ओळीत असते.
सर्व्हर इंटरफेस: /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' असल्याची स्टार्टअप वॉर्निंग येत असेल, तर तुम्ही ती पायरी वगळली आहे. Address हा टनेलच्या आतील सर्व्हरचा पत्ता आहे, जो संपूर्ण VPN सबनेटचा मास्क धारण करतो. अशी रेंज निवडा जी तुम्हाला प्रत्यक्ष नेटवर्कमध्ये आढळणार नाही, कारण 192.168.1.0/24 ही रेंज अनेक होम राउटर्सच्या रेंजशी जुळते, ज्यामुळे टनेलचे ट्रॅफिक स्थानिक राउटिंगमुळे विनासायास बंद पडते.
सर्व्हर बाजूला पीअरचा AllowedIPs हा एक /32 असतो, जो त्या क्लायंटचा एकमेव टनेल पत्ता असतो. दोन पीअर्सना एकच allowed IP दिल्यास, ज्याची कॉन्फिगरेशन शेवटी केली आहे, ट्रॅफिक त्याकडे वळवले जाते आणि पहिल्या पीअरचे ट्रॅफिक कोणत्याही त्रुटीशिवाय बंद होते. SaveConfig अनसेट ठेवा, अन्यथा wg-quick down ही फाईल थेट लाइव्ह स्टेटवरून पुन्हा लिहिली जाईल.
बॉक्सला राउटरमध्ये रूपांतरित करा
लिनक्स सर्व्हर स्वतःसाठी नसलेले पॅकेट्स ड्रॉप करतो. डीफॉल्टनुसार, फॉरवर्डिंग आणि सोर्स 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एक साधा sysctl -w पुढच्या रीबूटपर्यंत काम करतो आणि त्यानंतर शांतपणे बंद पडतो. NAT साठी egress इंटरफेसची, म्हणजेच इंटरनेटपर्यंत पोहोचणाऱ्या NIC ची गरज असते, wg0 ची नाही. eth0 गृहीत धरू नका; तुमचा इंटरफेस ip route show default वरून तपासा, कारण सध्याच्या इमेजेसमध्ये enp1s0 किंवा ens3 सारखी नावे वापरली जातात.
फायरवॉल: पोर्ट आणि फॉरवर्ड पाथ
एक nftables फाईल फिल्टर आणि NAT दोन्ही हाताळते. /etc/nftables.conf लिहा, हे विद्यमान रूल्सेट flushes (पुसून टाकते), त्यामुळे जर सर्व्हर आधीच 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
}
}हे sudo systemctl enable --now nftables वापरून लागू करा. यावेळी दुसरे SSH सत्र सुरू ठेवा: policy drop आणि SSH रूलमधील टायपो तुम्हाला स्वतःच्या सर्व्हरवरून बाहेर काढू शकतो. फॉरवर्ड चेन काय परवानगी देत नाही, ते लक्षात घ्या, wg0 ते wg0. पीअर्स इंटरनेटपर्यंत पोहोचू शकतात, पण एकमेकांपर्यंत नाही; पीअर-टू-पीअर VPN साठी iifname "wg0" oifname "wg0" accept जोडा. हीच चेन पीअर सर्व्हरवर कशाला स्पर्श करू शकतो हे नियंत्रित करते. जेव्हा सर्व्हर tmux मध्ये Claude Code चालवणारा रिमोट डेव्हलपमेंट बॉक्स म्हणून काम करत असेल आणि तुम्हाला तो भाग सार्वजनिक करायचा नसेल, तेव्हा हे महत्त्वाचे ठरते.
ufw असलेल्या बॉक्सवर: ufw allow 51820/udp, /etc/default/ufw मध्ये DEFAULT_FORWARD_POLICY="ACCEPT", आणि /etc/ufw/before.rules च्या सुरुवातीला *nat POSTROUTING MASQUERADE रूल वापरा.
systemd अंतर्गत सेवा सुरू करणे
sudo systemctl enable --now wg-quick@wg0
sudo wg showwg-quick इंटरफेस तयार करते, पत्ते जोडते आणि AllowedIPs मधून मिळवलेले राउट्स इन्स्टॉल करते. enable --now हा महत्त्वाचा भाग आहे: मॅन्युअली चालवलेली wg-quick up wg0 कमांड रीबूटनंतर निघून जाते आणि कर्नल अपग्रेडसाठी रीबूट आवश्यक असतो. अशा रीबूटनंतर जी युनिट सुरू होत नाही, ती कोणीतरी कनेक्ट करण्याचा प्रयत्न करेपर्यंत शांत राहते. त्यामुळे, लॉक-आउट झालेल्या वापरकर्त्याकडून तक्रार येण्यापेक्षा, तुमच्या स्वतःच्या ntfy सर्व्हर कडे निर्देशित केलेले wg-quick@wg0 वरील OnFailure= ड्रॉप-इन वापरणे, हे तुमच्या फोनवर अलर्ट मिळवण्याचा सर्वात स्वस्त मार्ग आहे.
क्लायंट कॉन्फिगरेशन आणि एक अशी सेटिंग जी सर्वांकडून चुकीची होते
[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 बाबतच्या बहुतेक गोंधळाचे मूळ आहे.
आउटबाउंडसाठी हे एक राउटिंग टेबल आहे. ज्या पॅकेटचे डेस्टिनेशन एखाद्या पीअरच्या AllowedIPs शी जुळते, ते एनक्रिप्ट केले जाते आणि त्या पीअरकडे पाठवले जाते. 0.0.0.0/0, ::/0 सर्व ट्रॅफिक टनेलद्वारे पाठवते, ज्याला 'फुल टनेल' म्हणतात, जिथे सर्व्हर डिफॉल्ट राउट म्हणून काम करतो. 'स्प्लिट टनेल' ही एक मर्यादित यादी असते: AllowedIPs = 10.8.0.0/24, 10.20.0.0/16 मध्ये VPN ट्रॅफिक आणि सर्व्हरच्या मागील एक खाजगी नेटवर्क समाविष्ट असते, तर इतर सर्व ट्रॅफिक स्थानिक राउटचा वापर करते. या मर्यादित यादीमुळेच तुम्ही सेवांना सार्वजनिक इंटरनेटपासून पूर्णपणे दूर ठेवू शकता. उदाहरणार्थ, टनेल ॲड्रेसशी बाइंड केलेले खाजगी Nextcloud इंस्टन्स किंवा त्याच बॉक्सवर चालणारे नेस्टेड-व्हर्च्युअलायझेशन लॅब VMs, हे फक्त पीअर्सना दिसू शकतात आणि इतरांसाठी अदृश्य राहतात.
इनबाउंडसाठी हे एक ॲक्सेस-कंट्रोल लिस्ट (ACL) आहे. एखाद्या पीअरकडून आलेले डिक्रिप्ट केलेले पॅकेट, ज्याचा सोर्स ॲड्रेस त्या पीअरच्या AllowedIPs मध्ये नसेल, तर ते ड्रॉप केले जाते. म्हणूनच सर्व्हर लॅपटॉपसाठी 10.8.0.2/32 ची यादी ठेवतो: तिथे 0.0.0.0/0 अशी एन्ट्री असल्यास, तो क्लायंट टनेल मधील कोणताही ॲड्रेस स्पूफ (spoof) करू शकेल.
PersistentKeepalive हे NAT च्या मागे असलेल्या क्लायंटसाठी असते, जिथे राउटर फक्त पॅकेट प्रवाहित असतानाच UDP मॅपिंग उघडे ठेवतो. जेव्हा हे मॅपिंग संपते, तेव्हा सर्व्हर क्लायंटपर्यंत पोहोचू शकत नाही. PersistentKeepalive = 25 हे मॅपिंग उघडे ठेवते; हे सेटिंग क्लायंटवर करा, सार्वजनिक IP असलेल्या सर्व्हरवर नाही.
DNS आणि ज्या लीककडे कोणाचेही लक्ष जात नाही
AllowedIPs = 0.0.0.0/0 आणि कोणतीही DNS = ओळ नसल्यास, क्लायंट स्थानिक नेटवर्कवरून मिळालेला रिझोल्व्हर वापरणे सुरू ठेवतो, जो 192.168.1.1 वरील कॅफे राउटर असतो. तो मार्ग डिफॉल्ट मार्गापेक्षा अधिक विशिष्ट असतो, त्यामुळे इतर सर्व ट्रॅफिक टनेलद्वारे जात असतानाही DNS क्वेरीज स्थानिक लिंकवरून प्लेनटेक्स्टमध्ये बाहेर पडतात. ट्रॅफिक खाजगी असते; परंतु भेट दिलेल्या नावांची यादी खाजगी नसते.
दोन प्रामाणिक पर्याय आहेत. DNS ला पब्लिक रिझोल्व्हरकडे (DNS = 9.9.9.9) निर्देशित करा, ज्यामुळे क्वेरीज टनेलवरून प्रवास करतील आणि तुमच्या सर्व्हरवरून बाहेर पडतील, जरी तो रिझोल्व्हर अजूनही त्या क्वेरीज पाहू शकतो. किंवा 10.8.0.1 वर बाउंड असलेला unbound किंवा dnsmasq चालवा, DNS = 10.8.0.1 सेट करा आणि इनपुट चेनमध्ये udp dport 53 iifname "wg0" accept जोडा, ती ओळ सेट करा आणि रिझोल्व्हर विसरून जा, त्यानंतर काहीही रिझॉल्व्ह होणार नाही.
Linux क्लायंटवर wg-quick हे DNS द्वारे resolvconf लागू करते; जर ते अनुपस्थित असेल तर तुम्हाला resolvconf: command not found मिळते. openresolv इंस्टॉल करा किंवा systemd-resolved क्लायंटवर PostUp = resolvectl dns %i 10.8.0.1 सेट करा.
Adding and removing peers without dropping the tunnel
Restarting the interface to add a user kicks off everyone connected. Append the [Peer] block to wg0.conf, then reload the peer set in place.
sudo bash -c 'wg syncconf wg0 <(wg-quick strip wg0)'wg-quick strip prints the config without the wg-quick-only keys (Address, DNS, PostUp), and syncconf applies the difference while live sessions survive. It updates peers only: a changed Address still needs a full down/up. Revoke with sudo wg set wg0 peer <public key> remove, then delete the block from the file or it returns on the next reload.
अपयशाचे प्रकार आणि दिसणारे संदेश
हँडशेक पूर्ण होत नाही. wg show मध्ये पीअर (peer) दिसते पण त्याला latest handshake नसते, आणि क्लायंटच्या लॉगमध्ये खालीलप्रमाणे दिसते:
Handshake for peer 1 (10.0.0.10:51820) did not complete after 5 seconds, retrying (try 2)काहीही पोहोचत नाहीये किंवा काहीही स्वीकारले जात नाहीये. क्रमाने तपासा: VPS फायरवॉलवर आणि तुमच्या प्रोव्हायडरच्या नेटवर्क फायरवॉलवर UDP 51820 पोर्ट उघडे आहे का (बहुतेक पॅनेलमध्ये हे स्वतंत्र नियंत्रण असते); Endpoint पत्ता आणि पोर्ट बरोबर आहेत का; कीज (keys) चुकीच्या लावल्या आहेत का. क्लायंटच्या [Peer] ब्लॉक मधील की ही सर्व्हरची पब्लिक की असली पाहिजे, आणि उलटही तसेच. खाजगी की (private key) किंवा क्लायंटची स्वतःची पब्लिक की पेस्ट केल्यास नेमकी हीच समस्या येते. सर्व्हरवर sudo tcpdump -ni any udp port 51820 चालवून पॅकेट्स पोहोचत आहेत का ते तपासा. कर्नल मॉड्यूल डीफॉल्टनुसार काहीही लॉग करत नाही; WireGuard चे संदेश dmesg मध्ये तेव्हाच दिसतात जेव्हा तुम्ही डायनॅमिक डीबग (echo module wireguard +p | sudo tee /sys/kernel/debug/dynamic_debug/control) सुरू करता. ते सुरू केल्यावर, की जुळत नसल्यास 'invalid-MAC drop' असा संदेश दिसतो.
हँडशेक होतो, पण इंटरनेट चालत नाही. ping 10.8.0.1 यशस्वी होतो पण ping 1.1.1.1 टाईम-आउट होतो: याचा अर्थ फॉरवर्डिंग किंवा NAT गहाळ आहे. sysctl net.ipv4.ip_forward मध्ये 1 असल्याचे तपासा, त्यानंतर क्लायंट पिंग करत असताना sudo nft list ruleset किंवा sudo iptables -t nat -L POSTROUTING -n -v वापरून काउंटरवर लक्ष ठेवा. मॅस्क्युअरेड (masquerade) रूलवर शून्य पॅकेट्स दिसत असतील तर इग्रेस इंटरफेसचे नाव चुकीचे आहे; जर काउंटर वाढत असेल पण प्रतिसाद मिळत नसेल, तर फॉरवर्ड चेन पॉलिसी तपासा.
इंटरनेट चालते, पण नावे (names) रिझॉल्व्ह होत नाहीत. ping 1.1.1.1 यशस्वी होतो आणि curl https://example.com वरून Could not resolve host मिळते. DNS ओळ गहाळ आहे, किंवा त्यात असा रिझॉल्व्हर दिला आहे जो टनेलच्या आतून पोहोचण्यायोग्य नाही.
काही HTTPS साईट्स हँग होतात. SSH आणि पिंग व्यवस्थित चालतात; मोठी वेबपेजेस लोड होत नाहीत. हे पाथ MTU मुळे होते: टनेलमुळे ओव्हरहेड वाढते आणि वाटेतील एखादा दुवा (link) मोठे पॅकेट्स ड्रॉप करतो, ज्याचा ICMP संदेश परत येत नाही. क्लायंटच्या [Interface] मध्ये MTU कमी करा, आधी 1420 वापरून पहा, त्यानंतर 1380, आणि मग 1280. जर MTU कमी केल्याने समस्या सुटली पण वेग अजूनही कमी वाटत असेल, तर अंदाज लावणे थांबवा आणि bisection आणि TCP MSS clamping द्वारे खरा पाथ MTU शोधणे ही प्रक्रिया पूर्ण करा, ज्यामुळे टनेलशी संबंधित नसलेली इतर कारणेही बाद होतील.
इंटरफेस सुरू होण्यास नकार देतो. Address already in use चा अर्थ असा की दुसरी एखादी प्रक्रिया UDP 51820 पोर्ट वापरत आहे. up अयशस्वी झाल्यानंतर Cannot find device wg0 दिसणे म्हणजे कॉन्फिगरेशन नाकारले गेले आहे; journalctl -u wg-quick@wg0 -n 50 वाचा.
Streisand किंवा OpenVPN वरून स्थलांतर (Migration)
Streisand आता देखरेखीखाली नाही आणि त्याची रिपॉझिटरी आर्काइव्ह केली गेली आहे. जुन्या आणि असुरक्षित ऑटोमेशनवर VPN चालवणे ही एक गंभीर सुरक्षा समस्या आहे. याचे थेट अपग्रेड शक्य नाही आणि OpenVPN चे PKI रूपांतरित करता येत नाही: WireGuard मध्ये प्रमाणपत्रे (certificates), CA किंवा एक्सपायरी नसते, त्यामुळे प्रत्येक क्लायंटला नवीन की-पेअर (key pair) तयार करावी लागते.
समांतर स्थलांतर करा; एकाच सर्व्हरवर UDP 51820 पोर्टवर WireGuard आणि 1194 पोर्टवर OpenVPN एकत्र चालू शकतात. wg0 सेट करा, एका वेळी एक क्लायंट हलवा आणि त्यानंतर जुनी सेवा बंद करा. OpenVPN चे युजरनेम/पासवर्ड आणि रिव्होकेशन मॉडेल WireGuard मध्ये वापरता येत नाही; जर तुम्हाला अकाउंट्स किंवा ऑडिट ट्रेलची गरज असेल, तर WireGuard च्या वर त्या सुविधा लागू करा.
बॅकअप, अपग्रेड आणि स्केल करताना येणारी आव्हाने
/etc/wireguard हाच सर्व्हर आहे. त्याचा बॅकअप घ्या (sudo tar czf wg-backup.tgz -C /etc wireguard, mode 600, सर्व्हरबाहेर सुरक्षित ठेवा) म्हणजे तुम्ही काही मिनिटांत नवीन VPS वर सर्व्हर पुन्हा उभा करू शकता. जर सर्व्हरची private key गहाळ झाली, तर प्रत्येक क्लायंटचे कॉन्फिगरेशन पुन्हा जारी करावे लागेल, कारण क्लायंट सर्व्हरची public key पिन करून ठेवतात. अपग्रेड ही एक सामान्य apt upgrade प्रक्रिया आहे, फक्त कर्नल अपडेटसाठी रीबूट आवश्यक असतो आणि जर तुम्ही ते enable केले असेल, तर wg-quick@wg0 आपोआप सुरू होते.
प्रत्येक पीअरची स्थिती (state) लहान असते आणि क्रिप्टो कर्नलमध्ये चालते, त्यामुळे मर्यादा ही तुमच्या VPS ची CPU आणि बँडविड्थ आहे, या कॉन्फिगरेशनमधील कोणतीही गोष्ट नाही. प्रकाशित आकडेवारीवर विश्वास ठेवण्याऐवजी iperf3 वापरून टनेलद्वारे प्रत्यक्ष मोजमाप करा. स्केल करताना ऑपरेशन्समध्ये ताण येतो. प्रत्येक पीअरला एक युनिक टनेल IP आवश्यक असतो आणि साठ [Peer] ब्लॉक्स हाताने एडिट केल्यास AllowedIPs डुप्लिकेट होण्याची शक्यता असते: त्यामुळे कॉन्फिगरेशन स्क्रिप्टद्वारे तयार करा. एक सर्व्हर म्हणजे एक UDP एंडपॉईंट आणि एक सिंगल पॉइंट ऑफ फेल्युअर असतो, आणि WireGuard मध्ये क्लस्टरिंगची सोय नाही: रिडंडन्सीसाठी स्वतःच्या की असलेला दुसरा सर्व्हर आवश्यक असतो. की रोटेशन मॅन्युअली करावे लागते, त्यामुळे कोणाकडे कोणती की आहे आणि ती कशी रद्द करायची याची नोंद ठेवा. जेव्हा ही नोंदणी एका टेक्स्ट फाईलच्या पलीकडे जाते, तेव्हा सामान्यतः त्याच कर्नल डेटा प्लेनवर एक कंट्रोल प्लेन वापरले जाते, आणि एक self-hosted NetBird सर्व्हर ॲड्रेस अलोकेशन, पीअर डिस्ट्रिब्युशन आणि सेटअप कीज हाताळतो, जे तुम्ही अन्यथा हाताने करत असता. जर तो कंट्रोल प्लेन स्वतः चालवणे एक अतिरिक्त सर्व्हर वाटत असेल, तर Tailscale तुमच्यासाठी ते होस्ट करते आणि त्याची मोफत योजना सहा वापरकर्त्यांना अमर्यादित उपकरणांसह सुविधा देते, जी बहुतेक वैयक्तिक वापरासाठी पुरेशी असते. त्यापुढील टप्प्यावर खर्च मशीनऐवजी लोकांवर आधारित असतो, त्यामुळे घरगुती किंवा लहान टीमला किती पैसे द्यावे लागतील हे किती लोक लॉगिन वापरतात यावर अवलंबून असते, किती पीअर्स तुम्ही wg0.conf मध्ये हाताने एडिट करत आहात यावर नाही. त्या बाजूला, स्प्लिट-टनेल AllowedIPs चे व्यवस्थापन सबनेट राउटरवरून तुमच्या खाजगी रेंजची जाहिरात करण्यावर येते, जे एका VPS वरून एकदाच घोषित केले जाते आणि प्रत्येक क्लायंट फाईलमध्ये पेस्ट करण्याऐवजी मध्यवर्तीरित्या मंजूर केले जाते. हा व्यवहार फायदेशीर आहे की नाही हे होस्ट केलेला कंट्रोल प्लेन काय साध्य करू शकतो यावर अवलंबून असते, आणि तो तुमच्या ट्रॅफिकला एनक्रिप्ट करणाऱ्या कीज कधीही साठवत नाही, जरी तो कोणते पीअर्स एकमेकांना ओळखतील हे ठरवतो.
या सर्वांसाठी तुमच्या नियंत्रणाखालील एक Linux बॉक्स, एक पब्लिक IP, ज्यामध्ये तुम्ही मॉड्यूल लोड करू शकता असे कर्नल आणि ज्यावर तुमचे पूर्ण नियंत्रण आहे असा फायरवॉल आवश्यक आहे.
FAQ
WireGuard हँडशेक पूर्ण का होत नाही?
wg show मध्ये पीअरची यादी असूनही latest handshake दिसत नसेल, तर याचा अर्थ पॅकेट्स पोहोचत नाहीत किंवा स्वीकारली जात नाहीत. VPS फायरवॉल आणि तुमच्या प्रोव्हायडरची स्वतंत्र नेटवर्क फायरवॉल या दोन्हीवर UDP 51820 पोर्ट तपासा. Endpoint होस्ट आणि पोर्टची खात्री करा. त्यानंतर की (keys) चुकीच्या नाहीत ना हे तपासा; क्लायंटच्या [Peer] ब्लॉक मध्ये सर्व्हरची public की असणे आवश्यक आहे. सर्व्हरवरील sudo tcpdump -ni any udp port 51820 पॅकेट्स पोहोचत आहेत की नाही हे दर्शवते. dmesg फक्त डायनॅमिक डीबग (echo module wireguard +p | sudo tee /sys/kernel/debug/dynamic_debug/control) सुरू केल्यानंतरच WireGuard चे हँडशेक फेल्युअर रिपोर्ट करते, त्यानंतर की जुळत नसल्यास ते invalid-MAC ड्रॉप म्हणून दिसते.
टनेल कनेक्ट होतो पण इंटरनेट चालत नाही. काय चुकतेय?
ping 10.8.0.1 काम करत असताना ping 1.1.1.1 टाइम-आउट होत असेल, तर ही समस्या फॉरवर्डिंग किंवा NAT शी संबंधित आहे. sysctl net.ipv4.ip_forward मध्ये 1 असल्याचे आणि ते /etc/sysctl.d/ मध्ये सेट केल्याची खात्री करा, केवळ sysctl -w वापरू नका कारण ते रीबूटनंतर निघून जाते. त्यानंतर, तुमच्या मुख्य egress इंटरफेसचे नाव ip route show default, enp1s0 किंवा ens3 (क्वचित प्रसंगी eth0) वरून तपासा आणि masquerade नियम तपासा.
मला माझ्या क्लायंट कॉन्फिगरेशनमध्ये DNS = ओळीची गरज आहे का?
फुल टनेल असताना आणि DNS = ओळ नसल्यास, क्लायंट स्थानिक नेटवर्ककडून मिळालेला रिझॉल्व्हर वापरत राहतो. अशा वेळी इतर सर्व ट्रॅफिक टनेलद्वारे जात असतानाही DNS क्वेरीज स्थानिक लिंकवरून प्लेन-टेक्स्टमध्ये बाहेर पडतात. DNS ला एखाद्या पब्लिक रिझॉल्व्हरकडे पॉइंट करा, किंवा 10.8.0.1 वर बाइंड केलेले unbound/dnsmasq चालवा आणि इनपुट चेनमध्ये udp dport 53 iifname "wg0" उघडा.
AllowedIPs नक्की काय नियंत्रित करते?
हे दोन कामे करते. आउटबाउंडसाठी हे एक राउटिंग टेबल आहे: पीअरच्या AllowedIPs शी जुळणारे ट्रॅफिक एनक्रिप्ट केले जाते आणि त्या पीअरकडे पाठवले जाते. इनबाउंडसाठी हे एक ॲक्सेस-कंट्रोल लिस्ट आहे: डिक्रिप्ट केलेले पॅकेट ज्याचा सोर्स त्या पीअरच्या AllowedIPs च्या बाहेर असेल, तर ते ड्रॉप केले जाते. म्हणूनच सर्व्हर साईडला प्रत्येक क्लायंटसाठी /32 ची यादी असते, तर क्लायंट साईडला 0.0.0.0/0 असू शकते.
WireGuard कोणत्याही VPS वर चालेल का?
KVM VPS वर हे इन-कर्नल मॉड्यूलसह कोणत्याही अतिरिक्त सेटअपशिवाय चालते. OpenVZ किंवा LXC सारख्या कंटेनर व्हर्च्युअलायझेशनमध्ये, जे होस्ट कर्नल शेअर करतात, तिथे modprobe wireguard हे Operation not supported मुळे अपयशी ठरते. अशा वेळी wireguard-go युजरस्पेस इम्प्लिमेंटेशन हा पर्याय उरतो. इतर काहीही करण्यापूर्वी sudo modprobe wireguard && echo ok चालवून तपासा.