ื”ื’ื“ืจืช VPN ืคืฉื•ื˜ ืขื WireGuard ื•-Raspberry Pi ื›ืฉืจืช

ื‘ื’ืœืœ WireGuard ื™ื”ืคื•ืš ืœื—ืœืง ืฉืœ ืœื™ื‘ืช ืœื™ื ื•ืงืก 5.6 ื”ืงืจื•ื‘ื”, ื”ื—ืœื˜ืชื™ ืœืจืื•ืช ืื™ืš ื”ื›ื™ ื˜ื•ื‘ ืœืฉืœื‘ ืืช ื”-VPN ื”ื–ื” ืขื ืฉืœื™ ื ืชื‘/ื ืงื•ื“ืช ื’ื™ืฉื” LTE ื‘-Raspberry Pi.

ะžะฑะพั€ัƒะดะพะฒะฐะฝะธะต

  • Raspberry Pi 3 ืขื ืžื•ื“ื•ืœ LTE ื•ื›ืชื•ื‘ืช IP ืฆื™ื‘ื•ืจื™ืช. ื™ื”ื™ื” ื›ืืŸ ืฉืจืช VPN (ืœื”ืœืŸ ื‘ื˜ืงืกื˜ ื”ื•ื ื ืงืจื ื•ื•ืงืจ ืงืฆื”)
  • ื˜ืœืคื•ืŸ ืื ื“ืจื•ืื™ื“ ืฉื—ื™ื™ื‘ ืœื”ืฉืชืžืฉ ื‘-VPN ืขื‘ื•ืจ ื›ืœ ื”ืชืงืฉื•ืจืช
  • ืžื—ืฉื‘ ื ื™ื™ื“ ืœื™ื ื•ืงืก ืฉืืžื•ืจ ืœื”ืฉืชืžืฉ ืจืง ื‘-VPN ื‘ืชื•ืš ื”ืจืฉืช

ื›ืœ ืžื›ืฉื™ืจ ืฉืžืชื—ื‘ืจ ืœ-VPN ื—ื™ื™ื‘ ืœื”ื™ื•ืช ืžืกื•ื’ืœ ืœื”ืชื—ื‘ืจ ืœื›ืœ ืฉืืจ ื”ืžื›ืฉื™ืจื™ื. ืœื“ื•ื’ืžื”, ื˜ืœืคื•ืŸ ืืžื•ืจ ืœื”ื™ื•ืช ืžืกื•ื’ืœ ืœื”ืชื—ื‘ืจ ืœืฉืจืช ืื™ื ื˜ืจื ื˜ ื‘ืžื—ืฉื‘ ื ื™ื™ื“ ืื ืฉื ื™ ื”ืžื›ืฉื™ืจื™ื ื”ื ื—ืœืง ืžืจืฉืช VPN. ืื ื”ื”ื’ื“ืจื” ืžืชื‘ืจืจืช ื›ืคืฉื•ื˜ื” ืœืžื“ื™, ืื– ืืชื” ื™ื›ื•ืœ ืœื—ืฉื•ื‘ ืขืœ ื—ื™ื‘ื•ืจ ืฉื•ืœื—ืŸ ื”ืขื‘ื•ื“ื” ืœ-VPN (ื‘ืืžืฆืขื•ืช Ethernet).

ื‘ื”ืชื—ืฉื‘ ื‘ื›ืš ืฉื—ื™ื‘ื•ืจื™ื ืงื•ื•ื™ื™ื ื•ืืœื—ื•ื˜ื™ื™ื ื”ื•ืคื›ื™ื ืœืคื—ื•ืช ื•ืคื—ื•ืช ืžืื•ื‘ื˜ื—ื™ื ืขื ื”ื–ืžืŸ (ื”ืชืงืคื•ืช ืžืžื•ืงื“ื•ืช, ืžืชืงืคืช ืคื™ืฆื•ื— KRACK WPA2 ะธ ื”ืชืงืคืช Dragonblood ื ื’ื“ WPA3), ืื ื™ ืฉื•ืงืœ ื‘ืจืฆื™ื ื•ืช ืœื”ืฉืชืžืฉ ื‘-WireGuard ืขื‘ื•ืจ ื›ืœ ื”ืžื›ืฉื™ืจื™ื ืฉืœื™, ืœื ืžืฉื ื” ื‘ืื™ื–ื• ืกื‘ื™ื‘ื” ื”ื ื ืžืฆืื™ื.

ื”ืชืงื ืช ืชื•ื›ื ื”

