VPSలో WireGuard VPNను స్వయంగా ఎలా ఏర్పాటు చేయాలి
Linux VPSలో WireGuard VPN ఏర్పాటు కోసం key generation, wg0.conf, IP forwarding, NAT, AllowedIPs, DNS వివరాలు తెలుసుకోండి. handshake విఫలతల పరిష్కారాలు కూడా ఉన్నాయి.
మీరు నిర్మించేది
మీరు స్వంతంగా నిర్వహించే సర్వర్పై WireGuard VPN సాధారణంగా సుమారు నలభై లైన్ల configuration తో నడుస్తుంది: ఒక key pair, ఒక interface file, ఒక sysctl setting, ఒక NAT rule, ఒక firewall అనుమతి. Installation చాలా సులభం. అందువల్ల ఈ guide లో ఎక్కువ భాగం సాధారణంగా విఫలమయ్యే అంశాలు, key permissions, AllowedIPs, forwarding మరియు DNS గురించి ఉంటుంది.
WireGuard kernel లో పనిచేసే Layer 3 tunnel. ఇది Linux 5.6 నుంచి mainline లో ఉంది. అందువల్ల Ubuntu 24.04 మరియు Debian 13 లో external module అవసరం లేకుండానే ఇది అందుబాటులో ఉంటుంది. Cipher negotiation, certificate authority లేదా username/password దశ ఏదీ ఉండదు. ఒక peer అంటే ఒక public key మరియు ఆ key ఉపయోగించగల IP addresses. ఒక packet యొక్క MAC check విఫలమైతే, దానికి ఎలాంటి reply ఇవ్వకుండా దాన్ని drop చేస్తుంది. అందువల్ల ఆ port scans కు స్పందించదు. అయితే దీనికి మరో వైపు కూడా ఉంది: auth server ఉండదు. కాబట్టి access తొలగించాలంటే ఆ box లోని peer ను delete చేయాలి.
ముందుగా virtualisation ను తనిఖీ చేయండి
WireGuard కు module ను load చేయగల kernel అవసరం. KVM VPS లో ఇది సాధారణంగా అదనపు మార్పులు లేకుండా పనిచేస్తుంది. Host kernel ను భాగస్వామ్యం చేసే container virtualisation, OpenVZ లేదా LXC పరిసరాల్లో మొదటి command RTNETLINK answers: Operation not supported తో విఫలమవుతుంది. అప్పుడు ప్రత్యామ్నాయంగా wireguard-go userspace implementation ను ఉపయోగించాలి. ముందుగా sudo modprobe wireguard && echo ok తో తనిఖీ చేయండి.
కీలను బయటపడకుండా రూపొందించండి
అందరికీ చదవగలిగేలా ఉన్న /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.keyClient key 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 అని ఉంచండి; ఫైల్ అందరికీ చదవగలిగే స్థితిలో ఉందని startup warning వస్తే, ఈ దశను దాటవేసినట్టే. Address అనేది tunnel లో సర్వర్కు సంబంధించిన address. ఇందులో మొత్తం VPN subnet యొక్క mask ఉంటుంది. ఇతర నెట్వర్క్లలో సాధారణంగా కనిపించని range ను ఎంచుకోండి. 192.168.1.0/24ను ఎంచుకుంటే, అది మీ clients ఉన్న ఇళ్లలోని routers లో సగానికి పైగా ఉపయోగించే range తో ఢీకొనవచ్చు. అప్పుడు tunnel స్థానిక route చేత మౌనంగా ఓడిపోతుంది.
server వైపు peer యొక్క AllowedIPs అనేది /32. ఇది ఆ client కు కేటాయించిన ఏకైక tunnel address. రెండు peers కు ఒకే allowed IP ఇస్తే, చివరగా configure చేసిన peer కు అది మారుతుంది. మొదటి peer కు traffic అందడం ఆగిపోతుంది. ఎక్కడా error కూడా కనిపించదు. SaveConfigను unset గా ఉంచండి. లేకపోతే wg-quick down live state ఆధారంగా ఈ ఫైల్ను మళ్లీ రాస్తుంది.
బాక్స్ను routerగా మార్చండి
Linux server తనకు ఉద్దేశించని packets ను తొలగిస్తుంది. Forwarding మరియు source NAT రెండూ defaultగా అందుబాటులో ఉండవు.
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 తదుపరి reboot వరకు పనిచేస్తుంది. ఆ తర్వాత ఎలాంటి సందేశం లేకుండా పనిచేయడం ఆపుతుంది. NATకు internetను చేరుకునే NIC అయిన egress interface అవసరం; wg0 కాదు. eth0 అని ఊహించవద్దు. మీ interface పేరును ip route show default నుంచి తీసుకోండి, ఎందుకంటే ప్రస్తుత images enp1s0 లేదా ens3 వంటి పేర్లను ఉపయోగిస్తాయి.
Firewall: port మరియు forward మార్గం
ఒక 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
}
}దీన్ని sudo systemctl enable --now nftables తో వర్తింపజేయండి. రెండవ SSH session ను తెరిచి ఉంచండి: policy drop తో పాటు SSH rule లోని ఒక typo కూడా మీ స్వంత server నుంచి మిమ్మల్ని బయటకు పంపవచ్చు. forward chain ఏమి అనుమతించదో గమనించండి: wg0 నుంచి wg0 కు. Peers internet ను చేరగలవు, కానీ ఒకదానిని మరొకటి చేరలేవు. peer-to-peer VPN కోసం iifname "wg0" oifname "wg0" accept జోడించండి. Serverపైనే peer ఏ వనరులను తాకగలదో కూడా ఇదే chain నియంత్రిస్తుంది. ఈ server tmux లో Claude Code నడిచే remote development box గా కూడా ఉపయోగించినప్పుడు ఇది ముఖ్యమైనది. ఆ భాగాన్ని public గా అందుబాటులో ఉంచకపోవడం మంచిది.
ufw ఉన్న serverలో: ufw allow 51820/udp, /etc/default/ufw లో DEFAULT_FORWARD_POLICY="ACCEPT", మరియు /etc/ufw/before.rules పైభాగంలో POSTROUTING MASQUERADE rule అయిన *nat.
systemd కింద దీన్ని ప్రారంభించండి
sudo systemctl enable --now wg-quick@wg0
sudo wg showwg-quick interface ను సృష్టించి, addresses ను జోడించి, AllowedIPs నుంచి పొందిన routes ను install చేస్తుంది. enable --now ముఖ్యమైన భాగం. చేతితో అమలు చేసిన wg-quick up wg0 తదుపరి reboot తర్వాత తొలగిపోతుంది. Kernel upgrades వల్ల కూడా reboots అవసరం కావచ్చు. అలాంటి reboot తర్వాత తిరిగి ప్రారంభం కాని unit గురించి ఎవరైనా connect చేయడానికి ప్రయత్నించే వరకు ఎలాంటి సమాచారం అందదు. అందువల్ల wg-quick@wg0 పై ఉన్న OnFailure= drop-in ను మీ స్వంత ntfy server కు పంపేలా అమర్చడం ఉత్తమం. అప్పుడు lock-out అయిన user ద్వారా కాకుండా, మీ phone లోనే దీనిని వెంటనే తెలుసుకోవచ్చు.
క్లయెంట్ కాన్ఫిగరేషన్ మరియు అందరూ తప్పుగా అమర్చే setting
[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 విషయంలో ఎక్కువ గందరగోళం ఏర్పడుతుంది.
బయటకు వెళ్లే traffic కోసం ఇది routing table. ఒక packet destination, peer యొక్క AllowedIPs కు సరిపోతే, అది encrypt చేయబడి ఆ peerకు పంపబడుతుంది. 0.0.0.0/0, ::/0 ద్వారా మొత్తం traffic tunnel లోకి వెళ్తుంది. ఇది full tunnel, అంటే server default route గా ఉంటుంది. Split tunnel లో జాబితా చిన్నదిగా ఉంటుంది: AllowedIPs = 10.8.0.0/24, 10.20.0.0/16 VPN traffic తో పాటు server వెనుక ఉన్న ఒక private network ను కలిగి ఉంటుంది. మిగతా traffic అంతా తన local route నే ఉపయోగిస్తుంది. ఈ చిన్న జాబితా వల్ల సేవలను public internet నుంచి పూర్తిగా వేరుగా ఉంచవచ్చు. Tunnel address కు bind చేసిన VPS పై private Nextcloud instance, లేదా అదే machine పై నడుస్తున్న nested-virtualisation lab VMs, peers కు అందుబాటులో ఉంటాయి, కానీ ఇతరులకు కనిపించవు.
లోపలికి వచ్చే traffic కోసం ఇది access-control list. Peer నుంచి decrypt చేసిన packet యొక్క source address, ఆ peer యొక్క AllowedIPs లో లేకపోతే, ఆ packet drop అవుతుంది. అందుకే server లో laptop కోసం 10.8.0.2/32 ను నమోదు చేస్తారు. అక్కడ 0.0.0.0/0 వంటి entry ఉంటే, ఆ client tunnel లోని ఏ addressనైనా spoof చేయగలదు.
PersistentKeepalive అనేది NAT వెనుక ఉన్న clients కోసం ఉపయోగించాలి. Router UDP mapping ను packets ప్రవహిస్తున్నప్పుడు మాత్రమే open గా ఉంచుతుంది. అది expire అయిన తర్వాత server clientను చేరుకోలేడు. PersistentKeepalive = 25 mapping ను open గా ఉంచుతుంది. దీన్ని client పై set చేయాలి; public IP ఉన్న server పై కాదు.
DNS, ఎవరూ గమనించని లీక్
AllowedIPs = 0.0.0.0/0 ఉన్నా no DNS = line లేకపోతే, client local network నుంచి, అంటే 192.168.1.1 వద్ద ఉన్న café router నుంచి నేర్చుకున్న resolverనే ఉపయోగిస్తుంది. ఆ route default route కంటే మరింత specificగా ఉంటుంది. అందువల్ల DNS queries local link ద్వారా cleartextలో బయటకు వెళ్తాయి, మిగతా traffic అంతా tunnel ద్వారా వెళ్తుంది. Traffic privateగా ఉంటుంది; పేర్ల జాబితా మాత్రం privateగా ఉండదు.
రెండు సరైన ఎంపికలు ఉన్నాయి. DNS ను public resolver (DNS = 9.9.9.9) వైపు point చేయండి. అప్పుడు queries tunnel ద్వారా వెళ్లి మీ server నుంచి బయటకు వస్తాయి. అయితే ఆ resolver వాటిని ఇప్పటికీ చూడగలదు. లేదా unbound లేదా dnsmasq ను 10.8.0.1 కు bind చేసి, DNS = 10.8.0.1 ను set చేసి, input chain కు udp dport 53 iifname "wg0" accept ను జోడించండి. ఆ line ను set చేసి resolver గురించి మర్చిపోవచ్చు. అప్పుడు ఏదీ resolve కాదు.
Linux clientsలో wg-quick, DNS ను resolvconf ద్వారా వర్తింపజేస్తుంది. అది లేకపోతే resolvconf: command not found లభిస్తుంది. openresolv ను install చేయండి లేదా systemd-resolved clientలో PostUp = resolvectl dns %i 10.8.0.1 ను set చేయండి.
టన్నెల్ను నిలిపివేయకుండా peers ను జోడించడం మరియు తొలగించడం
ఒక user ను జోడించడానికి interface ను restart చేస్తే, ప్రస్తుతం connect అయి ఉన్న అందరి connection లు తెగిపోతాయి. [Peer] block ను wg0.conf కు జోడించి, peer set ను అక్కడికక్కడే reload చేయండి.
sudo bash -c 'wg syncconf wg0 <(wg-quick strip wg0)'wg-quick strip, wg-quick-only keys (Address, DNS, PostUp) లేకుండా configuration ను output చేస్తుంది. syncconf, live sessions కొనసాగుతూనే మార్పులను వర్తింపజేస్తుంది. ఇది peers ను మాత్రమే update చేస్తుంది. మారిన Address కోసం పూర్తి down/up ఇంకా అవసరం. sudo wg set wg0 peer <public key> remove తో revoke చేసి, తరువాత file నుంచి ఆ block ను తొలగించండి. లేకపోతే తదుపరి reload సమయంలో అది మళ్లీ తిరిగి వస్తుంది.
లోపాల పరిస్థితులు: మీరు చూసే strings
Handshake పూర్తికాదు. wg show లో peer కనిపిస్తుంది, కానీ latest handshake ఉండదు. Client logs ఇలా ఉంటాయి:
Handshake for peer 1 (10.0.0.10:51820) did not complete after 5 seconds, retrying (try 2)ఏదీ అందడం లేదు లేదా ఏదీ అంగీకరించబడటం లేదు. క్రమంగా వీటిని తనిఖీ చేయండి: VPS firewall మరియు మీ provider network firewallలో UDP 51820 తెరిచి ఉందా? చాలా panelsలో ఇవి వేర్వేరు నియంత్రణలు. Endpoint address మరియు port సరిగ్గా ఉన్నాయా? Keys పరస్పరం తప్పుగా ఉంచారా? Clientలోని [Peer] blockలో server public key ఉండాలి. దానికి బదులుగా private key లేదా client సొంత public key paste చేస్తే ఇదే లక్షణం కనిపిస్తుంది. ప్యాకెట్లు అసలు వస్తున్నాయా లేదా తెలుసుకోవడానికి serverలో sudo tcpdump -ni any udp port 51820 చూడండి. Kernel module defaultగా ఏదీ log చేయదు. Dynamic debug (echo module wireguard +p | sudo tee /sys/kernel/debug/dynamic_debug/control) enable చేసిన తర్వాత మాత్రమే WireGuard messages dmesg లో కనిపిస్తాయి. అది enable చేసి ఉంటే key mismatch invalid-MAC dropగా కనిపిస్తుంది.
Handshake పనిచేస్తుంది, కానీ internet లేదు. ping 10.8.0.1 విజయవంతమవుతుంది, కానీ ping 1.1.1.1 timeout అవుతుంది: forwarding లేదా NAT లేదు. sysctl net.ipv4.ip_forward లో 1 ఉందో తనిఖీ చేయండి. తరువాత client ping చేస్తున్నప్పుడు sudo nft list ruleset లేదా sudo iptables -t nat -L POSTROUTING -n -v తో counters ను monitor చేయండి. Masquerade ruleపై packets 0గా ఉంటే దాని egress interface పేరు తప్పుగా ఉంది. Replies లేకుండా counter పెరుగుతుంటే forward chain policy కారణమై ఉండవచ్చు.
Internet పనిచేస్తుంది, కానీ పేర్లు పనిచేయవు. ping 1.1.1.1 విజయవంతమవుతుంది, కానీ curl https://example.com Could not resolve host ను తిరిగి ఇస్తుంది. DNS line లేదు లేదా tunnel లోపల నుంచి చేరలేని resolverను అది సూచిస్తోంది.
కొన్ని HTTPS sites hang అవుతాయి. SSH మరియు ping సరిగ్గా పనిచేస్తాయి, కానీ పెద్ద pages నిలిచిపోతాయి. ఇది path MTU సమస్య. Tunnel అదనపు overheadను జోడిస్తుంది. మధ్యలోని ఏదైనా link oversized packetsను ICMP message తిరిగి పంపకుండా drop చేయవచ్చు. Client [Interface] లోని MTU విలువను తగ్గించండి. 1420 ప్రయత్నించండి, తరువాత 1380, ఆపై 1280 ప్రయత్నించండి. MTU తగ్గించడం వల్ల stalls పరిష్కారమైనా throughput ఇంకా తక్కువగా ఉంటే round numbersను ఊహిస్తూ కొనసాగించవద్దు. bisection ద్వారా నిజమైన path MTU ను కనుగొని TCP MSS ను clamp చేయడం అనే విధానాన్ని అనుసరించండి. ఇది సమస్యకు tunnelతో సంబంధం లేని కారణాలను కూడా తొలగిస్తుంది.
Interface ప్రారంభం కావడానికి నిరాకరిస్తుంది. Address already in use అంటే మరో process UDP 51820ను ఉపయోగిస్తోంది. విఫలమైన up తర్వాత Cannot find device wg0 కనిపిస్తే సాధారణంగా config reject అయిందని అర్థం. journalctl -u wg-quick@wg0 -n 50 చదవండి.
Streisand లేదా OpenVPN నుండి మార్పు
Streisand కు నిర్వహణ నిలిచిపోయింది మరియు దాని repository archive చేయబడింది. నిర్వహణ లేని automation పై VPN నడపడం వల్ల భద్రతా సమస్య క్రమంగా పెరుగుతుంది. In-place upgrade అందుబాటులో లేదు. OpenVPN యొక్క PKI ని మార్చి ఉపయోగించలేరు. WireGuard లో certificates, CA లేదా expiry ఉండవు. అందువల్ల ప్రతి client కు కొత్త key pair ఇవ్వాలి.
సమాంతరంగా migrate చేయండి. ఒకే server పై UDP 51820 లో WireGuard, 1194 లో OpenVPN కలిసి నడవగలవు. wg0 ను సిద్ధం చేసి, clients ను ఒక్కొక్కటిగా మార్చండి. తరువాత పాత service ను ఆపండి. OpenVPN లోని username/password మరియు revocation model ఇక్కడికి మారవు. Accounts లేదా audit trail అవసరమైతే, వాటిని WireGuard పైన ప్రత్యేక layer గా అమలు చేయండి.
పెద్ద స్థాయిలో బ్యాకప్లు, అప్గ్రేడ్లు మరియు ఒత్తిడి కలిగించే అంశాలు
/etc/wireguard సర్వర్. దీనికి బ్యాకప్ తీసుకోండి (sudo tar czf wg-backup.tgz -C /etc wireguard, mode 600, server వెలుపల భద్రపరచాలి). అప్పుడు కొత్త VPS పై దీన్ని నిమిషాల్లో పునర్నిర్మించవచ్చు. సర్వర్ private key ను కోల్పోతే ప్రతి client config ను మళ్లీ జారీ చేయాలి, ఎందుకంటే clients సర్వర్ public key ను pin చేస్తాయి. Upgrades సాధారణ apt upgrade తో పాటు kernel updates కోసం reboot చేయడం మాత్రమే. మీరు wg-quick@wg0 ను enable చేసి ఉంటే, అది స్వయంగా తిరిగి అందుబాటులోకి వస్తుంది.
ప్రతి peer కు అవసరమైన state తక్కువగా ఉంటుంది. Crypto kernel లోనే అమలవుతుంది. అందువల్ల పరిమితి ఈ config లోని అంశాల వల్ల కాకుండా, మీ VPS యొక్క CPU మరియు bandwidth allowance వల్ల ఏర్పడుతుంది. ప్రచురించిన సంఖ్యను నమ్మకుండా tunnel ద్వారా iperf3 ఉపయోగించి దీన్ని కొలవండి. పెద్ద స్థాయిలో operations నే ఒత్తిడికి గురిచేస్తాయి. ప్రతి peer కు ప్రత్యేక tunnel IP అవసరం. అరవై [Peer] blocks ను చేతితో సవరించడం వల్ల duplicate AllowedIPs సులభంగా ఏర్పడతాయి. అందువల్ల configs ను script ద్వారా generate చేయండి. ఒక server అంటే ఒక UDP endpoint మరియు ఒక failure point. WireGuard కు clustering లేదు. Redundancy కోసం ప్రత్యేక keys కలిగిన రెండో server అవసరం. Key rotation మాన్యువల్గానే ఉంటుంది. కాబట్టి ఏ key ఎవరి వద్ద ఉందో, దాన్ని ఎలా revoke చేయాలో రాసి ఉంచండి. ఈ bookkeeping ఒక text file కు మించి పెరిగినప్పుడు, సాధారణ పరిష్కారం అదే kernel data plane పై control plane ను అమర్చడం. self-hosted NetBird server మీరు చేతితో చేస్తున్న address allocation, peer distribution మరియు setup keys నిర్వహణను చేపడుతుంది. Control plane ను మీరే నడపడం మరో box ను నిర్వహించడంలా అనిపిస్తే, Tailscale మీ కోసం ఒకదాన్ని host చేస్తుంది. దాని free plan unlimited devices తో ఆరు users ను అనుమతిస్తుంది. వ్యక్తిగత fleets లో చాలావరకు దీని కోసం చెల్లించాల్సిన అవసరం ఉండదు. ఆ పరిమితిని దాటిన తర్వాత ఖర్చు machines కంటే people పై ఆధారపడి ఉంటుంది. అందువల్ల ఇల్లు లేదా చిన్న team వాస్తవంగా ఎంత చెల్లిస్తుంది అనేది, మీరు wg0.conf లోకి చేతితో చేర్చాల్సిన peers సంఖ్యపై కాకుండా, login కలిగిన humans సంఖ్యపై ఆధారపడి ఉంటుంది. ఈ సందర్భంలో split-tunnel AllowedIPs bookkeeping ను subnet router నుంచి మీ private ranges ను advertise చేయడం ద్వారా నిర్వహించవచ్చు. ఒక VPS నుంచి దీన్ని ఒక్కసారి announce చేసి, ప్రతి client file లో paste చేయకుండా కేంద్రంగా approve చేయవచ్చు. ఈ మార్పిడి విలువైనదా కాదా అనేది hosted control plane వాస్తవంగా ఏ వనరులను చేరుకోగలదో నిర్ణయిస్తుంది. మీ traffic ను encrypt చేసే keys దాని వద్ద ఎప్పుడూ ఉండవు, కానీ ఏ peers ఒకరి గురించి మరొకరు తెలుసుకోవాలో అది నిర్ణయిస్తుంది.
ఇవన్నీ మీరు నియంత్రించే Linux box, public IP, module ను load చేయగల kernel మరియు ప్రారంభం నుంచి ముగింపు వరకు మీ ఆధీనంలో ఉండే firewall అవసరం.
FAQ
WireGuard handshake ఎందుకు ఎప్పటికీ పూర్తికాదు?
wg show లో latest handshake లేకుండా peer ను చూపిస్తే, packets చేరడం లేదని లేదా అంగీకరించబడటం లేదని అర్థం. VPS firewallలో మరియు మీ provider యొక్క ప్రత్యేక network firewallలో UDP 51820ను తనిఖీ చేయండి. Endpoint host మరియు port సరైనవని నిర్ధారించండి. తరువాత keys పరస్పరం తప్పుగా మారలేదని తనిఖీ చేయండి. Client యొక్క [Peer] blockలో server యొక్క public key ఉండాలి. Serverలోని sudo tcpdump -ni any udp port 51820 packets అసలు చేరుతున్నాయా లేదా చూపిస్తుంది. Dynamic debug (echo module wireguard +p | sudo tee /sys/kernel/debug/dynamic_debug/control) enable చేసిన తరువాత WireGuard handshake failures మాత్రమే dmesg చూపిస్తుంది. అప్పుడు key mismatch invalid-MAC dropగా కనిపిస్తుంది.
Tunnel కనెక్ట్ అవుతుంది, కానీ internet లేదు. ఏమి లేదు?
ping 10.8.0.1 పనిచేస్తూ, ping 1.1.1.1 timeout అవుతుంటే forwarding లేదా NAT సమస్య ఉన్నట్లు తెలుస్తుంది. sysctl net.ipv4.ip_forward విలువ 1 గా ఉందని నిర్ధారించండి. అది కేవలం reboot సమయంలో తొలగిపోయే sysctl -w ద్వారా కాకుండా /etc/sysctl.d/ లో సెట్ అయి ఉండాలి. తరువాత masquerade rule, ip route show default, enp1s0 లేదా అరుదుగా ens3 నుండి నిజమైన egress interface పేరును తీసుకుంటుందో తనిఖీ చేయండి. eth0 కూడా తనిఖీ చేయండి.
నా client configలో DNS = line అవసరమా?
Full tunnel మరియు DNS = line లేకపోతే, client స్థానిక network నుంచి నేర్చుకున్న resolverనే ఉపయోగిస్తుంది. ఆ queries స్థానిక linkపై cleartextలో బయటకు వెళ్తాయి. మిగిలిన traffic tunnel ద్వారా వెళ్తుంది. DNS ను public resolver వైపు చూపించండి. లేదా unbound/dnsmasq ను 10.8.0.1 కు bind చేసి నడపండి. Input chainలో udp dport 53 iifname "wg0" ను open చేయండి.
AllowedIPs నిజంగా ఏమి నియంత్రిస్తుంది?
ఇది రెండు పనులు చేస్తుంది. Outbound దిశలో ఇది routing tableగా పనిచేస్తుంది. Peer యొక్క AllowedIPs కు సరిపోలే traffic encrypt అయి ఆ peerకు పంపబడుతుంది. Inbound దిశలో ఇది access-control listగా పనిచేస్తుంది. Decrypt చేసిన packet source ఆ peer యొక్క AllowedIPs పరిధి వెలుపల ఉంటే drop అవుతుంది. అందుకే server వైపు ప్రతి clientకు ఒక /32 ను పేర్కొంటారు. Client వైపు మాత్రం 0.0.0.0/0 ను పేర్కొనవచ్చు.
WireGuard ఏ VPSపైనైనా నడుస్తుందా?
KVM VPSలో in-kernel moduleతో అదనపు setup లేకుండానే పనిచేస్తుంది. OpenVZ లేదా LXC వంటి host kernelను share చేసే container virtualisationలో modprobe wireguard, Operation not supported తో fail అవుతుంది. అప్పుడు fallbackగా wireguard-go userspace implementationను ఉపయోగించాలి. మరేదైనా చేసే ముందు sudo modprobe wireguard && echo ok ను run చేయండి.