Настройте собственный 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, протоколах и технологиях, которые он использует, вы можете посетить официальный сайт.