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

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

Оборудване

  • Raspberry Pi 3 с LTE модул и публичен IP адрес. Тук ще бъде VPN сървър (в текста по-долу той ще се нарича edgewalker)
  • Телефон с Android, който трябва да използва VPN за всички комуникации
  • Linux лаптоп, който трябва да използва 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

На Raspberry Pi имам инсталирана дистрибуция Raspbian Buster, там вече има пакет wireguard, инсталираме го:

$ sudo apt install wireguard

На телефона с Android инсталирах приложението WireGuard VPN от официалния каталог на 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 = 
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]
# лаптоп
PublicKey = 
AllowedIPs = 10.200.200.2/32

[Peer]
# мобилен телефон
PublicKey = 
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 wg-quick@wg0.service

Конфигурация на клиента на лаптопа

На лаптопа създаваме конфигурационен файл /etc/wireguard/wg0.conf с такива същите настройки:

[Interface]
Address = 10.200.200.2/24
PrivateKey = 

[Peer]
PublicKey = 
AllowedIPs = 10.200.200.0/24
Endpoint = edgewalker:51820

Бележки:

  • Вместо edgewalker трябва да укажете публичния IP или хост на VPN-сървъра
  • С установяването на AllowedIPs на 10.200.200.0/24, използваме VPN само за достъп до вътрешната мрежа. Трафикът към всички останали IP адреси/сървъри все още ще минава през

за тест и автоматично стартиране използваме същите команди wg-quick и systemd:

$ sudo wg-quick up wg0
$ sudo systemctl enable wg-quick@wg0.service

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

За телефон Android създаваме много подобен конфигурационен файл (нека го наречем mobile.conf):

[Interface]
Address = 10.200.200.3/24
PrivateKey = 
DNS = 10.200.200.1
        
[Peer]
PublicKey = 
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.

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

Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster