WireGuard — это реализация протокола VPN с открытым исходным кодом, которая быстро набирает популярность среди пользователей VPN благодаря своей скорости, простоте использования и хорошо продуманной кодовой базе. Модуль ядра WireGuard поставляется с основным ядром Linux 5.6 или более поздней версии, а его пользовательские инструменты уже включены в базовые репозитории всех современных дистрибутивов Linux. Если вы хотите настроить DIY VPN-маршрутизатор на общедоступном VPS под вашим контролем, на самом деле нет причин не попробовать WireGuard.
Настройка маршрутизатора WireGuard VPN не требует каких-либо специальных знаний о базовом протоколе VPN, а также не требует изучения загадочного языка конфигурации или исследования огромного пространства конфигурации. Также в разработке находятся различные удобные интерфейсы, которые упрощают настройку VPN на стороне клиента.
В этом руководстве основное внимание уделяется настройке клиента WireGuard VPN с помощью популярного инструмента управления сетью по выбору: графического интерфейса пользователя NetworkManager.
Предположения
В этом руководстве я предполагаю, что вы уже где-то настроили маршрутизатор WireGuard VPN (например, общедоступный VPS ). Если вы еще не сделали этого, обратитесь к следующему руководству, чтобы настроить его, и вернитесь к этому руководству.
Я также предполагаю следующие настройки.
- WAN-адрес VPN-сервера WireGuard:
192.168.122.104
- UDP-порт прослушивания VPN-сервера WireGuard:
51820
- VPN-адрес сервера WireGuard VPN:
10.0.0.1/24
- VPN-адрес клиента WireGuard VPN:
10.0.0.2/24
Шаг первый: проверьте требование
Чтобы иметь возможность настраивать клиент WireGuard VPN с графическим интерфейсом NetworkManager, вам потребуется NetworkManager версии 1.26.2 или выше . Поэтому, прежде чем продолжить, сначала проверьте версию своего NetworkManager. Этому требованию соответствуют Ubuntu 20.10, Fedora 33 и Arch Linux 2020.09.01 или новее. Таким образом, это руководство применимо только к одной из этих сред рабочего стола Linux.
Шаг второй: установите WireGuard
Идите вперед и установите WireGuard с менеджером пакетов по умолчанию.
Для Ubuntu:
$ sudo apt install wireguard
Для Fedora:
$ sudo dnf install wireguard-tools
Для Arch Linux:
sudo pacman -S wireguard-tools
Шаг третий: создайте пару криптографических ключей
Затем создайте пару открытого/закрытого ключей для клиента WireGuard VPN. Для этого сначала переключимся в корень. Остальные шаги в руководстве будут выполняться от имени пользователя root.
$ sudo -i
Используйте команду wg
, чтобы создать пару ключей и сохранить их в /etc/wireguard.
cd /etc/wireguard umask 077 wg genkey | tee /etc/wireguard/privatekey | wg pubkey | tee /etc/wireguard/publickey
Шаг четвертый: добавьте открытый ключ клиента на сервер WireGuard VPN
Чтобы клиент WireGuard мог взаимодействовать с сервером WireGuard VPN, вам необходимо явно добавить открытый ключ клиента на сервер VPN. В конце концов, WireGuard — это одноранговая VPN. Итак, войдите на хост-сервер WireGuard VPN и выполните следующую команду.
wg set wg0 peer <client-public-key> allowed-ips <client-VPN-address>
Обратите внимание, что в этом примере IP-адрес клиента VPN — 10.0.0.2.
Шаг пятый: создание сетевого подключения с помощью графического интерфейса редактора подключений NetworkManager
Затем запустите nm-connection-editor
из командной строки и добавьте новое сетевое соединение для WireGuard VPN. Обязательно запускайте nm-connection-editorкак root, так как он должен создать файл конфигурации в /etc/NetworkManager/system-connections.
nm-connection-editor
В графическом интерфейсе сетевых подключений нажмите кнопку +.
NetworkManager версии 1.26.2 и выше позволяет создавать соединение типа WireGuard. Таким образом, выберите WireGuard в качестве типа подключения.
Откроется окно редактора соединений, как показано ниже. На вкладке WireGuard установите Interface name для wg0 и заполните Private key. Закрытый ключ должен быть получен из содержимого /etc/wireguard/privatekey, которое вы только что создали на шаге 3. Затем нажмите кнопку Add внизу, которая позволяет вам указать сервер WireGuard VPN в качестве однорангового узла.
На WireGuard GUI редактора пиров, заполнить поля Public key, Allowed IPs и Endpoint. Открытый ключ должен поступать с сервера WireGuard. Конечная точка состоит из WAN IP-адреса VPN-сервера и UDP-порта, который сервер прослушивает. Заполнив их, нажмите кнопку Apply.
На этом этапе вы увидите, что VPN-сервер добавлен в качестве однорангового узла:
Затем перейдите на IPv4 вкладку Settings и настройте частный IP-адрес VPN, который будет назначен клиенту WireGuard VPN, то есть 10.0.0.2/24. В качестве шлюза, указать VPN IP — адрес сервера VPN WireGuard, который 10.0.0.1/24. В качестве DNS-серверов вы можете выбрать любой общедоступный DNS-сервер (например, 8.8.8.8). Щелкните по кнопке Save.
Теперь перейдите на вкладку General и установите флажок рядом с Connect automatically with priority. Это автоматически активирует это соединение WireGuard и установит соединение VPN с сервером WireGuard VPN. Нажмите кнопку Save, чтобы завершить.
Шаг 6. Проверьте подключение WireGuard VPN
На этом этапе соединение WireGuard VPN должно быть установлено, а весь исходящий трафик от клиента должен маршрутизироваться через сервер WireGuard VPN.
Чтобы проверить подключение WireGuard VPN на стороне клиента, вы можете попробовать выполнить эхо-запрос внешнего хоста (например, 8.8.8.8) с хоста клиента. Чтобы убедиться, что трафик ping маршрутизируется через сервер WireGuard VPN, используйте команду ip.
ping 8.8.8.8 ip route get 8.8.8.8
Команда ip route get <destination>
показывает маршрут, используемый для достижения указанного пункта назначения. Вывод команды выше подтверждает, что трафик, предназначенный для 8.8.8.8 маршрутизатора, маршрутизируется через интерфейс wg0, а не через WAN-интерфейс хоста.
Другой способ проверить подключение к VPN — запустить tcpdump
на виртуальном интерфейсе WireGuard wg0 и проверить, видит ли интерфейс ICMP-запрос и ответный трафик, сгенерированный командой ping.
tcpdump -i wg0
Необязательно: управление подключением WireGuard из командной строки
После успешного создания подключения WireGuard с помощью графического интерфейса Network Manager вы можете управлять подключением из командной строки nmcli
следующим образом.
Просто запустите, nmcli чтобы увидеть статус VPN-соединения.
nmcli
Чтобы просмотреть подробные свойства подключения WireGuard VPN:
nmcli --overview connection show 'WireGuard connection 1'
Чтобы запустить или остановить WireGuard VPN:
nmcli connection up 'WireGuard connection 1' nmcli connection down 'WireGuard connection 1'
Чтобы проверить статус автозапуска WireGuard VPN:
nmcli connection show 'WireGuard connection 1' | grep autoconnect
Чтобы включить / выключить автоматический запуск WireGuard VPN:
nmcli connection modify 'WireGuard connection 1' connection.autoconnect yes nmcli connection modify 'WireGuard connection 1' connection.autoconnect no
Чтобы удалить соединение WireGuard VPN:
nmcli connection delete 'WireGuard connection 1'
Устранение неполадок WireGuard VPN
Симптом: Вы не можете проверить связь с частным IP-адресом VPN-сервера WireGuard ( 10.0.0.1).
Решение 1.Проверьте доступность порта UDP
Убедитесь, что порт прослушивания UDP сервера VPN доступен для клиента. Чтобы проверить, так ли это, используйте ncкоманду .
nc -zvu <WAN-адрес VPN-сервера> <UDP-порт>
В нашем примере:
nc -zvu 192.168.122.104 51820
Connection to 192.168.122.240 51820 port [udp/*] succeeded!
Если вы не можете связаться с портом UDP, вероятно, это брандмауэр на стороне сервера, блокирующий входящий трафик на порт UDP. Обязательно откройте порт в брандмауэре на стороне сервера.
Решение 2. Проверьте, добавлен ли открытый ключ клиента к VPN-серверу.
Другая возможность заключается в том, что вы забыли добавить открытый ключ клиента к серверу WireGuard VPN. Как описано в шаге 4 этого руководства, используйте wgдля этого команду:
wg set wg0 peer allowed-ips
Резюме
Это руководство еще раз доказало вам, насколько легко настроить WireGuard VPN на современном рабочем столе Linux. Хотя NetworkManager обеспечивает достаточно хорошую поддержку WireGuard VPN, его полной интеграции с рабочим столом (по крайней мере, на рабочий стол GNOME) все еще нет. Например, начиная с NetworkManager 1.26.2, когда WireGuard VPN включен, индикатор сети не отображает значок состояния для WireGuard.
Если вы используете WireGuard VPN в среде рабочего стола Linux, поделитесь своим опытом в комментариях.