Подключение по протоколу WireGuard VPN из Linux

Чтобы удаленно подключиться к локальной сети интернет-центра Keenetic, начиная с версии KeeneticOS 3.3 стало возможно использовать туннель WireGuard VPN.

NOTE: Важно! Если вы планируете настроить Keenetic в качестве VPN-сервера, начать необходимо с проверки того, что он имеет публичный "белый" IP-адрес, а при использовании сервиса KeenDNS, что он работает в режиме "Прямой доступ". При несоблюдении любого из этих условий подключение к такому серверу из Интернета будет невозможно.

Сначала необходимо выполнить настройку сервера WireGuard в Keenetic, которая показана в инструкции "Настройка WireGuard VPN между двумя роутерами Keenetic", после переходите к настройке VPN-клиента.

Ниже приведем пример действий для подключения к VPN-серверу из операционной системы под управлением ОС Linux, на примере дистрибутива Ubuntu 18.04 LTS.

Чтобы установить соединение к WireGuard-серверу Keenetic, в компьютере на базе ОС Linux, потребуется установить пакет WireGuard, при помощи встроенного пакетного менеджера apt.

1. Заходим в терминал и выполняем установку необходимых для подключения WireGuard- репозиторий, пакет приложения, модуль ядра, заголовочные файлы ядра:

[enpa@enpa-linux ~]$ sudo add-apt-repository ppa:wireguard/wireguard && sudo apt update && sudo apt install wireguard && linux-headers-$(uname --kernel-release)
WireGuard is a novel VPN that runs inside the Linux Kernel. This is the Ubuntu packaging for WireGuard. More info may be found at its website, listed below.

More info: https://www.wireguard.com/
Packages: wireguard wireguard-tools wireguard-dkms

Install with: $ apt install wireguard

For help, please contact <email address hidden>
Больше информации: https://launchpad.net/~wireguard/+archive/ubuntu/wireguard
Нажмите [ENTER] для продолжения или Ctrl-C, чтобы отменить добавление.

Игн:1 http://dl.google.com/linux/chrome/deb stable InRelease
Сущ:2 http://dl.google.com/linux/chrome/deb stable Release
Сущ:3 http://repo.yandex.ru/yandex-disk/deb stable InRelease
..........
Building for 5.1.21-050121-generic
Building initial module for 5.1.21-050121-generic
Secure Boot not enabled on this system.
Done.

wireguard:
Running module version sanity check.
- Original module
- No original module exists within this kernel
- Installation
- Installing to /lib/modules/5.1.21-050121-generic/updates/dkms/

depmod...

DKMS: install completed.
Настраивается пакет wireguard-tools (0.0.20191012-wg1~bionic) …
Настраивается пакет wireguard (0.0.20191012-wg1~bionic) …
Обрабатываются триггеры для man-db (2.8.3-2ubuntu0.1) …
[Листинг сокращен для экономии места]

2. Переходим к созданию приватного ключа Private Key и публичного ключа Public Key:

[enpa@enpa-linux ~]$ cd /etc/wireguard/
[enpa@enpa-linux wireguard]$ umask 077
enpa@enpa-linux wireguard]$ sudo -i
[sudo] пароль для enpa:
root@enpa-linux:~# cd /etc/wireguard/
root@enpa-linux:/etc/wireguard# wg genkey > private-key
root@enpa-linux:/etc/wireguard# wg pubkey > public-key < private-key
root@enpa-linux:~# exit
[enpa@enpa-linux wireguard]$ sudo cat private-key
AOSXWm+sXxRuu/Uo8lysE4PIwVZTRDD+YV6w3HicGHg=
[enpa@enpa-linux wireguard]$ sudo cat public-key
xxKBcZlhZlbjW7yFuhZ08l294HBAp2I/iM05YE8vs0Y=
[enpa@enpa-linux wireguard]$ cd -
[enpa@enpa-linux ~]$

Важно! Если после ввода команды cd /etc/wireguard/ получаете вывод Отказано в доступе, значит у вас нет root-прав читать данный каталог:

[enpa@enpa-wrk-lnv ~]$ cd /etc/wireguard/
bash: cd: /etc/wireguard/: Отказано в доступе

Меняем владельца, который сможет обращаться к каталогу без root-прав:

