Настройте проста VPN с WireGuard и Raspberry Pi като сървър

От WireGuard стане част от на бъдещото ядро ​​на Linux 5.6, реших да видя как най-добре да интегрирам този VPN с моя LTE рутер/точка за достъп на Raspberry Pi.

Оборудование

  • Raspberry Pi 3 с LTE модул и публичен IP. Ще има VPN сървър (наричан по-долу крак)
  • Телефон с Android, който трябва да използва VPN за всички комуникации
  • Linux лаптоп, който трябва да използва VPN само в мрежата

Всяко устройство, което се свързва с VPN, трябва да може да се свързва с всяко друго устройство. Например, телефонът трябва да може да се свърже с уеб сървър на лаптоп, ако и двете устройства са част от VPN мрежа. Ако настройката е достатъчно проста, тогава можете да помислите за свързване към VPN и десктоп (чрез Ethernet).

Като се има предвид, че кабелните и безжичните връзки стават по-малко сигурни с течение на времето (целеви атаки, KRACK WPA2 хакерска атака и Dragonblood атака срещу WPA3), сериозно обмислям да използвам WireGuard за всички мои устройства, без значение в каква среда работят.

Инсталиране на софтуер

WireGuard предоставя предварително компилирани пакети за повечето дистрибуции на Linux, Windows и macOS. Приложенията за Android и 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

Инсталирах приложението на телефона си с Android VPN на WireGuard от официалния каталог на 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]

Настройване на клиент на телефон с Android

За телефон с Android създаваме много подобен конфигурационен файл (нека го наречем 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. Може да се сканира от Android VPN приложението и автоматично да се настрои VPN тунел.

Продукция

Настройването на WireGuard е просто вълшебно в сравнение с OpenVPN.

Източник: www.habr.com

Добавяне на нов коментар