SSD Nodes Learn
మార్గదర్శకాలు Matt Connorద్వారా Matt Connor · అప్‌డేట్ చేయబడింది 2026-07-25

VPSలో WireGuard VPN సెటప్ ఎలా

మీ Linux VPSలో WireGuard VPN స్వయంగా సెటప్ చేయడం నేర్చుకోండి. కీ జనరేషన్, wg0.conf, IP forwarding, NAT, AllowedIPs, DNS వివరాలతో హ్యాండ్‌షేక్ ఎర్రర్లను పరిష్కరించండి.

మీరు నిర్మించేది ఏమిటి

మీకు సొంతమైన సర్వర్‌లో ఒక 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 యూజర్‌స్పేస్ అమలు. ముందుగా sudo modprobe wireguard && echo ok తో తనిఖీ చేయండి.

కీలను లీక్ కాకుండా సృష్టించండి

అందరికీ చదవగలిగే /etc/wireguard/server.key అనేది వీఏపీఎన్ లేనట్లే. సాధారణ 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 ఐచ్ఛిక ప్రీ-షేర్డ్ కీని జోడిస్తుంది. ప్రతి కాన్ఫిగ్‌లో ఒక లైన్.

సర్వర్ ఇంటర్‌ఫేస్: /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 దాన్ని; ఫైల్ ప్రపంచానికి అందుబాటులో ఉందనే ప్రారంభ హెచ్చరిక వస్తే మీరు దాన్ని దాటేశారని అర్థం. Address అనేది టనల్ లోపల సర్వర్ చిరునామా, ఇది మొత్తం VPN సబ్‌నెట్ మాస్క్‌ను కలిగి ఉంటుంది. మీకు సాధారణంగా ఎక్కడా దొరకని పరిధిని ఎంచుకోండి — 192.168.1.0/24 మీ క్లయింట్‌లు ఉన్న సగం హోమ్ రూటర్‌లతో ఢీకొంటుంది, దాని వలన టనల్ స్థానిక రూట్‌తో నిశ్శబ్దంగా ఓడిపోతుంది.

సర్వర్ వైపు ఒక పీర్ AllowedIPs అనేది /32, ఆ క్లయింట్ కలిగి ఉన్న ఒకే ఒక టనల్ చిరునామా. ఇద్దరు పీర్‌లకు ఒకే అనుమతినిచ్చిన 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 రాయండి — ఇది ఇప్పటికే ఉన్న రూల్‌సెట్‌ను క్లియర్ చేస్తుంది, కాబట్టి 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 show

wg-quick ఇంటర్‌ఫేస్‌ను సృష్టిస్తుంది, చిరునామాలను జోడిస్తుంది, మరియు AllowedIPs నుండి ఉద్భవించిన రూట్‌లను ఇన్‌స్టాల్ చేస్తుంది. enable --now ముఖ్యమైన భాగం: మానవులిగా నడిపిన wg-quick up 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 ఇన్‌స్టాన్స్, లేదా అదే బాక్స్‌లో నడుస్తున్న నెస్టెడ్-వర్చువలైజేషన్ ల్యాబ్ VMలు, పీర్‌లకు చేరువవుతూ మిగతా అందరికీ అదృశ్యంగానే ఉంటాయి.

ఇన్‌బౌండ్‌లో ఇది ఒక యాక్సెస్-కంట్రోల్ జాబితా. ఒక పీర్ నుండి వచ్చిన డీక్రిప్ట్ చేయబడిన ప్యాకెట్, దాని సోర్స్ చిరునామా ఆ పీర్ యొక్క AllowedIPsలో లేకపోతే, అది డ్రాప్ చేయబడుతుంది. అందుకే సర్వర్ ల్యాప్‌టాప్ కోసం 10.8.0.2/32ను జాబితా చేస్తుంది: అక్కడ 0.0.0.0/0 ఎంట్రీ ఉంటే, ఆ క్లయింట్ టనెల్‌లోని ఏ చిరునామాను అయినా స్పూఫ్ చేయగలుగుతుంది.

PersistentKeepalive NAT వెనుక ఉన్న క్లయింట్‌ల కోసం. అటువంటి క్లయింట్‌లలో ప్యాకెట్‌లు ప్రవహించేంత వరకే రౌటర్ UDP మ్యాపింగ్‌ను ఓపెన్‌గా ఉంచుతుంది. అది గడువు ముగిసినప్పుడు, సర్వర్ క్లయింట్‌ను చేరుకోలేకపోతుంది. PersistentKeepalive = 25 ఆ మ్యాపింగ్‌ను ఓపెన్‌గా ఉంచుతుంది — దీన్ని క్లయింట్‌పై సెట్ చేయండి, పబ్లిక్ IP ఉన్న సర్వర్‌పై కాదు.