[enpa@enpa-wrk-lnv ~]$ sudo chown -R enpa /etc/wireguard/
[enpa@enpa-wrk-lnv ~]$ cd /etc/wireguard
[enpa@enpa-wrk-lnv wireguard]$

После настройки подключения можно вернуть владельца для доступа к каталогу по умолчанию:

[enpa@enpa-wrk-lnv wireguard]$ cd -
/home/enpa
[enpa@enpa-wrk-lnv ~]$ sudo chown -R root /etc/wireguard/

3. Создадим файл конфигурации WireGuard wg-client.conf:

[enpa@enpa-linux wireguard]$ sudo touch wg-client.conf
[enpa@enpa-linux wireguard]$ ls -1
private-key
public-key
wg-client.conf

4. Добавим настройку подключения в созданный файл конфигурации wg-client.conf, открыв файл в текстовом редакторе nano:

[enpa@enpa-linux wireguard]$ sudo nano wg-client.conf
[sudo] пароль для enpa:

[Interface]
PrivateKey = AOSXWm+sXxRuu/Uo8lysE4PIwVZTRDD+YV6w3HicGHg=
Address = 172.16.82.5/24
DNS =

[Peer]
PublicKey = 1YVx+x3C817V9YdhUtpUhzyDLVj5tnK2m//WjFGynm4=
AllowedIPs = 172.16.82.1/32, 192.168.22.0/24
Endpoint = enpwgwrkserver.dynns.com:16631
PersistentKeepalive = 5

Настройка [Interface] клиента:

В поле "PrivateKey" интерфейса клиента вводим созданный приватный ключ в пункте 2.
Напомним, что посмотреть ключ можно при помощи вывода команды cat:

[enpa@enpa-linux wireguard]$ sudo cat private-key
AOSXWm+sXxRuu/Uo8lysE4PIwVZTRDD+YV6w3HicGHg=

В поле "Addresses" интерфейса клиента указываем IP-адрес, в формате IP/bitmask — 172.16.82.5/24 (это внутренний адрес туннеля). Можно использовать другую подсеть, при этом ее следует выбрать из частного диапазона адресов и избежать наложения с другими настроенными на данных устройствах подсетями.

NOTE: Важно! Если у вас настроен "Доступ в Интернет через WireGuard-туннель", на стороне "[Interface] клиента" необходимо указать DNS-сервер в поле "DNS=".

В нашем примере указан адрес DNS-сервера от Google 8.8.8.8:

[Interface]
PrivateKey =AOSXWm+sXxRuu/Uo8lysE4PIwVZTRDD+YV6w3HicGHg=
Address = 172.16.82.5/24
DNS = 8.8.8.8

[Peer]
PublicKey = 1YVx+x3C817V9YdhUtpUhzyDLVj5tnK2m//WjFGynm4=
AllowedIPs = 172.16.82.1/32, 192.168.22.0/24
Endpoint = enpwgwrkserver.dynns.com:16631
PersistentKeepalive = 5

Настройка [Peer] сервера:

В поле "PublicKey" вставьте публичный ключ сервера, который можно скопировать в буфер обмена компьютера из настроек WireGuard в веб-интерфейсе роутера:

wg-lin-01.png

В поле "AllowedIPs" указываем разрешенные IP-адреса, в формате IP/bitmask — 172.16.82.1/32 (это внутренний адрес сервера) и 192.168.22.0/24 (адрес локального сегмента роутера Keenetic).

В поле "Endpoint" указываем публичный IP-адрес или доменное имя WireGuard-сервера, и порт прослушивания, на который будет устанавливать связь WireGuard-клиент.

В поле "PersistentKeepalive" указываем периодичность попыток проверки доступности удаленной стороны соединения. Обычно, достаточно 3-5-секундного интервала между проверками.

5. Настраиваем удаленное подключение на стороне ранее настроенного WireGuard-сервера.

Подключитесь к веб-конфигуратору роутера и перейдите в меню "Интернет" на страницу "Другие подключения". Нажмите на ранее созданное WireGuard-подключение ("WG-S") и добавьте "Настройки пира". Нажав на "Добавить пир" откроется поле настроек пира, в котором укажите название туннеля "wg-ubuntu-client".

В поле "Публичный ключ" вставляем ключ, который был создан в пункте 2. 
Напоминаем, что посмотреть ключ можно при помощи вывода команды cat

