Guardian Angel Icon 3D Orthodox Wood Carved.
Virgin Mary of Perpetual Help Wooden Carved icon Chriatian gift.
Guardian Angel
ICON WOOD JESUS CHRIST GOD THE LORD ALMIGHTY
Orthodox Wood Carved.
St Andrew the Apostle Icon 3D
Our Lady 3D Orthodox Wood Carved Icon.
Orthodox Wood Carved Icon
Guardian Angel
Guardian Angel

Простой VPN с WireGuard

Каждое устройство, которое подключается к VPN, должно иметь возможность подключаться ко всем другим устройствам. Например, телефон должен иметь возможность подключаться к веб-серверу на ноутбуке, если оба устройства являются частью сети VPN. Если настройка получится достаточно простой, то можно подумать о подключении к VPN и десктопа (по Ethernet).

Учитывая, что проводные и беспроводные соединения со временем становятся всё менее безопасны (таргетированные атаки, атака KRACK по взлому WPA2 и атака Dragonblood против WPA3), я всерьёз рассматриваю возможность использования WireGuard для всех моих устройств, независимо от того, в какой среде они работают.

Установка программного обеспечения

WireGuard предоставляет предварительно скомпилированные пакеты для большинства дистрибутивов Linux, Windows и macOS. Приложения для Android и iOS поставляются через каталоги приложений.

Установливаем пакет wireguard-dkms

$ sudo dnf copr enable jdoss/wireguard
$ sudo dnf install wireguard-dkms wireguard-tools

пакет 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 Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.

Конфигурация клиента на ноутбуке

На ноутбуке создаём файл конфигурации /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 Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.

Настройка клиента на 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-туннель.

 

Вверх