DNS, మరియు ఎవరూ గమనించని లీక్

AllowedIPs = 0.0.0.0/0 ఉండి no DNS = లైన్ లేకపోతే, క్లయింట్ స్థానిక నెట్‌వర్క్ నుండి నేర్చుకున్న రిజాల్వర్‌ను నిలుపుకుంటుంది — అంటే 192.168.1.1 వద్ద ఉన్న కేఫే రౌటర్. ఆ రూట్ డిఫాల్ట్ రూట్‌కన్నా ఎక్కువ నిర్దిష్టమైనది, కాబట్టి DNS ప్రశ్నలు స్థానిక లింక్ ద్వారా క్లియర్‌టెక్స్ట్‌లో బయటకు వెళ్తాయి, అదే సమయంలో మిగతా అన్నీ టనెల్ ద్వారా వెళ్తాయి. ట్రాఫిక్ ప్రైవేట్‌గా ఉంటుంది; పేర్ల జాబితా అలా కాదు.

రెండు సరైన ఎంపికలు ఉన్నాయి. DNS ను ఒక పబ్లిక్ రిజాల్వర్ (DNS = 9.9.9.9) వైపు పాయింట్ చేయండి, అప్పుడు ప్రశ్నలు టనెల్‌లో ప్రయాణించి మీ సర్వర్ నుండి నిష్క్రమిస్తాయి, అయినప్పటికీ ఆ రిజాల్వర్ వాటిని ఇంకా చూస్తుంది. లేదా unbound లేదా dnsmasq ను 10.8.0.1 కు బైండ్ చేసి రన్ చేయండి, 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 సెట్ చేయండి.

టన్నెల్‌ను డ్రాప్ చేయకుండా పీర్‌లను జోడించడం మరియు తొలగించడం

ఒక వినియోగదారుని జోడించడానికి ఇంటర్‌ఫేస్‌ను రీస్టార్ట్ చేస్తే కనెక్ట్ అయిన ప్రతి ఒక్కరూ డిస్కనెక్ట్ అవుతారు. [Peer] బ్లాక్‌ను wg0.confకి జోడించండి. తర్వాత పీర్ సెట్‌ను అదే స్థానంలో రీలోడ్ చేయండి.

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

