Как настроить сервер и клиент WireGuard VPN в Ubuntu 20.04

Настройте собственный VPN с помощью Wireguard

А VPN (виртуальная частная сеть) позволяет пользователю подключаться к частной сети удаленно, как если бы компьютер пользователя был напрямую подключен к частной сети. Первоначально технология была разработана для обеспечения удаленного доступа к внутренней частной сети компании для сотрудников, которые фактически не находятся в месте расположения внутренней сети.

Сервер VPN развернут на месте внутренней сети. Этот сервер находится в общедоступной сети, и сотрудник может получить к нему доступ с помощью клиента VPN. Для подключения к VPN-серверу требуется аутентификация. Связь между VPN-сервером и VPN-клиентом защищена с помощью протокола туннелирования. Обратите внимание, что это сообщение может быть или не быть зашифрованным, но обычно в большинстве протоколов VPN оно зашифровано.

Другое использование VPN - получить анонимность при доступе в Интернет или для обхода географических ограничений, накладываемых при доступе к некоторым веб-сайтам. В таких случаях сеть, к которой пользователь хочет подключиться, не является частной сетью, а вместо этого является Интернетом.

Многие протоколы VPN были разработаны за эти годы. Эти протоколы используют различные протоколы туннелирования и алгоритмы шифрования для связи между сервером и клиентом.

Одним из таких протоколов, который в последнее время получает широкое распространение, является Wireguard. Wireguard легче, проще и производительнее, чем хорошо известные традиционно используемые протоколы VPN, такие как OpenVPN, IPSec. Он уже реализован для Windows, Mac OS и большого количества дистрибутивов Linux. В Linux он реализован как модуль ядра. Он доступен в официальных репозиториях Ubuntu 20.04.

В этой статье мы увидим, как настроить сервер и клиент Wireguard VPN в Ubuntu 20.04.

Установка

Для этой статьи я настраиваю сервер Wireguard на Ubuntu 20.04 Linode и клиент Wireguard на моем локальном компьютере с Ubuntu 20.04.

Пакет проволока устанавливает и сервер Wireguard, и клиент. Выполните следующую команду как на сервере, так и на клиентском компьютере.

sudo apt установить Wireguard

Конфигурация сервера

Ключи безопасности

Нам нужно сгенерировать набор пар открытого / закрытого ключей. для аутентификации и защиты соединения Wireguard. Это можно сделать с помощью следующих команд:

sudo su cd / etc / wireguard umask 077 wg genkey | тройник private_key | wg pubkey> public_key

Обратите внимание, что мы выполняем все задачи по настройке как суперпользователь. Причина в том, что доступ к каталогу / etc / Wireguard запрещен для обычных пользователей, и доступ к каталогу не может быть получен только с привилегиями sudo для обычного пользователя.

Далее мы устанавливаем маску создания файла на 077. Это означает, что всякий раз, когда какой-либо процесс создает новый файл в этой папке, его разрешения будут автоматически замаскированы с помощью 077. Например. если в этой папке создается файл с разрешениями 777, он автоматически маскируется, и разрешения фактически становятся 700. Это делается для того, чтобы только владелец файла имел все права доступа к файлу, а все остальные не имели разрешений.

В следующей строке мы генерируем пару открытый / закрытый ключ для сервера. Они сохраняются в файлах private_key и public_key. Для просмотра ключей запустите:

кошка private_key кошка public_key

Скопируйте закрытый ключ, он нам понадобится на следующем шаге.

Примечание: Никогда не сообщайте свой закрытый ключ публично!

Конфигурационный файл

Давайте создадим файл конфигурации для Wireguard Server. Вы можете выбрать любое имя для файла. Создадим файл wg0.conf в этом примере.

vim wg0.conf

Добавьте в файл следующее.

[Интерфейс] Адрес = 10.20.43.1/24 SaveConfig = true ListenPort = 51190 PrivateKey = PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A РАЗМЕЩЕНИЕ -o -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D ПОСТРОУТИРОВАНИЕ -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D РАЗМЕЩЕНИЕ -o -j МАСКАД 

Вставьте закрытый ключ, который мы ранее скопировали, в строку 5 приведенного выше кода.

Нам нужно настроить Wireguard в другой (виртуальной) подсети. чем IP-адрес сервера. Здесь я использовал 10.20.43.1 для сервера и 10.20.43.2 для клиента. Здесь можно использовать любую подсеть. Чтобы получить IP-адрес сервера и интерфейса, запустите:

ifconfig

Обратите внимание на IP-адрес сервера. Это требуется во время настройки клиента.

Интерфейс, используемый сервером, как показано на изображении выше, eth0. Название интерфейса может отличаться в зависимости от сети пользователя, оно может быть wlan0 или wlp2s0 в случае, если пользователь подключен к сети Wi-Fi с помощью беспроводной карты.

Заменить в PostUp и PostDown с вашим интерфейсом; в этом примере это eth0.PostUp и PostDown директивы используются, чтобы указать, какие команды должны запускаться при запуске и остановке сервера соответственно. В нашем примере мы используем iptables команда, чтобы установить IP-правила так, чтобы IP-адрес сервера был общим для клиентов. Правила упадут, как только сервер остановится.

Сохраните и выйдите из файла. При использовании vim нажмите Esc, затем введите : wq и нажмите Входить для сохранения и выхода.

Если вы используете ufw брандмауэра на сервере, нам нужно разрешить UDP-подключения к порту для VPN-сервера, 51190.

ufw разрешить 51190 / udp

Запуск службы

Теперь, когда настройка завершена, мы можем запустить службу Wireguard VPN.