[enpa@enpa-linux wireguard]$ sudo cat public-key
xxKBcZlhZlbjW7yFuhZ08l294HBAp2I/iM05YE8vs0Y=

В поле "Разрешенные подсети" указываем адрес, трафик с которого будет допущен до сервера в формате IP/bitmask — 172.16.82.5/32

В поле "Проверка активности" необходимо указать периодичность попыток проверки доступности удаленной стороны соединения. Обычно достаточно 10-15 секундного интервала между проверками. По умолчанию значение "Проверки активности" в настройках пира Keenetic указано 30 секунд.

Нажмите "Сохранить".

wgu.png

6. Создаем автоматическое WireGuard-подключение при загрузке ОС через систему инициализации 
Systemd, которая позволяет запускать и управлять демонами системы ОС Linux:

[enpa@enpa-linux ~]$ sudo systemctl enable wg-quick@wg-client.service
Created symlink /etc/systemd/system/multi-user.target.wants/wg-quick@wg-client.service → /lib/systemd/system/wg-quick@.service.

Важно! В имени сервиса ***.service - вводим имя конфигурации wg-client.conf

7. Запускаем WireGuard-подключение:

[enpa@enpa-linux ~]$ sudo systemctl start wg-quick@wg-client.service

Важно!
Если сервис не стартует, необходимо проверить лог загрузки командной systemctl status wg-quick@wg-client.service или journalctl -xe:

[enpa@enpa-wrk-lnv ~]$ systemctl status wg-quick@wg-client.service
● wg-quick@wg-client.service - WireGuard via wg-quick(8) for wg/client
Loaded: loaded (/lib/systemd/system/wg-quick@.service; indirect; vendor preset: enabled)
Active: failed (Result: exit-code) since Wed 2020-04-22 19:55:59 MSK; 8s ago
Docs: man:wg-quick(8)
man:wg(8)
https://www.wireguard.com/
https://www.wireguard.com/quickstart/
https://git.zx2c4.com/wireguard-tools/about/src/man/wg-quick.8
https://git.zx2c4.com/wireguard-tools/about/src/man/wg.8
Process: 8734 ExecStart=/usr/bin/wg-quick up wg-client (code=exited, status=127)
Main PID: 8734 (code=exited, status=127)

