SSD Nodes Learn Hosting plans →
मार्गदर्शक Matt Connorद्वारे Matt Connor · अपडेटेड 2026-10-06

Linux VPS वर WireGuard VPN कसे सेट करावे

तुमच्या Linux VPS वर WireGuard VPN सेट करण्यासाठी आवश्यक की जनरेशन, wg0.conf कॉन्फिगरेशन, IP फॉरवर्डिंग आणि NAT नियमांची सविस्तर माहिती. हँडशेक एरर टाळण्यासाठी ही मार्गदर्शिका वापरा.

तुम्ही काय तयार करत आहात

तुमच्या मालकीच्या सर्व्हरवर WireGuard VPN तयार करण्यासाठी सुमारे चाळीस ओळींचे कॉन्फिगरेशन लागते: एक की-पेअर, एक इंटरफेस फाईल, एक sysctl, एक NAT नियम आणि फायरवॉलमध्ये एक पोर्ट उघडणे. याचे इन्स्टॉलेशन सोपे आहे, त्यामुळे या मार्गदर्शकाचा मोठा भाग काय बिघडू शकते, की-परमिशन, AllowedIPs, फॉरवर्डिंग आणि DNS यावर लक्ष केंद्रित करतो.

WireGuard हा कर्नल मधील एक Layer 3 टनेल आहे, जो Linux 5.6 पासून मेनलाइनमध्ये समाविष्ट आहे. त्यामुळे Ubuntu 24.04 आणि Debian 13 मध्ये तो कोणत्याही बाह्य मॉड्यूलशिवाय उपलब्ध असतो. यात सायफर निगोशिएशन, सर्टिफिकेट ऑथॉरिटी किंवा युजरनेम/पासवर्डची पायरी नसते: एक पीअर म्हणजे एक पब्लिक की आणि ती की वापरू शकणारे IP ॲड्रेस. जर एखाद्या पॅकेटची MAC तपासणी अयशस्वी झाली, तर ते कोणतीही प्रतिक्रिया न देता ड्रॉप केले जाते, त्यामुळे पोर्ट स्कॅनिंगला प्रतिसाद देत नाही. याचा दुसरा पैलू असा की, यात कोणतेही ऑथेंटिकेशन सर्व्हर नसते, त्यामुळे प्रवेश काढून टाकण्यासाठी सर्व्हरवरून तो पीअर डिलीट करावा लागतो.

प्रथम व्हर्च्युअलायझेशन तपासा

WireGuard ला अशा कर्नलची आवश्यकता असते ज्यामध्ये तुम्ही मॉड्यूल लोड करू शकता. KVM VPS वर हे कोणत्याही अतिरिक्त बदलाशिवाय काम करते. ज्या कंटेनर व्हर्च्युअलायझेशनमध्ये होस्ट कर्नल शेअर केले जाते, जसे की OpenVZ किंवा LXC, तिथे पहिली कमांड RTNETLINK answers: Operation not supported मुळे अपयशी ठरते. अशा वेळी wireguard-go या userspace अंमलबजावणीचा (implementation) वापर करणे हा पर्याय उरतो. यासाठी प्रथम sudo modprobe wireguard && echo ok वापरून खात्री करा.

की लीक न करता जनरेट करा

वाचनीय (world-readable) /etc/wireguard/server.key असणे म्हणजे VPN नसण्यासारखेच आहे. सामान्य umask 077 && wg genkey | sudo tee ... कमांड विश्वासार्ह नाही, कारण sudo स्वतःचा umask tee ने तयार केलेल्या फाईलवर लागू करते. फाईल मोड स्पष्टपणे सेट करा.

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

क्लायंट जोडी त्याच पद्धतीने जनरेट करा. 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/32

