Оскільки WireGuard майбутнього ядра Linux 5.6, я вирішив подивитися, як найкраще інтегрувати цей VPN з моїм .
Обладнання
- Raspberry Pi 3 з модулем LTE та публічною IP-адресою. Тут буде VPN-сервер (далі в тексті він називається edgewalker)
- Телефон на Androidякий має використовувати VPN для всіх комунікацій
- Ноутбук Linux, який повинен використовувати VPN тільки всередині мережі
Кожен пристрій, який підключається до 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 = <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.confQR-код вийде в консоль як ASCII. Його можна відсканувати із програми Android VPN і автоматично настроїти VPN-тунель.
Висновок
Налаштування WireGuard просто чарівна в порівнянні з OpenVPN.
Джерело: habr.com
