Тъй като WireGuard бъдещото ядро на Linux 5.6, реших да разгледам как най-добре да интегрирам този VPN с моя .
Оборудване
- Raspberry Pi 3 с LTE модул и публичен IP адрес. Тук ще бъде VPN сървър (в текста по-нататък ще се нарича edgewalker)
- Телефон с Android, който трябва да използва VPN за всички комуникации
- Лаптоп с Linux, който трябва да използва VPN само в мрежата
Всяко устройство, което се свързва с VPN, трябва да има възможност да се свързва с всички останали устройства. Например, телефонът трябва да има възможност да се свързва с уеб сървъра на лаптопа, ако и двете устройства са част от VPN мрежата. Ако настройката се окаже достатъчно проста, може да се обмисли и свързване на десктопа (по Ethernet).
Като се има предвид, че жичните и безжичните връзки с времето стават все по-малко безопасни (, и ), сериозно разглеждам възможността да използвам 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 инсталирах приложението от официалния каталог на 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]
# laptop
PublicKey =
AllowedIPs = 10.200.200.2/32
[Peer]
# mobile phone
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Освен това добавих правило в iptables, за да разреша трафика на слушащия 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 адреси/сървъри ще продължи да минава по "обикновените" отворени канали. Освен това ще се използва предварително настроеният DNS-сървър на лаптопа.
За тестване и автоматично стартиране използваме същите команди 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.confQR кодът ще излезе в конзолата като ASCII. Може да се сканира от приложението Android VPN и автоматично да настрои VPN тунела.
Извод
Настройката на WireGuard е просто магия в сравнение с OpenVPN.
Източник: habr.com