WireGuard ืžืกืคืง ื—ื‘ื™ืœื•ืช ืžื”ื•ื“ืจื•ืช ืžืจืืฉ ืขื‘ื•ืจ ืจื•ื‘ ื”ื”ืคืฆื•ืช ืฉืœ Linux, Windows ื•-macOS. ืืคืœื™ืงืฆื™ื•ืช ืื ื“ืจื•ืื™ื“ ื•-iOS ืžื•ืขื‘ืจื•ืช ื“ืจืš ืกืคืจื™ื•ืช ืืคืœื™ืงืฆื™ื•ืช.

ื™ืฉ ืœื™ ืืช ื”-Fedora Linux 31 ื”ืขื“ื›ื ื™ ื‘ื™ื•ืชืจ, ื•ื”ืชืขืฆืœืชื™ ืœืงืจื•ื ืืช ื”ืžื“ืจื™ืš ืœืคื ื™ ื”ื”ืชืงื ื”. ืจืง ืžืฆืืชื™ ืืช ื”ื—ื‘ื™ืœื•ืช wireguard-tools, ื”ืชืงื™ื ื• ืื•ืชื, ื•ืื– ืœื ื”ืฆืœื—ืชื™ ืœื”ื‘ื™ืŸ ืžื“ื•ืข ืฉื•ื ื“ื‘ืจ ืœื ืขื•ื‘ื“. ื—ืงื™ืจื” ื ื•ืกืคืช ื”ืขืœืชื” ืฉืื™ืŸ ืœื™ ืืช ื”ื—ื‘ื™ืœื” ืžื•ืชืงื ืช wireguard-dkms (ืขื ืžื ื”ืœ ื”ืชืงืŸ ืจืฉืช), ืื‘ืœ ื–ื” ืœื ื”ื™ื” ื‘ืžืื’ืจ ืฉืœ ื”ื”ืคืฆื” ืฉืœื™.

ืื ื”ื™ื™ืชื™ ืงื•ืจื ืืช ื”ื”ื•ืจืื•ืช, ื”ื™ื™ืชื™ ื ื•ืงื˜ ื‘ืฆืขื“ื™ื ื”ื ื›ื•ื ื™ื:

$ sudo dnf copr enable jdoss/wireguard
$ sudo dnf install wireguard-dkms wireguard-tools

ื™ืฉ ืœื™ ืืช ื”ืคืฆืช Raspbian Buster ืžื•ืชืงื ืช ืขืœ Raspberry Pi ืฉืœื™, ื™ืฉ ืฉื ื›ื‘ืจ ื—ื‘ื™ืœื” wireguard, ื”ืชืงืŸ ืืช ื–ื”:

$ sudo apt install wireguard

ื‘ื˜ืœืคื•ืŸ ื”ืื ื“ืจื•ืื™ื“ ืฉืœื™ ื”ืชืงื ืชื™ ืืช ื”ืืคืœื™ืงืฆื™ื” WireGuardVPN ืžื”ืงื˜ืœื•ื’ ื”ืจืฉืžื™ ืฉืœ Google App Store.

ื”ืชืงื ืช ืžืคืชื—ื•ืช

ืขื‘ื•ืจ ืื™ืžื•ืช ืขืžื™ืชื™ื, Wireguard ืžืฉืชืžืฉ ื‘ืกื›ื™ืžืช ืžืคืชื— ืคืจื˜ื™/ืฆื™ื‘ื•ืจื™ ืคืฉื•ื˜ื” ื›ื“ื™ ืœืืžืช ืขืžื™ืชื™ื ืœ-VPN. ืืชื” ื™ื›ื•ืœ ืœื™ืฆื•ืจ ืžืคืชื—ื•ืช VPN ื‘ืงืœื•ืช ื‘ืืžืฆืขื•ืช ื”ืคืงื•ื“ื” ื”ื‘ืื”:

$ wg genkey | tee wg-laptop-private.key |  wg pubkey > wg-laptop-public.key
$ wg genkey | tee wg-server-private.key |  wg pubkey > wg-server-public.key
$ wg genkey | tee wg-mobile-private.key |  wg pubkey > wg-mobile-public.key

ื–ื” ื ื•ืชืŸ ืœื ื• ืฉืœื•ืฉื” ื–ื•ื’ื•ืช ืžืคืชื— (ืฉื™ืฉื” ืงื‘ืฆื™ื). ืœื ื ืชื™ื™ื—ืก ืœืงื‘ืฆื™ื ื‘ืชืฆื•ืจื”, ืืœื ื ืขืชื™ืง ืืช ื”ืชื•ื›ืŸ ืœื›ืืŸ: ื›ืœ ืžืคืชื— ื”ื•ื ืฉื•ืจื” ืื—ืช ื‘-base64.

ื™ืฆื™ืจืช ืงื•ื‘ืฅ ืชืฆื•ืจื” ืขื‘ื•ืจ ืฉืจืช ื”-VPN (Raspberry Pi)

ื”ืชืฆื•ืจื” ื“ื™ ืคืฉื•ื˜ื”, ื™ืฆืจืชื™ ืืช ื”ืงื•ื‘ืฅ ื”ื‘ื /etc/wireguard/wg0.conf:

[Interface]
Address = 10.200.200.1/24
ListenPort = 51820
PrivateKey = <copy private key from wg-server-private.key>
PostUp   = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o wwan0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o wwan0 -j MASQUERADE

[Peer]
# laptop
PublicKey = <copy public key from wg-laptop-public.key>
AllowedIPs = 10.200.200.2/32

[Peer]
# mobile phone
PublicKey = <copy public key from wg-mobile-public.key>
AllowedIPs = 10.200.200.3/32

ื›ืžื” ื”ืขืจื•ืช:

  • ื‘ืžืงื•ืžื•ืช ื”ืžืชืื™ืžื™ื ืฆืจื™ืš ืœื”ื›ื ื™ืก ืฉื•ืจื•ืช ืžื”ืงื‘ืฆื™ื ืขื ื”ืžืงืฉื™ื
  • ื”-VPN ืฉืœื™ ืžืฉืชืžืฉ ื‘ืคืก ืคื ื™ืžื™ 10.200.200.0/24
  • ืขื‘ื•ืจ ืฆื•ื•ืชื™ื PostUp/PostDown ื™ืฉ ืœื™ ืืช ืžืžืฉืง ื”ืจืฉืช ื”ื—ื™ืฆื•ื ื™ wwan0, ื™ื™ืชื›ืŸ ืฉื™ืฉ ืœืš ืžืžืฉืง ืื—ืจ (ืœื“ื•ื’ืžื”, eth0)

ืจืฉืช ื”-VPN ืžื•ื’ืฉืช ื‘ืงืœื•ืช ืขื ื”ืคืงื•ื“ื” ื”ื‘ืื”:

$ sudo wg-quick up wg0

ืคืจื˜ ืื—ื“ ืงื˜ืŸ: ื‘ืชื•ืจ ืฉืจืช ื”-DNS ืฉื”ืฉืชืžืฉืชื™ ื‘ื• dnsmasq ืงืฉื•ืจ ืœืžืžืฉืง ืจืฉืช br0, ื”ื•ืกืคืชื™ ื’ื ืžื›ืฉื™ืจื™ื wg0 ืœืจืฉื™ืžืช ื”ืžื›ืฉื™ืจื™ื ื”ืžื•ืชืจื™ื. ื‘-dnsmasq ื–ื” ื ืขืฉื” ืขืœ ื™ื“ื™ ื”ื•ืกืคืช ืฉื•ืจืช ืžืžืฉืง ืจืฉืช ื—ื“ืฉื” ืœืงื•ื‘ืฅ ื”ืชืฆื•ืจื” /etc/dnsmasq.conf, ืœื“ื•ื’ืžื”:

interface=br0
interface=wg0

ื‘ื ื•ืกืฃ, ื”ื•ืกืคืชื™ ื›ืœืœ iptable ื›ื“ื™ ืœืืคืฉืจ ืชืขื‘ื•ืจื” ืœื™ืฆื™ืืช ื”ื”ืื–ื ื” ืฉืœ UDP (51280):

$ sudo iptables -I INPUT -p udp --dport 51820 -j ACCEPT

ืขื›ืฉื™ื• ื›ืฉื”ื›ืœ ืขื•ื‘ื“, ืื ื—ื ื• ื™ื›ื•ืœื™ื ืœื”ื’ื“ื™ืจ ืืช ื”ื”ืฉืงื” ื”ืื•ื˜ื•ืžื˜ื™ืช ืฉืœ ืžื ื”ืจืช ื”-VPN:

$ sudo systemctl enable [email protected]

ืชืฆื•ืจืช ืœืงื•ื— ื‘ืžื—ืฉื‘ ื ื™ื™ื“

ืฆื•ืจ ืงื•ื‘ืฅ ืชืฆื•ืจื” ื‘ืžื—ืฉื‘ ื ื™ื™ื“ /etc/wireguard/wg0.conf ืขื ืื•ืชืŸ ื”ื’ื“ืจื•ืช:

[Interface]
Address = 10.200.200.2/24
PrivateKey = <copy private key from wg-laptop-private.key>