chmod 600 करा; जर फाईल सर्वांसाठी उपलब्ध (world accessible) असल्याचा स्टार्टअप इशारा येत असेल, तर तुम्ही ती पायरी वगळली आहे. Address हा टनेलच्या आतील सर्व्हरचा पत्ता आहे, जो संपूर्ण VPN सबनेटचा मास्क धारण करतो. अशी रेंज निवडा जी तुम्हाला प्रत्यक्ष नेटवर्कमध्ये आढळणार नाही, कारण 192.168.1.0/24 ही रेंज अनेक होम राउटर्सशी जुळते ज्यांच्या मागे तुमचे क्लायंट असतात, आणि अशा वेळी टनेल स्थानिक राउटिंगमुळे शांतपणे निकामी होतो.

सर्व्हर बाजूला पीअरचा AllowedIPs म्हणजे /32 असतो, जो त्या क्लायंटचा एकमेव टनेल पत्ता आहे. दोन पीअर्सना समान allowed IP दिल्यास, जो शेवटी कॉन्फिगर केला आहे तोच कार्यरत राहतो आणि पहिल्या पीअरला कोणताही एरर न मिळता ट्रॅफिक मिळणे बंद होते. SaveConfig अनसेट ठेवा, अन्यथा wg-quick down ही फाईल थेट चालू स्थितीवरून (live state) पुन्हा लिहिली जाईल.

बॉक्सला राउटरमध्ये रूपांतरित करणे

Linux सर्व्हर स्वतःसाठी नसलेले पॅकेट्स ड्रॉप करतो. डीफॉल्टनुसार, फॉरवर्डिंग आणि सोर्स 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, DEFAULT_FORWARD_POLICY="ACCEPT" हे /etc/default/ufw मध्ये करा आणि /etc/ufw/before.rules च्या सुरुवातीला एक *nat POSTROUTING MASQUERADE नियम जोडा.

systemd अंतर्गत सेवा सुरू करणे

sudo systemctl enable --now wg-quick@wg0
sudo wg show

wg-quick इंटरफेस तयार करते, पत्ते जोडते आणि AllowedIPs मधून मिळवलेले राउट्स इन्स्टॉल करते. enable --now हा महत्त्वाचा भाग आहे: हाताने चालवलेली wg-quick up wg0 कमांड रीबूटनंतर निघून जाते आणि कर्नल अपग्रेडसाठी रीबूट आवश्यक असतो. रीबूटनंतर जी युनिट सुरू होत नाही, ती जोपर्यंत कोणीतरी कनेक्ट करण्याचा प्रयत्न करत नाही तोपर्यंत शांत राहते. म्हणून, लॉक-आउट झालेल्या वापरकर्त्याकडून तक्रार येण्यापेक्षा, स्वतःच्या फोनवर सूचना मिळवण्यासाठी तुमच्या स्वतःच्या ntfy सर्व्हर कडे निर्देश करणारी OnFailure= ड्रॉप-इन फाईल wg-quick@wg0 वर वापरणे हा सर्वात स्वस्त मार्ग आहे.

क्लायंट कॉन्फिगरेशन आणि अशी सेटिंग जी सर्वांकडून चुकीची होते