wg-quick strip అనేది wg-quick మాత్రమే ఉండే కీలు (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 చిరునామా మరియు పోర్ట్ సరైనవేనా; కీలు క్రాస్ అయ్యాయా. క్లయింట్ [Peer] బ్లాక్‌లోని కీ తప్పనిసరిగా సర్వర్ పబ్లిక్ కీ అయి ఉండాలి, మరియు దీనికి విరుద్ధంగా కూడా — ప్రైవేట్ కీని, లేదా క్లయింట్ స్వంత పబ్లిక్ కీని అతికించడం సరిగ్గా ఈ లక్షణాన్ని ఇస్తుంది. సర్వర్‌పై sudo tcpdump -ni any udp port 51820 ప్యాకెట్‌లు అసలు వస్తున్నాయో లేదో చూపిస్తుంది. కర్నల్ మాడ్యూల్ డిఫాల్ట్‌గా ఏమీ లాగ్ చేయదు; మీరు డైనమిక్ డీబగ్ (echo module wireguard +p | sudo tee /sys/kernel/debug/dynamic_debug/control) చేతనం చేసిన తర్వాతనే WireGuard సందేశాలు dmesgలో కనిపిస్తాయి, మరియు అది ఆన్‌లో ఉన్నప్పుడు, కీ సరిపోలకపోవడం చెల్లని-MAC డ్రాప్‌గా కనిపిస్తుంది.

హ్యాండ్‌షేక్ పని చేస్తుంది, ఇంటర్నెట్ లేదు. 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తో కౌంటర్‌లను గమనించండి. మాస్క్యురేడ్ రూల్‌పై సున్నా ప్యాకెట్‌లు అంటే దాని ఎగ్రెస్ ఇంటర్‌ఫేస్ పేరు తప్పు; ప్రత్యుత్తరాలు లేకుండా కౌంటర్ పెరుగుతూ ఉండటం ఫార్వర్డ్ చైన్ పాలసీని సూచిస్తుంది.

ఇంటర్నెట్ పని చేస్తుంది, పేర్లు పని చేయవు. ping 1.1.1.1 విజయవంతమవుతుంది మరియు curl https://example.com Could not resolve hostని అందిస్తుంది. DNS లైన్ లేదు, లేదా అది టన్నెల్ లోపల నుండి చేరుకోలేని రిజాల్వర్‌ను పేర్కొంటుంది.

కొన్ని HTTPS సైట్‌లు హ్యాంగ్ అవుతాయి. SSH మరియు పింగ్ సరే; పెద్ద పేజీలు నిలిచిపోతాయి. అది పాత్ MTU: టన్నెల్ ఓవర్‌హెడ్‌ను జోడిస్తుంది, మరియు మధ్యలోని ఏదో ఒక లింక్ పెద్ద ప్యాకెట్‌లను ICMP సందేశం వచ్చే అవకాశం లేకుండా డ్రాప్ చేస్తుంది. క్లయింట్ [Interface]పై MTUని తగ్గించండి — 1420, తర్వాత 1380, తర్వాత 1280 ప్రయత్నించండి.

ఇంటర్‌ఫేస్ ప్రారంభించడానికి నిరాకరిస్తుంది. Address already in use అంటే మరొక ప్రాసెస్ UDP 51820ని పట్టుకుని ఉంది. విఫలమైన up తర్వాత Cannot find device wg0 సాధారణంగా అంటే కాన్ఫిగ్ తిరస్కరించబడింది; journalctl -u wg-quick@wg0 -n 50 చదవండి.

Streisand లేదా OpenVPN నుండి వలస పంపడం

Streisand నిర్వహణ లేదు, దాని రిపోజిటరీ ఆర్కైవ్ చేయబడింది. పరిత్యక్త ఆటోమేషన్‌పై VPN నడపడం అనేది మెల్లగా తీవ్రమయ్యే భద్రతా సమస్య. ఇన్-ప్లేస్ అప్‌గ్రేడ్ లేదు. OpenVPN యొక్క PKI మార్పిడి చేయబడదు: WireGuardలో సర్టిఫికేట్‌లు లేవు, CA లేదు, గడువు అయిపోవడం అనేది లేదు, కాబట్టి ప్రతి క్లయింట్‌కు కొత్త కీ జత లభిస్తుంది.

సమాంతరంగా వలస పంపండి — ఒకే సిస్టమ్‌లో UDP 51820 పై WireGuard, 1194 పై OpenVPN సహజీవనం చేస్తాయి. wg0 ని ప్రారంభించండి, క్లయింట్‌లను ఒక్కమారు ఒకటి మార్చండి, తర్వాత పాత సర్వీస్‌ను ఆపండి. OpenVPN యొక్క యూజర్‌నేమ్/పాస్‌వర్డ్ మరియు రద్దు చేసే మోడల్ బదిలీ కాదు; మీకు ఖాతాలు లేదా ఆడిట్ ట్రయల్ అవసరమైతే, దానిని WireGuard పై అమలు చేయండి.

బ్యాకప్‌లు, అప్‌గ్రేడ్‌లు, మరియు పెద్ద ఎత్తున ఎదురయ్యే సవాళ్లు

/etc/wireguard అనేది సర్వర్. దాన్ని బ్యాకప్ చేయండి (sudo tar czf wg-backup.tgz -C /etc wireguard, mode 600, సర్వర్ పెట్టె వెలుపల ఉంచండి) మరియు మీరు కొత్త VPSపై నిమిషాల్లో పునర్నిర్మించవచ్చు. సర్వర్ యొక్క ప్రైవేట్ కీని కోల్పోతే ప్రతి క్లయింట్ కాన్ఫిగరేషన్‌ను తిరిగి జారీ చేయాలి, ఎందుకంటే క్లయింట్‌లు సర్వర్ యొక్క పబ్లిక్ కీని పిన్ చేస్తాయి. అప్‌గ్రేడ్‌లు ఒక సాధారణ apt upgrade మరియు కర్నల్ అప్‌డేట్‌ల కోసం రీబూట్, మరియు మీరు దాన్ని ప్రారంభించి ఉంటే wg-quick@wg0 స్వయంగా తిరిగి వస్తుంది.

ప్రతి పీర్ యొక్క స్టేట్ చిన్నది మరియు క్రిప్టో కర్నల్‌లో నడుస్తుంది, కాబట్టి పరిమితి ఈ కాన్ఫిగరేషన్‌లో ఏదైనా కాకుండా మీ VPS యొక్క CPU మరియు బ్యాండ్‌విడ్త్ అలవెన్స్ — ప్రచురించబడిన సంఖ్యను నమ్మకందానికి బదులుగా టనెల్ అంతటా iperf3తో దాన్ని కొలవండి. పెద్ద ఎత్తున సవాలు విసురుతుంది ఆపరేషన్లు. ప్రతి పీర్‌కు ఒక ప్రత్యేక టనెల్ IP అవసరం, మరియు అరవై [Peer] బ్లాక్‌లను మాన్యువల్‌గా సవరించడం వల్ల డూప్లికేట్ AllowedIPs దొంగచేష్టగా చేరుకుంటాయి: కాన్ఫిగరేషన్‌లను స్క్రిప్ట్ నుండి ఉత్పత్తి చేయండి. ఒక సర్వర్ అనేది ఒక UDP ఎండ్‌పాయింట్ మరియు ఒక వైఫల్య బిందువు, మరియు WireGuard‌కు క్లస్టరింగ్ లేదు: రిడండెన్సీ అంటే స్వంత కీలతో కూడిన రెండవ సర్వర్. కీ రొటేషన్ మాన్యువల్‌గానే ఉంటుంది, కాబట్టి ఎవరు ఏ కీని కలిగి ఉన్నారు మరియు మీరు దాన్ని ఎలా రద్దు చేస్తారో రాసి పెట్టండి.

ఇవన్నీ మీరు నియంత్రించే ఒక Linux పెట్టె అవసరం — ఒక పబ్లిక్ IP, మీరు మాడ్యూల్‌ను లోడ్ చేయగలిగే కర్నల్, మరియు మీరు మొత్తంగా సొంతం చేసుకున్న ఫైర్‌వాల్.

FAQ

WireGuard హ్యాండ్‌షేక్ ఎందుకు ఎప్పటికీ పూర్తి కాదు?

wg show అనేది latest handshake లేని ఒక పీర్‌ను జాబితా చేయడం అంటే ప్యాకెట్‌లు రావడం లేదా ఆమోదించబడడం లేదని అర్థం. VPS ఫైర్‌వాల్ మరియు మీ ప్రొవైడర్ యొక్క ప్రత్యేక నెట్‌వర్క్ ఫైర్‌వాల్ రెండింటిపైనా UDP 51820 ను తనిఖీ చేయండి, Endpoint హోస్ట్ మరియు పోర్ట్‌ను నిర్ధారించుకోండి, తర్వాత కీలు క్రాస్ అవ్వలేదని తనిఖీ చేయండి — క్లయింట్ యొక్క [Peer] బ్లాక్ సర్వర్ యొక్క public కీని కలిగి ఉండాలి. ప్యాకెట్‌లు అసలు వస్తున్నాయో లేదో సర్వర్‌లో sudo tcpdump -ni any udp port 51820 చూపిస్తుంది; మీరు డైనమిక్ డీబగ్ (echo module wireguard +p | sudo tee /sys/kernel/debug/dynamic_debug/control) ని ప్రారంభించిన తర్వాత మాత్రమే dmesg WireGuard హ్యాండ్‌షేక్ వైఫల్యాలను నివేదిస్తుంది, మరియు అప్పుడు కీ అసమానత ఒక చెల్లని MAC డ్రాప్‌గా కనిపిస్తుంది.

టన్నెల్ అనుసంధానమవుతోంది కానీ నాకు ఇంటర్నెట్ లేదు. ఏమి లోపిస్తోంది?

ping 10.8.0.1 పనిచేస్తున్నప్పుడు ping 1.1.1.1 టైమౌట్ అవుతుంది అనేది ఫార్వర్డింగ్ లేదా NAT వైపు సూచిస్తుంది. sysctl net.ipv4.ip_forward విలువ 1 అని నిర్ధారించుకోండి మరియు అది /etc/sysctl.d/ లో అమర్చబడిందని నిర్ధారించుకోండి, రీబూట్ సమయంలో ముగిసిపోయే sysctl -w తో మాత్రమే కాదు. తర్వాత ip route show default నుండి మీ నిజమైన ఎగ్రెస్ ఇంటర్‌ఫేస్ పేరుతో మాస్క్వెరేడ్ రూల్‌ను తనిఖీ చేయండి — enp1s0 లేదా ens3, అరుదుగా eth0.

నా క్లయింట్ కాన్ఫిగ్‌లో 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 ను అమలు చేయండి.

#wireguard#vpn#linux-networking#nftables#systemd#self-hosting