Включить службу для запуска во время загрузки, запустите:

systemctl включить wg-quick @ wg0

Обратите внимание, что здесь wg0 это имя файла конфигурации.

Начать сервис, запустите:

сервис wg-quick @ wg0 start

Проверять что служба успешно запустилась:

статус службы wg-quick @ wg0

Убедитесь, что интерфейс мы создали в конфигурационном файле, запустил, используя команду IP.

ip а шоу wg0

Теперь сервер Wireguard VPN настроен и работает. Теперь настроим клиента.

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

Конфигурация клиента для Wireguard более или менее аналогична конфигурации сервера. Мы генерируем ключи для клиента, а затем создаем файл конфигурации.

Ключи безопасности

Чтобы сгенерировать открытый / закрытый ключ пара для клиента, запустите:

sudo su cd / etc / wireguard umask 077 wg genkey | тройник client_private_key | wg pubkey> client_public_key

Открытый и закрытый ключи для клиента теперь генерируются соответственно в файлах. client_private_key и client_public_key.

Убедитесь, что они были созданы, используя Кот команда.

кошка client_private_key кошка client_public_key

Скопируйте отображаемый закрытый ключ, так как нам нужно добавить его в файл конфигурации для клиента.

Конфигурационный файл

Создайте файл конфигурации с любым именем. Мы будем создавать его с именем wg0-client для этого примера.

vim wg0-client.conf

Добавьте следующую конфигурацию.

[Интерфейс] # IP-адрес и закрытый ключ адреса клиента = 10.20.43.2/24 PrivateKey = [Peer] # Открытый ключ, IP-адрес и порт сервера PublicKey = Endpoint =: 51190 AllowedIPs = 0.0.0.0/0,: : / 0

Введите адрес подсети для клиента. Как описано ранее, мы используем 10.20.43.2 для клиента в этом примере.

Добавьте закрытый ключ клиента сгенерированный на предыдущем шаге в строке 4 приведенного выше кода конфигурации.

В разделе «Peer» мы добавляем информацию о сервере Wireguard VPN. мы хотим подключиться к.

Введите открытый ключ сервера. Введите IP-адрес сервера, что мы ранее отметили, и перенос в данном формате на Конечная точка. Это порт, который мы указали в файле конфигурации сервера и на котором запущена служба VPN на сервере.

Разрешенные IP-адреса следует вводить в том виде, в каком они заданы (0.0.0.0/0), чтобы любой запрос на динамический общедоступный IP-адрес, используемый клиентом, всегда перенаправлялся на сервер VPN.

Сохраните и выйдите из файла. При использовании vim нажмите Esc, затем введите : wq и нажмите Входить для сохранения и выхода.

Включите клиентскую службу запускать при каждой загрузке и запустить его.

systemctl включить wg-quick @ wg-client service wg-quick @ wg-client start

Проверять если служба запущена.

статус службы wg-quick @ wg-client

Добавление пира к серверу

Теперь у нас есть и запущены сервер и клиент VPN. Однако безопасный туннель между ними не устанавливается, если мы не установим одноранговое соединение между сервером и клиентом.

Возвращаться к серверу. Первый, остановить службу VPN.

сервис wg-quick @ wg0 stop

Затем откройте файл конфигурации, чтобы добавить конфигурацию для однорангового узла (клиент).

vim /etc/wireguard/wg0.conf

Добавить следующие строки в файл.

[Peer] PublicKey = AllowedIPs = 10.20.43.2/32

В настоящее время, снова запустить службу VPN.

сервис wg-quick @ wg0 start

Вот и все! Это вся конфигурация, необходимая для настройки клиента и сервера Wireguard VPN. Давайте теперь протестируем наш VPN.

Тестирование VPN

Во-первых, давайте сделаем простой эхо-запрос от клиента к серверу, чтобы убедиться, что связь через туннель VPN работает. Выполните на клиенте следующее:

пинг 10.20.43.1

Следующий, откройте веб-браузер и откройте любой веб-сайт чтобы проверить, можете ли вы подключиться к Интернету с клиентского компьютера. Вы также можете проверить подключение к Интернету из командной строки, используя wget.

wget 

Теперь мы проверили подключение к туннелю и подключение к Интернету. Если оба работают, теперь нам нужно убедиться, что весь интернет-трафик, поступающий к клиенту, проходит через сервер.

Для этого нам просто нужно проверить IP-адрес клиента, видимый в Интернете. Один из способов сделать это - зайти на сайт whatsmyip.org. Или же из командной строки мы можем запросить другую аналогичную службу, называемую IP-информацией, с помощью Curl.

Выполните на клиентском компьютере следующее

curl //ipinfo.io/ip

да. Это общедоступный IP-адрес Linode, на котором размещен VPN-сервер. Вот как достигается анонимность с помощью VPN, поскольку теперь во всем Интернете виден IP-адрес VPN-сервера, а не вашего компьютера.

Вывод

Простота настройки - одно из наиболее важных преимуществ Wireguard по сравнению с традиционным программным обеспечением VPN, таким как OpenVPN, для настройки которого требуется более высокий уровень знаний в области сетей и маршрутизации. Однако отсутствует подробная официальная документация для Wireguard, что может вызвать проблемы, если ваша установка Wireguard выдает ошибки или работает не так, как ожидалось.

Тем не менее Wireguard - отличный выбор, если вам нужен собственный VPN для безопасной связи через Интернет. Чтобы узнать больше о Wireguard, протоколах и технологиях, которые он использует, вы можете посетить официальный сайт.

Категория: Linux