- PVSM.RU - https://www.pvsm.ru -
Поскольку WireGuard станет частью [1] будущего ядра Linux 5.6, я решил посмотреть, как лучше всего интегрировать этот VPN с моим LTE-маршрутизатором/точкой доступа на Raspberry Pi [2].
Каждое устройство, которое подключается к VPN, должно иметь возможность подключаться ко всем другим устройствам. Например, телефон должен иметь возможность подключаться к веб-серверу на ноутбуке, если оба устройства являются частью сети VPN. Если настройка получится достаточно простой, то можно подумать о подключении к VPN и десктопа (по Ethernet).
Учитывая, что проводные и беспроводные соединения со временем становятся всё менее безопасны (таргетированные атаки [3], атака KRACK по взлому WPA2 [4] и атака Dragonblood против WPA3 [5]), я всерьёз рассматриваю возможность использования WireGuard для всех моих устройств, независимо от того, в какой среде они работают.
WireGuard предоставляет предварительно скомпилированные пакеты [6] для большинства дистрибутивов 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 [7] из официального каталога 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.
Конфигурация довольно простая, я создал следующий файл /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
Пару замечаний:
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
Примечания:
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 создаём очень похожий файл конфигурации (назовём его 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.
Автор: m1rko
Источник [8]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/raspberry-pi/345151
Ссылки в тексте:
[1] станет частью: https://habr.com/ru/company/dcmiran/blog/486046/
[2] LTE-маршрутизатором/точкой доступа на Raspberry Pi: https://snikt.net/blog/2019/06/22/building-an-lte-access-point-with-a-raspberry-pi/
[3] таргетированные атаки: https://en.wikipedia.org/wiki/Tailored_Access_Operations
[4] атака KRACK по взлому WPA2: https://www.krackattacks.com/
[5] атака Dragonblood против WPA3: https://arstechnica.com/information-technology/2019/04/serious-flaws-leave-wpa3-vulnerable-to-hacks-that-steal-wi-fi-passwords/
[6] предварительно скомпилированные пакеты: https://www.wireguard.com/install/
[7] WireGuard VPN: https://play.google.com/store/apps/details?id=com.wireguard.android
[8] Источник: https://habr.com/ru/post/486452/?utm_campaign=486452&utm_source=habrahabr&utm_medium=rss
Нажмите здесь для печати.