[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 = 25

AllowedIPs एकाच वेळी दोन भिन्न कामे करते आणि या दोन्ही गोष्टींची गल्लत करणे हेच WireGuard बाबतच्या बहुतेक गोंधळाचे मूळ आहे.

आउटबाउंडसाठी हे एक राउटिंग टेबल आहे. ज्या पॅकेटचे डेस्टिनेशन एखाद्या पीअरच्या AllowedIPs शी जुळते, ते एनक्रिप्ट केले जाते आणि त्या पीअरकडे पाठवले जाते. 0.0.0.0/0, ::/0 सर्व काही टनेलद्वारे पाठवते, म्हणजेच हे एक फुल टनेल आहे, जिथे सर्व्हर डिफॉल्ट रूट म्हणून काम करतो. स्प्लिट टनेल ही एक मर्यादित यादी असते: AllowedIPs = 10.8.0.0/24, 10.20.0.0/16 मध्ये VPN ट्रॅफिक आणि सर्व्हरच्या मागील एक प्रायव्हेट नेटवर्क समाविष्ट असते, तर इतर सर्व ट्रॅफिक त्याच्या स्थानिक मार्गाने जाते. या मर्यादित यादीमुळेच तुम्ही सेवांना सार्वजनिक इंटरनेटपासून पूर्णपणे दूर ठेवू शकता, जसे की टनेल ॲड्रेसशी बाइंड केलेले VPS वरील प्रायव्हेट Nextcloud इंस्टन्स किंवा त्याच बॉक्सवर चालणारे नेस्टेड-व्हर्च्युअलायझेशन लॅब VMs, जे फक्त पीअर्सना दिसतात आणि इतरांसाठी अदृश्य राहतात.

इनबाउंडसाठी हे एक ॲक्सेस-कंट्रोल लिस्ट आहे. ज्या पीअरकडून आलेले डिक्रिप्ट केलेले पॅकेट, ज्याचा सोर्स ॲड्रेस त्या पीअरच्या 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 सेट करा.

टनेल बंद न करता पीअर्स (peers) जोडणे आणि काढून टाकणे

इंटरफेस रीस्टार्ट केल्यामुळे कनेक्ट असलेल्या सर्वांचे कनेक्शन तुटते. [Peer] ब्लॉक wg0.conf मध्ये जोडा आणि त्यानंतर पीअर सेट रीलोड करा.

sudo bash -c 'wg syncconf wg0 <(wg-quick strip wg0)'

wg-quick strip कमांड wg-quick-only कीज (Address, DNS, PostUp) वगळून कॉन्फिगरेशन प्रिंट करते आणि syncconf कमांड चालू सत्रांना धक्का न लावता बदल लागू करते. हे फक्त पीअर्सना अपडेट करते: जर Address मध्ये बदल केला असेल, तर इंटरफेस पूर्णपणे down/up करणे आवश्यक असते. पीअर काढून टाकण्यासाठी sudo wg set wg0 peer <public key> remove वापरा आणि त्यानंतर फाईलमधून तो ब्लॉक काढून टाका, अन्यथा पुढच्या वेळी रीलोड करताना तो पुन्हा येईल.

अपयशाचे प्रकार आणि दिसणारे संदेश

हँडशेक पूर्ण होत नाही. wg show मध्ये पीअरची यादी दिसते पण 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] ब्लॉक मधील की ही सर्व्हरची पब्लिक की असावी, आणि उलटही तसेच. प्रायव्हेट की किंवा क्लायंटची स्वतःची पब्लिक की पेस्ट केल्यास नेमकी हीच समस्या येते. सर्व्हरवरील 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) रूलवर शून्य पॅकेट्स दिसत असल्यास, इग्रेस (egress) इंटरफेसचे नाव चुकीचे आहे; जर काउंटर वाढत असेल पण प्रतिसाद मिळत नसेल, तर फॉरवर्ड चेन पॉलिसी तपासा.

इंटरनेट चालते, पण नावे (names) रिझॉल्व्ह होत नाहीत. ping 1.1.1.1 यशस्वी होतो आणि curl https://example.com वरून Could not resolve host मिळते. DNS ओळ गहाळ आहे, किंवा त्यात असा रिझॉल्व्हर दिला आहे जो टनेलच्या आतून पोहोचण्यायोग्य नाही.

काही HTTPS साइट्स हँग होतात. SSH आणि पिंग व्यवस्थित चालतात; मोठी वेबपेजेस लोड होत नाहीत. हे पाथ MTU मुळे होते: टनेलमुळे ओव्हरहेड वाढतो आणि मार्गातील एखादा दुवा मोठे पॅकेट्स ड्रॉप करतो, ज्याचा ICMP संदेश परत येत नाही. क्लायंटच्या [Interface] मधील MTU कमी करा, आधी 1420, मग 1380, आणि शेवटी 1280 वापरून पहा. जर MTU कमी केल्याने समस्या सुटली पण वेग अजूनही कमी वाटत असेल, तर अंदाजे आकडे वापरणे थांबवा आणि बायसेक्शन आणि TCP MSS क्लॅम्पिंगद्वारे खरा पाथ 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 च्या वरच्या स्तरावर (layer) लागू करा.

बॅकअप, अपग्रेड आणि मोठ्या प्रमाणावरील ताण

/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 handshake पूर्ण का होत नाही?

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 चालवून तपासा.