SSD Nodes Learn Hosting plans →
கல்வி வழிகாட்டிகள் Matt Connorஆல் Matt Connor · புதுப்பிக்கப்பட்டது 2026-08-30

சொந்தமாக WireGuard VPN நிறுவுவது எப்படி?

Linux VPS-ல் WireGuard VPN அமைப்பதற்கான முழுமையான வழிகாட்டி. wg0.conf கட்டமைப்பு, IP forwarding, NAT விதிகள் மற்றும் பொதுவான handshake பிழைகளைத் தவிர்க்கும் முறைகளை இதில் அறியலாம்.

நீங்கள் உருவாக்குவது

நீங்கள் சொந்தமாக வைத்திருக்கும் server-ல் WireGuard VPN அமைப்பது என்பது சுமார் நாற்பது வரிகள் கொண்ட configuration ஆகும்: ஒரு key pair, ஒரு interface file, ஒரு sysctl, ஒரு NAT rule, மற்றும் ஒரு firewall hole. இதன் நிறுவல் மிகவும் எளிதானது என்பதால், இந்த வழிகாட்டியின் பெரும்பகுதி எவை செயலிழக்கக்கூடும், 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-ல் தோல்வியுற்றால், அது எந்த பதிலும் இன்றி நிராகரிக்கப்படும்; எனவே, port scan செய்யப்படும்போது இந்த port எந்த பதிலையும் தராது. இதன் மறுபக்கம்: இதில் auth server கிடையாது, எனவே ஒருவருக்கான அணுகலை நீக்க வேண்டுமெனில், அந்த server-ல் உள்ள peer-ஐ நீக்க வேண்டும்.

முதலில் virtualisation-ஐ சரிபார்க்கவும்

WireGuard இயங்குவதற்கு kernel module-ஐ load செய்யும் வசதி தேவை. KVM VPS-ல் இது இயல்பாகவே செயல்படும். Host kernel-ஐப் பகிர்ந்து கொள்ளும் OpenVZ, LXC போன்ற container virtualisation-களில், முதல் கட்டளை RTNETLINK answers: Operation not supported பிழையுடன் தோல்வியடையும். அத்தகைய சூழலில், 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 ஜோடியை உருவாக்கவும். 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/32

chmod 600 அதைச் செய்யவும்; கோப்பு அனைவருக்கும் அணுகக்கூடியதாக (world accessible) உள்ளது என்ற தொடக்க எச்சரிக்கை, நீங்கள் அந்தப் படியைத் தவிர்த்துவிட்டீர்கள் என்பதைக் குறிக்கிறது. Address என்பது டன்னலுக்குள் இருக்கும் சர்வரின் முகவரி, இது முழு VPN சப்நெட்டின் மாஸ்க்கையும் (mask) கொண்டுள்ளது. பொதுவான நெட்வொர்க்குகளில் நீங்கள் பயன்படுத்தாத ஒரு வரம்பைத் தேர்ந்தெடுக்கவும், 192.168.1.0/24 உங்கள் கிளையண்டுகள் பயன்படுத்தும் பல வீட்டு ரௌட்டர்களுடன் மோதக்கூடும், அப்போது டன்னல் எந்த எச்சரிக்கையும் இன்றி லோக்கல் ரூட்டிங்கிற்குத் தோற்றுவிடும்.

சர்வர் பக்கத்தில் ஒரு பியரின் (peer) AllowedIPs என்பது ஒரு /32 ஆகும், இது அந்த கிளையண்டிற்குச் சொந்தமான ஒரே டன்னல் முகவரி. இரண்டு பியர்களுக்கு ஒரே AllowedIP-ஐ வழங்கினால், கடைசியாக உள்ளமைக்கப்பட்ட பியருக்கு டன்னல் மாறிவிடும், முதலாவது பியர் எந்தப் பிழைச் செய்தியும் இன்றி டிராஃபிக்கைப் பெறுவதை நிறுத்திவிடும். SaveConfig-ஐ அமைக்காமல் விடவும், இல்லையெனில் wg-quick down இந்த கோப்பை நேரடி நிலையிலிருந்து (live state) மீண்டும் எழுதும்.