[Peer]
PublicKey = <copy public key from wg-server-public.key>
AllowedIPs = 10.200.200.0/24
Endpoint = edgewalker:51820

ื”ืขืจื•ืช:

  • ื‘ืžืงื•ื edgewalker ืขืœื™ืš ืœืฆื™ื™ืŸ ืืช ืžืืจื— ื”-IP ื”ืฆื™ื‘ื•ืจื™ ืื• ื”-VPN
  • ืขืœ ืคื™ ื”ื’ื“ืจื” AllowedIPs ืขืœ 10.200.200.0/24, ืื ื• ืžืฉืชืžืฉื™ื ืจืง ื‘-VPN ื›ื“ื™ ืœื’ืฉืช ืœืจืฉืช ื”ืคื ื™ืžื™ืช. ื”ืชื ื•ืขื” ืœื›ืœ ื›ืชื•ื‘ื•ืช/ืฉืจืชื™ ื”-IP ื”ืื—ืจื•ืช ืชืžืฉื™ืš ืœืขื‘ื•ืจ ื‘ืขืจื•ืฆื™ื ืคืชื•ื—ื™ื "ืจื’ื™ืœื™ื". ื–ื” ื’ื ื™ืฉืชืžืฉ ื‘ืฉืจืช ื”-DNS ืฉื”ื•ื’ื“ืจ ืžืจืืฉ ื‘ืžื—ืฉื‘ ื”ื ื™ื™ื“.

ืœื‘ื“ื™ืงื” ื•ื”ืฉืงื” ืื•ื˜ื•ืžื˜ื™ืช ืื ื• ืžืฉืชืžืฉื™ื ื‘ืื•ืชืŸ ืคืงื•ื“ื•ืช wg-quick ะธ systemd:

$ sudo wg-quick up wg0
$ sudo systemctl enable [email protected]

ื”ื’ื“ืจืช ืœืงื•ื— ื‘ื˜ืœืคื•ืŸ ืื ื“ืจื•ืื™ื“

ืขื‘ื•ืจ ื˜ืœืคื•ืŸ ืื ื“ืจื•ืื™ื“ ืื ื• ื™ื•ืฆืจื™ื ืงื•ื‘ืฅ ืชืฆื•ืจื” ื“ื•ืžื” ืžืื•ื“ (ื‘ื•ื ื ืงืจื ืœื–ื” mobile.conf):

[Interface]
Address = 10.200.200.3/24
PrivateKey = <copy private key from wg-mobile-private.key>
DNS = 10.200.200.1
        
[Peer]
PublicKey = <copy public key from wg-server-public.key>
AllowedIPs = 0.0.0.0/0
Endpoint = edgewalker:51820

ื‘ื ื™ื’ื•ื“ ืœืชืฆื•ืจื” ื‘ืžื—ืฉื‘ ื”ื ื™ื™ื“, ื”ื˜ืœืคื•ืŸ ื—ื™ื™ื‘ ืœื”ืฉืชืžืฉ ื‘ืฉืจืช ื”-VPN ืฉืœื ื• ื›ืฉืจืช ื”-DNS (ืงื• DNS), ื•ื’ื ืœื”ืขื‘ื™ืจ ืืช ื›ืœ ื”ืชืขื‘ื•ืจื” ื“ืจืš ืžื ื”ืจืช ื”-VPN (AllowedIPs = 0.0.0.0/0).

ื‘ืžืงื•ื ืœื”ืขืชื™ืง ืืช ื”ืงื•ื‘ืฅ ืœืžื›ืฉื™ืจ ื”ื ื™ื™ื“ ืฉืœืš, ืืชื” ื™ื›ื•ืœ ืœื”ืžื™ืจ ืื•ืชื• ืœืงื•ื“ QR:

$ sudo apt install qrencode
$ qrencode -t ansiutf8 < mobile.conf

ืงื•ื“ ื”-QR ื™ื™ืฆื ืœืงื•ื ืกื•ืœื” ื›-ASCII. ื ื™ืชืŸ ืœืกืจื•ืง ืื•ืชื• ืžืืคืœื™ืงืฆื™ื™ืช ื”-VPN ืฉืœ ืื ื“ืจื•ืื™ื“ ื•ื”ื•ื ื™ื’ื“ื™ืจ ืื•ื˜ื•ืžื˜ื™ืช ืžื ื”ืจืช VPN.

ืคืœื˜

ื”ื’ื“ืจืช WireGuard ื”ื™ื ืคืฉื•ื˜ ืงืกื•ืžื” ื‘ื”ืฉื•ื•ืื” ืœ-OpenVPN.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”