Налаштовуємо простий 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. Якщо налаштування вийде досить простий, можна подумати про підключення до 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 = <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 wg-quick@wg0.service

Конфігурація клієнта на ноутбуці

На ноутбуці створюємо конфігураційний файл /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 wg-quick@wg0.service

Налаштування клієнта на 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.

Джерело: habr.com

Купити надійний хостинг для сайтів із захистом від DDoS, VPS VDS сервери 🔥 Купити надійний хостинг для сайтів із захистом від DDoS, VPS VDS сервери | ProHoster