இந்த server-ஐ router-ஆக மாற்றுதல்

தனக்கு அனுப்பப்படாத packets-ஐ 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

வெறும் sysctl -w கட்டளை அடுத்த reboot வரை மட்டுமே செயல்படும், அதன் பிறகு தானாகவே நின்றுவிடும். NAT-க்கு egress interface தேவைப்படுகிறது; அதாவது, internet-ஐ அடையும் NIC-ஐக் குறிப்பிட வேண்டும், wg0-ஐ அல்ல. eth0-ஐ அப்படியே எடுத்துக்கொள்ள வேண்டாம்; தற்போதைய OS images enp1s0 அல்லது ens3 போன்ற பெயர்களைப் பயன்படுத்துவதால், ip route show default மூலம் உங்கள் interface பெயரைச் சரிபார்த்துக்கொள்ளவும்.

Firewall: port மற்றும் forward path

ஒரே nftables கோப்பு filter மற்றும் NAT ஆகிய இரண்டையும் கையாள்கிறது. /etc/nftables.conf கட்டளையை இயக்கினால், ஏற்கனவே உள்ள ruleset அழிக்கப்படும். எனவே, ufw அல்லது Docker மூலம் நிர்வகிக்கப்படும் server-களில் இதைத் தவிர்க்கவும்.

#!/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 கட்டளையில் ஒரு சிறிய பிழை ஏற்பட்டாலும், உங்கள் சொந்த server-லிருந்து நீங்கள் வெளியேற்றப்படலாம். Forward chain எதை அனுமதிக்காது என்பதைக் கவனிக்கவும், wg0 முதல் wg0 வரை. Peers இணையத்தை அணுக முடியும், ஆனால் தங்களுக்குள் ஒருவரை ஒருவர் அணுக முடியாது; peer-to-peer VPN தேவைப்பட்டால் iifname "wg0" oifname "wg0" accept-ஐச் சேர்க்கவும். Server-ஐ ஒரு tmux-ல் Claude Code இயக்கும் remote development box ஆகப் பயன்படுத்தும்போது, அந்தப் பகுதியை பொதுவெளியில் வெளிப்படுத்த விரும்பவில்லை என்றால், இந்த chain-ன் கட்டுப்பாடுகள் முக்கியத்துவம் பெறுகின்றன.

ufw பயன்படுத்தும் server-ல்: 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 இடைமுகத்தை (interface) உருவாக்கி, முகவரிகளைச் சேர்த்து, AllowedIPs-லிருந்து பெறப்பட்ட பாதைகளை (routes) நிறுவுகிறது. enable --now என்பது மிக முக்கியமான பாதியாகும்: கைமுறையாக இயக்கப்படும் wg-quick up wg0, அடுத்தமுறை reboot செய்த பிறகு நீக்கப்படும்; kernel மேம்படுத்தல்களுக்கு reboot அவசியம். அத்தகைய reboot-க்குப் பிறகு மீண்டும் தொடங்கத் தவறும் ஒரு unit, யாராவது இணைக்க முயற்சிக்கும் வரை அமைதியாகவே இருக்கும். எனவே, உங்கள் சொந்த ntfy server-ஐக் குறிக்கும் wg-quick@wg0-ல் ஒரு OnFailure= drop-in-ஐ அமைப்பது, பயனர்கள் வெளியேற்றப்படுவதற்கு முன்பே உங்கள் தொலைபேசியில் இது குறித்த அறிவிப்பைப் பெறுவதற்கான மிக எளிதான வழியாகும்.

The client config, and the setting everybody gets wrong