апр 22 19:55:59 enpa-wrk-lnv wg-quick[8734]: [#] ip link add wg-client type wireguard
апр 22 19:55:59 enpa-wrk-lnv wg-quick[8734]: [#] wg setconf wg-client /dev/fd/63
апр 22 19:55:59 enpa-wrk-lnv wg-quick[8734]: [#] ip -4 address add 172.16.82.20/24 dev wg-client
апр 22 19:55:59 enpa-wrk-lnv wg-quick[8734]: [#] ip link set mtu 1420 up dev wg-client
апр 22 19:55:59 enpa-wrk-lnv wg-quick[8734]: [#] resolvconf -a wg-client -m 0 -x
апр 22 19:55:59 enpa-wrk-lnv wg-quick[8734]: /usr/bin/wg-quick: line 31: resolvconf: command not found
апр 22 19:55:59 enpa-wrk-lnv wg-quick[8734]: [#] ip link delete dev wg-client
апр 22 19:55:59 enpa-wrk-lnv systemd[1]: wg-quick@wg-client.service: Main process exited, code=exited, status=127/n/a
апр 22 19:55:59 enpa-wrk-lnv systemd[1]: wg-quick@wg-client.service: Failed with result 'exit-code'.
апр 22 19:55:59 enpa-wrk-lnv systemd[1]: Failed to start WireGuard via wg-quick(8) for wg/client.

Судя по ошибке в системе отсутствует установленный пакет resolvconf, необходимый для работы wg-quick, устанавливаем пакет:

[enpa@enpa-wrk-lnv ~]$ sudo apt install resolvconf
Чтение списков пакетов… Готово
Построение дерева зависимостей
Чтение информации о состоянии… Готово
Следующие НОВЫЕ пакеты будут установлены:
resolvconf
Обновлено 0 пакетов, установлено 1 новых пакетов, для удаления отмечено 0 пакетов, и 0 пакетов не обновлено.
Необходимо скачать 48,0 kB архивов.
После данной операции объём занятого дискового пространства возрастёт на 187 kB.
Пол:1 http://mirror.yandex.ru/ubuntu bionic-updates/universe amd64 resolvconf all 1.79ubuntu10.18.04.3 [48,0 kB]
Получено 48,0 kB за 0с (440 kB/s)
Предварительная настройка пакетов ...
Выбор ранее не выбранного пакета resolvconf.
(Чтение базы данных … на данный момент установлено 395973 файла и каталога.)
Подготовка к распаковке …/resolvconf_1.79ubuntu10.18.04.3_all.deb …
Распаковывается resolvconf (1.79ubuntu10.18.04.3) …
Настраивается пакет resolvconf (1.79ubuntu10.18.04.3) …
Created symlink /etc/systemd/system/sysinit.target.wants/resolvconf.service → /lib/systemd/system/resolvconf.service.
Created symlink /etc/systemd/system/systemd-resolved.service.wants/resolvconf-pull-resolved.path → /lib/systemd/system/resolvconf-pull-resolved.path.
resolvconf-pull-resolved.service is a disabled or a static unit, not starting it.
resolvconf-pull-resolved.service is a disabled or a static unit, not starting it.
Обрабатываются триггеры для systemd (237-3ubuntu10.39) …
Обрабатываются триггеры для man-db (2.8.3-2ubuntu0.1) …
Обрабатываются триггеры для ureadahead (0.100.0-21) …
ureadahead will be reprofiled on next reboot
Обрабатываются триггеры для resolvconf (1.79ubuntu10.18.04.3) …

После установки пакета проверяем запуск сервиса.

Проверяем подключение:

[enpa@enpa-linux ~]$ sudo wg
interface: wg-client
public key: xxKBcZlhZlbjW7yFuhZ08l294HBAp2I/iM05YE8vs0Y=
private key: (hidden)
listening port: 45757

peer: 1YVx+x3C817V9YdhUtpUhzyDLVj5tnK2m//WjFGynm4=
endpoint: 193.0.174.159:16631
allowed ips: 172.16.82.1/32, 192.168.22.0/24
transfer: 0 B received, 148 B sent
persistent keepalive: every 5 seconds

Для проверки доступности сервера можно выполнить отправку ICMP-пакетов до IP-адреса:

[enpa@enpa-linux ~]$ ping -c 10 -s 100 192.168.22.1
PING 192.168.22.1 (192.168.22.1) 100(128) bytes of data.
108 bytes from 192.168.22.1: icmp_seq=1 ttl=64 time=6.76 ms
108 bytes from 192.168.22.1: icmp_seq=2 ttl=64 time=6.70 ms
108 bytes from 192.168.22.1: icmp_seq=3 ttl=64 time=6.63 ms
108 bytes from 192.168.22.1: icmp_seq=4 ttl=64 time=6.84 ms
108 bytes from 192.168.22.1: icmp_seq=5 ttl=64 time=6.57 ms
108 bytes from 192.168.22.1: icmp_seq=6 ttl=64 time=6.24 ms
108 bytes from 192.168.22.1: icmp_seq=7 ttl=64 time=9.92 ms
108 bytes from 192.168.22.1: icmp_seq=8 ttl=64 time=9.75 ms
108 bytes from 192.168.22.1: icmp_seq=9 ttl=64 time=5.77 ms
108 bytes from 192.168.22.1: icmp_seq=10 ttl=64 time=7.03 ms

--- 192.168.22.1 ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 9014ms
rtt min/avg/max/mdev = 5.778/7.225/9.920/1.349 ms

8. Для отключения автоматического запуска WireGuard-подключения, при загрузке ОС через систему инициализации Systemd, потребуется ввести следующую команду:

[enpa@enpa-linux ~]$ sudo systemctl disable wg-quick@wg-client.service
Removed /etc/systemd/system/multi-user.target.wants/wg-quick@wg-client.service

9. Для остановки WireGuard-подключения потребуется ввести следующую команду:

[enpa@enpa-linux ~]$ sudo systemctl stop wg-quick@wg-client.service

Настройка завершена.

 

Была ли эта статья полезной?

Пользователи, считающие этот материал полезным: 6 из 7

Еще есть вопросы? Отправить запрос

Комментарии

0 комментариев

Войдите в службу, чтобы оставить комментарий.