WireGuard VPN FreeBSD֊ի վրայ

Արդէն քանի շաբաթ է ինչ Յուքոմը խափանում է նորմալ DNS֊ի աշխատանքը տան օգտատէրերի համար՝

antranigv@zvartnots:~ $ host jabber.am 37.252.73.34
;; connection timed out; no servers could be reached

բայց եթէ օգտագործենք յայտնի DNS սերւէրներ ապա խնդիր չի լինում՝

antranigv@zvartnots:~ $ host jabber.am 9.9.9.9
Using domain server:
Name: 9.9.9.9
Address: 9.9.9.9#53
Aliases: 

jabber.am has address 37.252.73.34
jabber.am mail is handled by 1 post.pingvinashen.am.

սա ստիպեց ինձ մտածել, թէ ինչպէս շատ արագ կարգաւորել VPN սերւէր, որը կը լինի պարզ։

Իհարկէ, մի քանի տարբեր կար մտքումս՝

  • OpenVPN
  • IKEv2
  • IPSec

Խնդիրը նրանում էր, որ այս երեքն էլ շատ բարդ են կարգաւորւում։ Հա, OpenVPN֊ը շատ ֆիչրներ ունի, բայց ես շատ բան չեմ ուզում։ IKEv2 կամ IPSec֊ն էլ շատ ձայնաւոր հաղորդակարգեր են։ ինձ աւելի պարզ բան էր պէտք։

Յիշեցի, որ վերջերս OpenBSD֊ի միջուկի մէջ ինտեգրել էին WireGuard֊ը։

Շատ կարճ պատմեմ WireGuard֊ի մասին։

  • շատ փոքր ծրագրային ապահովում. ~4000 տող կոդ, համեմատած ~100հազար տող կոդ OpenVPN֊ի
  • օգտագործում ա SSH֊ի authorized_keys֊ի նման մօտեցում
  • հեչ ձայնաւոր չի. մաքուր UDP֊ով ա աշխատում
  • մաքուր աշխատում ա routing table֊ի հետ։
  • կարծիքաւորուած ա

Հեղինակը շատ լաւ ներկայացնում ա այս հոլովակում։

Հիմա փորձելու եմ կարգաւորման քայլերը ցոյց տալ։ Ես օգտագործում եմ FreeBSD սերւեր բայց նոյնը հնարաւոր է անել լինուքսի վրայ ։)

մի քանի գլխաւոր գաղափարներ.

WireGuard֊ը ունի՝

  • Գաղտնի բանալի
  • UDP պորտ որին լսում է
  • կողմերի ցուցակ

կողմը ունի՝

  • իր համապատասխան հանրային բանալին
  • թունելի միջի IP հասցէն(երը)
  • (ոչ պարտադիր) վերջնակէտի IP հասցէն եւ պորտը

Լաւ, դէ կարգաւորենք։

Նախ երկու կողմերում քաշում ենք wireguard փեքիջը.

pkg install wireguard

սկսում ենք գաղտնի/հանրային բանալիներ ստեղծելով երկու կողմում.

umask 077
wg genkey > priv.key
wg pubkey < priv.key > pub.key

կապը աւելի անվտանգ դարձնելու համար կարող ենք նաեւ օգտագործել Preshared Key.

wg genpsk > one-psk-per-connection.psk

ապա սերւէրում գրում ենք՝ /usr/local/etc/wireguard/wg0.conf ֆայլի մէջ.

[Interface]
Address         = 10.0.0.1/24  # սերւէրի IP֊ն թունելի մէջ
ListenPort      = 1500         # UDP պորտը
PrivateKey      = (սերւէրի priv.key֊ի պարունակութիւն)

[Peer]
PublicKey       = (կլիենտի pub.key֊ի պարունակութիւն)
PresharedKey    = (one-psk-per-connection.psk-ի պարունակութիւն)
AllowedIPs      = 10.0.0.10/32 # կլիենտի IP֊ն թունելի մէջ

Այդքանը!

իսկ հիմա կլիենտում գրում ենք՝ wg0.conf ֆայլի մէջ.

[Interface]
PrivateKey   = (կլիենտի priv.key֊ի պարունակութիւն)
Address      = 10.0.0.10/24

[Peer]
PublicKey    = (սերւէրի pub.key֊ի պարունակութիւն)
PresharedKey = (one-psk-per-connection.psk֊ի պարունակութիւն)
Endpoint     = myserver:1500
AllowedIPs   = 0.0.0.0/0 # կամ 10.0.0.0/24 եթէ ուզում ենք ուղարկել միայն ներքին ցանցը

արդէն կարող ենք աշխատացնել

սերւէրում.

service wireguard enable
sysrc wireguard_interfaces="wg0"
service wireguard start

ու կլիենտում՝

wg-quick up /path/to/wg0.conf

Այսքանը!

եթէ հարցեր լինեն՝ you know where to find me 😉

ասանկ բաներ։

Պատասխանել մեյլով