[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 does two different jobs at once, and conflating them is the source of most WireGuard confusion.

Outbound it is a routing table. A packet whose destination matches a peer's AllowedIPs is encrypted and sent to that peer. 0.0.0.0/0, ::/0 sends everything down the tunnel, a full tunnel, the server as default route. A split tunnel is a narrower list: AllowedIPs = 10.8.0.0/24, 10.20.0.0/16 carries VPN traffic plus one private network behind the server, and everything else keeps its local route. That narrow list is what lets you keep services off the public internet entirely, a private Nextcloud instance on a VPS bound to the tunnel address, or the nested-virtualisation lab VMs running on the same box, stay reachable to peers and invisible to everyone else.

Inbound it is an access-control list. A decrypted packet from a peer whose source address is not in that peer's AllowedIPs is dropped. That is why the server lists 10.8.0.2/32 for the laptop: an entry of 0.0.0.0/0 there would let that client spoof any address in the tunnel.

PersistentKeepalive is for clients behind NAT, where the router holds the UDP mapping open only while packets flow. When it expires, the server can no longer reach the client. PersistentKeepalive = 25 holds the mapping open, set it on the client, not on a server with a public IP.

DNS மற்றும் கவனிக்கப்படாத கசிவு

AllowedIPs = 0.0.0.0/0 மற்றும் எந்த DNS = வரியும் இல்லாத நிலையில், client தனது local network-லிருந்து கற்றுக்கொண்ட resolver-ஐயே தொடர்ந்து பயன்படுத்தும், அதாவது 192.168.1.1-ல் உள்ள café router. அந்த route, default route-ஐ விட துல்லியமானது, எனவே DNS queries அனைத்தும் local link வழியாக plain text-ல் வெளியேறும், அதே சமயம் மற்ற அனைத்தும் tunnel வழியாகச் செல்லும். network traffic தனிப்பட்டதாக இருக்கும்; ஆனால் நீங்கள் பார்க்கும் இணையதளங்களின் பட்டியல் தனிப்பட்டதாக இருக்காது.

இதற்கு இரண்டு நேர்மையான வழிகள் உள்ளன. DNS-ஐ ஒரு public resolver-க்கு (DNS = 9.9.9.9) சுட்டிக்காட்டினால், queries அனைத்தும் tunnel வழியாகச் சென்று உங்கள் server-லிருந்து வெளியேறும், இருப்பினும் அந்த resolver உங்கள் queries-ஐக் காண முடியும். அல்லது unbound அல்லது dnsmasq-ஐ 10.8.0.1-ல் இயக்கி, DNS = 10.8.0.1-ஐ அமைத்து, udp dport 53 iifname "wg0" accept-ஐ input chain-ல் சேர்க்கவும். அந்த வரியை அமைத்துவிட்டு resolver-ஐ மறந்துவிடலாம், அப்போது எதுவும் resolve ஆகாது.

Linux client-களில் wg-quick ஆனது DNS முதல் resolvconf வரை செயல்படுத்துகிறது; அது இல்லையெனில் உங்களுக்கு resolvconf: command not found கிடைக்கும். openresolv-ஐ நிறுவவும், அல்லது systemd-resolved பயன்படுத்தும் client-ல் PostUp = resolvectl dns %i 10.8.0.1-ஐ அமைக்கவும்.

Tunnel-ஐ துண்டிக்காமல் peers-ஐ சேர்த்தல் மற்றும் நீக்குதல்

புதிய பயனர் ஒருவரைச் சேர்க்க interface-ஐ restart செய்தால், ஏற்கனவே இணைப்பில் உள்ள அனைவரும் வெளியேற்றப்படுவார்கள். [Peer] தொகுதியை wg0.conf கோப்பில் இணைத்துவிட்டு, peer தொகுப்பை நேரடியாக reload செய்யவும்.

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

wg-quick strip கட்டளையானது wg-quick-க்கு மட்டுமேயான keys (Address, DNS, PostUp) இல்லாமல் configuration-ஐ அச்சிடும். syncconf கட்டளை, நேரடி இணைப்புகள் துண்டிக்கப்படாமல் மாற்றங்களை மட்டும் நடைமுறைப்படுத்தும். இது peers-ஐ மட்டுமே புதுப்பிக்கும்: Address மாற்றப்பட்டால், interface-ஐ முழுமையாக down/up செய்ய வேண்டியது அவசியம். sudo wg set wg0 peer <public key> remove மூலம் peer-ஐ நீக்கவும், பின்னர் கோப்பிலிருந்து அந்தத் தொகுதியை நீக்கிவிடவும்; இல்லையெனில் அடுத்த முறை reload செய்யும்போது அது மீண்டும் வந்துவிடும்.

தோல்வி நிலைகள் மற்றும் நீங்கள் காணக்கூடிய செய்திகள்

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-லும் (பெரும்பாலான panels-ல் இது தனிப்பட்ட கட்டுப்பாடு) UDP 51820 port திறக்கப்பட்டுள்ளதா? Endpoint முகவரி மற்றும் port சரியாக உள்ளதா? keys மாற்றப்பட்டுள்ளதா? client-ன் [Peer] தொகுதியில் உள்ள key, server-ன் public key-ஆக இருக்க வேண்டும்; இதற்கு மாறாக, private key-ஐயோ அல்லது client-ன் சொந்த public key-ஐயோ உள்ளிட்டால் இந்தச் சிக்கல் ஏற்படும். server-ல் sudo tcpdump -ni any udp port 51820-ஐப் பார்த்தால் packets வந்து சேருகிறதா என்பதை அறியலாம். kernel module இயல்பாக எதையும் log செய்யாது; dynamic debug (echo module wireguard +p | sudo tee /sys/kernel/debug/dynamic_debug/control) வசதியைச் செயல்படுத்திய பிறகு மட்டுமே WireGuard செய்திகள் dmesg-ல் தோன்றும். அதைச் செயல்படுத்திய பின், key பொருந்தவில்லை என்றால் 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-ஐக் கவனிக்கவும். masquerade விதியில் packets எண்ணிக்கை பூஜ்ஜியமாக இருந்தால், egress interface பெயர் தவறாக இருக்கலாம்; replies இல்லாமல் எண்ணிக்கை உயர்ந்தால், அது forward chain policy-ல் உள்ள சிக்கலைக் குறிக்கும்.

Internet வேலை செய்கிறது, ஆனால் பெயர்கள் (names) வேலை செய்யவில்லை. ping 1.1.1.1 வெற்றிகரமாக முடிகிறது, ஆனால் curl https://example.com ஆனது Could not resolve host எனத் தருகிறது. DNS வரி விடுபட்டுள்ளது அல்லது tunnel-க்குள் இருந்து அணுக முடியாத ஒரு resolver-ஐ அது குறிப்பிடுகிறது.

சில HTTPS தளங்கள் முடங்குகின்றன (hang). SSH மற்றும் ping சரியாக வேலை செய்கின்றன; பெரிய பக்கங்கள் மட்டும் முடங்குகின்றன. இது path MTU சிக்கல்: tunnel கூடுதல் overhead-ஐச் சேர்க்கிறது, இடையில் உள்ள ஏதோ ஒரு link, ICMP செய்தி திரும்ப வராமல் பெரிய packets-ஐத் தடுத்துவிடுகிறது. client [Interface]-ல் MTU அளவைக் குறைக்கவும்; முதலில் 1420, பின் 1380, பிறகு 1280 என முயற்சி செய்யவும். MTU-ஐக் குறைத்த பிறகு முடக்கம் சரியாகி, ஆனால் வேகம் குறைவாக இருந்தால், தோராயமான எண்களைக் கணிப்பதை நிறுத்திவிட்டு bisection மற்றும் TCP MSS clamping மூலம் உண்மையான path MTU-ஐக் கண்டறிதல் என்ற முறையைப் பின்பற்றவும். இது tunnel அல்லாத பிற காரணங்களையும் நீக்க உதவும்.

Interface தொடங்க மறுக்கிறது. Address already in use என்றால், வேறொரு process UDP 51820-ஐப் பிடித்து வைத்துள்ளது என்று பொருள். up தோல்வியடைந்த பிறகு வரும் Cannot find device wg0, பெரும்பாலும் configuration நிராகரிக்கப்பட்டதைக் குறிக்கும்; journalctl -u wg-quick@wg0 -n 50-ஐ வாசிக்கவும்.

Streisand அல்லது OpenVPN-லிருந்து மாறுதல்

Streisand பராமரிப்பில் இல்லை, அதன் repository-ம் காப்பகப்படுத்தப்பட்டுவிட்டது. கைவிடப்பட்ட automation கருவிகளைப் பயன்படுத்தி VPN-ஐ இயக்குவது காலப்போக்கில் பாதுகாப்புச் சிக்கல்களை உருவாக்கும். இதில் நேரடியாக upgrade செய்ய முடியாது. OpenVPN-ன் PKI-ஐ WireGuard-க்கு மாற்ற முடியாது: WireGuard-ல் certificates, CA அல்லது expiry கிடையாது. எனவே, ஒவ்வொரு client-க்கும் புதிய key pair உருவாக்கப்பட வேண்டும்.

இணையாக migration-ஐ மேற்கொள்ளுங்கள். ஒரே server-ல் OpenVPN இயங்கும் 1194 port-உடன், WireGuard-ஐ UDP 51820 port-ல் இயக்க முடியும். wg0-ஐ நிறுவி, ஒவ்வொரு client-ஆக புதிய முறைக்கு மாற்றிவிட்டு, இறுதியில் பழைய service-ஐ நிறுத்திவிடலாம். OpenVPN-ன் username/password மற்றும் revocation முறை WireGuard-க்கு பொருந்தாது. உங்களுக்கு user accounts அல்லது audit trail தேவைப்பட்டால், WireGuard-க்கு மேல் அந்த வசதிகளை உருவாக்கிக்கொள்ளுங்கள்.

காப்புப்பிரதிகள், மேம்படுத்தல்கள் மற்றும் அளவீட்டில் ஏற்படும் சிக்கல்கள்

/etc/wireguard என்பது server ஆகும். இதை காப்புப்பிரதி எடுத்து (sudo tar czf wg-backup.tgz -C /etc wireguard, mode 600, server-க்கு வெளியே சேமிக்கவும்), புதிய VPS-ல் சில நிமிடங்களில் மீண்டும் கட்டமைக்க முடியும். server-ன் private key-ஐ இழந்தால், ஒவ்வொரு client-ன் public key-ஐயும் server அங்கீகரிப்பதால் (pinning), அனைத்து client configuration-களையும் மீண்டும் உருவாக்க வேண்டியிருக்கும். மேம்படுத்தல்கள் என்பது சாதாரண apt upgrade மற்றும் kernel மேம்படுத்தல்களுக்கான reboot மட்டுமே. நீங்கள் enabled செய்திருந்தால், wg-quick@wg0 தானாகவே மீண்டும் இயங்கத் தொடங்கும்.

ஒவ்வொரு peer-ன் நிலையும் (state) சிறியது மற்றும் crypto kernel-ல் இயங்குவதால், இந்த configuration-ஐ விட உங்கள் VPS-ன் CPU மற்றும் bandwidth அளவே உச்சவரம்பாக இருக்கும். வெளியிடப்பட்ட புள்ளிவிவரங்களை நம்புவதை விட, iperf3 மூலம் tunnel வழியாக நீங்களே அளவிடுவது சிறந்தது. அளவீட்டில் (scale) சிக்கலை ஏற்படுத்துவது செயல்பாட்டு நிர்வாகம் (operations) தான். ஒவ்வொரு peer-க்கும் தனித்துவமான tunnel IP தேவை. அறுபது [Peer] தொகுதிகளைக் கையால் திருத்தும்போது, AllowedIPs நகல்கள் (duplicates) உருவாக வாய்ப்புள்ளது: எனவே, script மூலம் configuration-களை உருவாக்கவும். ஒரு server என்பது ஒரு UDP endpoint மற்றும் ஒரு தோல்விப் புள்ளி (point of failure). WireGuard-ல் clustering வசதி இல்லை: எனவே, redundancy தேவைப்பட்டால், சொந்த keys கொண்ட இரண்டாவது server-ஐப் பயன்படுத்த வேண்டும். Key rotation கைமுறையாகவே செய்யப்பட வேண்டும், எனவே யாரிடம் எந்த key உள்ளது மற்றும் அதை எப்படி revoke செய்வது என்பதைப் பதிவு செய்து வைக்கவும். இந்த நிர்வாகம் ஒரு text file-ல் அடங்காதபோது, அதே kernel data plane-ன் மேல் ஒரு control plane-ஐப் பயன்படுத்துவதே தீர்வாகும். சுயமாக இயங்கும் NetBird server மூலம் முகவரி ஒதுக்கீடு, peer விநியோகம் மற்றும் setup keys ஆகியவற்றை நீங்கள் கையால் செய்ய வேண்டிய அவசியம் இருக்காது. அந்த control plane-ஐ நீங்களே இயக்குவது கடினம் எனில், Tailscale உங்களுக்காக அதை வழங்குகிறது. அதன் இலவசத் திட்டம் ஆறு பயனர்கள் மற்றும் வரம்பற்ற சாதனங்களை உள்ளடக்கியது, இது பெரும்பாலான தனிப்பட்ட பயன்பாட்டிற்குப் போதுமானது. அதற்கு மேல் செல்லும்போது, இயந்திரங்களின் எண்ணிக்கையை விட பயனர்களின் எண்ணிக்கையின் அடிப்படையில் கட்டணம் வசூலிக்கப்படும். ஒரு குடும்பம் அல்லது சிறிய குழுவிற்கான கட்டணம், எத்தனை பேர் login செய்கிறார்கள் என்பதைப் பொறுத்தே அமையும், மாறாக நீங்கள் wg0.conf-ல் கையால் திருத்தும் peer-களின் எண்ணிக்கையைப் பொறுத்ததல்ல. அந்த வகையில், split-tunnel AllowedIPs நிர்வாகம் என்பது subnet router மூலம் உங்கள் private ranges-ஐ விளம்பரப்படுத்துவது ஆகும். இது ஒரு VPS-லிருந்து ஒருமுறை அறிவிக்கப்பட்டு மையமாக அங்கீகரிக்கப்படும், ஒவ்வொரு client file-லும் ஒட்ட வேண்டியதில்லை. இந்த மாற்றம் பயனுள்ளதா என்பது, hosted control plane எதை அடைய முடியும் என்பதைப் பொறுத்தது. இது உங்கள் traffic-ஐ encrypt செய்யும் keys-ஐ வைத்திருக்காது, ஆனால் எந்தெந்த peer-கள் ஒருவரை ஒருவர் அறியலாம் என்பதை இதுவே தீர்மானிக்கிறது.

இதற்கெல்லாம் உங்கள் கட்டுப்பாட்டில் உள்ள ஒரு Linux box, ஒரு public IP, நீங்கள் module-ஐ ஏற்றக்கூடிய kernel மற்றும் முழுமையாக உங்கள் கட்டுப்பாட்டில் உள்ள firewall ஆகியவை தேவை.

FAQ

WireGuard handshake ஏன் முடிவடைவதில்லை?

wg show ஒரு peer-ஐக் காட்டி, latest handshake இல்லை என்றால், packets வந்து சேரவில்லை அல்லது ஏற்கப்படவில்லை என்று பொருள். VPS firewall மற்றும் உங்கள் provider-ன் தனிப்பட்ட network firewall இரண்டிலும் UDP 51820 port-ஐச் சரிபார்க்கவும். Endpoint host மற்றும் port சரியாக உள்ளதா என உறுதிப்படுத்தவும். keys மாறி இருக்கிறதா என்று பார்க்கவும்; client-ன் [Peer] block-ல் server-ன் public key இருக்க வேண்டும். sudo tcpdump -ni any udp port 51820 கட்டளை server-க்கு packets வருகிறதா என்பதைக் காட்டும். dmesg கட்டளை, dynamic debug (echo module wireguard +p | sudo tee /sys/kernel/debug/dynamic_debug/control) இயக்கப்பட்டால் மட்டுமே WireGuard handshake தோல்விகளைத் தெரிவிக்கும்; அப்போது key பொருந்தவில்லை என்றால், அது invalid-MAC drop என்று காட்டும்.

Tunnel இணைகிறது, ஆனால் இணையம் கிடைக்கவில்லை. என்ன செய்ய வேண்டும்?

ping 10.8.0.1 வேலை செய்து, ping 1.1.1.1 timeout ஆனால், அது forwarding அல்லது NAT சிக்கலைக் குறிக்கிறது. sysctl net.ipv4.ip_forward கோப்பில் 1 என்று உள்ளதா என்றும், அது /etc/sysctl.d/-ல் அமைக்கப்பட்டுள்ளதா என்றும் உறுதிப்படுத்தவும்; வெறும் sysctl -w கட்டளையைப் பயன்படுத்தினால் reboot-க்கு பின் அது நீங்கிவிடும். பிறகு, masquerade rule-க்கு உங்கள் உண்மையான egress interface-ஐ ip route show default, enp1s0 அல்லது ens3 மூலம் கண்டறியவும் (eth0 அரிதாகவே பயன்படும்).

Client config-ல் DNS = வரி தேவையா?

Full tunnel அமைப்பில் DNS = வரி இல்லையென்றால், client தனது local network-ல் இருந்து பெற்ற resolver-ஐயே பயன்படுத்தும். இதனால், மற்ற அனைத்தும் tunnel வழியாகச் சென்றாலும், DNS queries மட்டும் cleartext-ஆக local link வழியாக வெளியேறும். DNS-ஐ ஒரு public resolver-க்கு மாற்றவும், அல்லது unbound/dnsmasq-ஐ 10.8.0.1-ல் இயக்கி, input chain-ல் udp dport 53 iifname "wg0"-ஐத் திறக்கவும்.

AllowedIPs எதைக் கட்டுப்படுத்துகிறது?

இது இரண்டு பணிகளைச் செய்கிறது. Outbound-ல் இது ஒரு routing table: ஒரு peer-ன் AllowedIPs-க்கு பொருந்தும் traffic, encrypt செய்யப்பட்டு அந்த peer-க்கு அனுப்பப்படும். Inbound-ல் இது ஒரு access-control list: decrypt செய்யப்பட்ட packet-ன் source, அந்த peer-ன் AllowedIPs-க்கு வெளியே இருந்தால், அது நிராகரிக்கப்படும். இதனால்தான் server பக்கத்தில் ஒவ்வொரு client-க்கும் ஒரு /32 பட்டியலிடப்படுகிறது, ஆனால் client பக்கத்தில் 0.0.0.0/0 இருக்கலாம்.

எந்த VPS-லும் WireGuard இயங்குமா?

KVM VPS-ல் இது in-kernel module மூலம் கூடுதல் அமைப்புகள் இன்றி இயங்கும். OpenVZ அல்லது LXC போன்ற host kernel-ஐப் பகிரும் container virtualisation-ல், modprobe wireguard கட்டளை Operation not supported பிழையுடன் தோல்வியடையும். இதற்கு மாற்றாக wireguard-go userspace implementation-ஐப் பயன்படுத்தலாம். மற்ற எதையும் செய்வதற்கு முன் sudo modprobe wireguard && echo ok கட்டளையை இயக்கவும்.