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