Изначально я подготовил подробное пошаговое руководство по установке и настройке сервера WireGuard. Однако в процессе использования стало ясно, что WireGuard не идеально подходит для сложных конфигураций, его часто блокируют провайдеры интернета, и он не поддерживает TCP. WireGuard легко обнаруживается провайдерами, поскольку изначально не предназначался для обхода блокировок. В то же время, для простых задач, таких как пробивка фаервола в корпоративной сети или создание личного VPN-сервера, WireGuard отлично подходит благодаря своей простоте настройки.
Для установки сервера WireGuard требуется ручное создание ключей, выбор подсети и задание нескольких параметров. Также необходимо создавать ключи и конфигурационные файлы для каждого клиента, что неудобно при большом числе пользователей или необходимости часто изменять состав клиентов.
Как говорится прежде чем делать самому, посмотри, что уже сделали до тебя. Задачу автоматизации этих действий можно решить с помощью специальных программ. После анализа доступных решений в интернет для установки сервера Wireguard, я выделил для себя 3 автоматических решения для установки сервера WireGuard.
WireGuard — это современный VPN-протокол, отличающийся высокой скоростью и использованием передовых криптографических алгоритмов. В сравнении с IPsec и OpenVPN, он проще в настройке и более универсальный, что позволяет его широкое применение в различных сценариях. Разработчики описывают WireGuard как простой и быстрый VPN современного уровня без излишней сложности. WireGuard стремится быть более быстрым, компактным и эффективным по сравнению с IPsec (трудно создать что-то хуже IPsec) и OpenVPN, нацеленным на высокую производительность.
Wireguard — это одноранговая VPN, то есть он не использует модель клиент-сервер. В зависимости от конфигурации одноранговый узел может действовать как традиционный сервер или клиент. Он работает путем создания сетевого интерфейса на каждом одноранговом устройстве, которое действует как туннель. Одноранговые узлы аутентифицируют друг друга, обмениваясь и проверяя открытые ключи, имитируя модель SSH. Открытые ключи сопоставляются со списком IP-адресов, разрешенных в туннеле. Трафик VPN инкапсулируется в UDP.
Шифрование WireGuard основано на открытых и закрытых ключах, позволяющих одноранговым узлам устанавливать зашифрованный туннель между собой. Каждая версия WireGuard использует определенный набор криптографических шифров, чтобы обеспечить простоту, безопасность и совместимость с одноранговыми узлами. Для сравнения, другое программное обеспечение VPN, такое как OpenVPN и IPSec, использует безопасность транспортного уровня (TLS) и сертификаты для аутентификации, что делает настройку VPN, использующей TLS, более трудоемкой, сложной и подверженной ошибкам.
Преимущества:
Недостатки:
Для выбора провайдера VPS под VPN сервер важно учитывать несколько ключевых критериев: доступность локаций серверов по всему миру, поддержка IPv6 и высокая скорость соединения. Компании, такие как Aéza, Digital Ocean и PQ hosting, предлагают большой выбор географических регионов для размещения серверов, что позволяет оптимизировать соединение для пользователей в разных частях мира. Поддержка IPv6 важна для обеспечения современных сетевых стандартов.
Чтобы следовать этому руководству, вам понадобятся:
На первом месте автоустановщик WireGuard installer от angristan, потому что он доказал свой профессионализм создав ранее скрипт для развертывания OpenVPN, мы его рассматривали в статье OpenVPN для домохозяек за 5 минут в любом Linux.
Плюсы:
Минусы:
Загрузите и выполните скрипт. Ответьте на вопросы, заданные сценарием, а он позаботится обо всем остальном.
curl -O https://raw.githubusercontent.com/angristan/wireguard-install/master/wireguard-install.sh
chmod +x wireguard-install.sh
./wireguard-install.sh
Welcome to the WireGuard installer! The git repository is available at: https://github.com/angristan/wireguard-install I need to ask you a few questions before starting the setup. You can keep the default options and just press enter if you are ok with them. IPv4 or IPv6 public address: xxx.xxx.xxx.xxx Public interface: ens3 WireGuard interface name: wg0 Server WireGuard IPv4: 10.66.66.1 Server WireGuard IPv6: fd42:42:42::1 Server WireGuard port [1-65535]: 50245 First DNS resolver to use for the clients: 1.1.1.1 Second DNS resolver to use for the clients (optional): 1.0.0.1 WireGuard uses a parameter called AllowedIPs to determine what is routed over the VPN. Allowed IPs list for generated clients (leave default to route everything): 0.0.0.0/0,::/0 Press any key to continue...
Управление после установки скрипта через вызов в консоли этого же файла wireguard-install.sh. Чтобы добавить нового пользователя следуйте подсказкам псевдоменю:
./wireguard-install.sh What do you want to do? 1) Add a new user 2) List all users 3) Revoke existing user 4) Uninstall WireGuard 5) Exit Select an option [1-5]:
Конфигурационный файл с префиксом wg0-client для клиента будет создан рядом с запускаемым файлом wireguard-install.sh. QR код отображается в консоли сразу после создания клиента.
Для повторного создания QR кода существующего клиента, используйте утилиту qrencode. В команде ниже заменить название файла wg0-client-test1.conf на нужный вам клиентский файл:
qrencode -t ansiutf8 -l L < wg0-client-test1.conf
Всё! У вас рабочий VPN сервер на основе WireGuard.
WireGuard-UI — это веб-интерфейс для управления WireGuard, который упрощает настройку и администрирование VPN-сервера WireGuard. Этот интерфейс позволяет пользователям без глубоких знаний командной строки легко настраивать и управлять сервером WireGuard.
Основные функции WireGuard-UI:
Firezone — это мощный инструмент для управления VPN-серверами, предназначенный для корпоративного использования. Он упрощает развертывание и управление WireGuard VPN через удобный веб-интерфейс.
Основные характеристики Firezone:
Firezone собирает телеметрию для улучшения разработки, но это можно отключить при установке или позже через переменную окружения TELEMETRY_ENABLED.
Для всех инструкций вам потребуется конфигурационный файл или QR код от администратора WireGuard сервера. Скачать клиентов WireGuard для любой поддерживаемой платформы можно по адресу: https://wireguard.com/install/.
Конфигурационный файл содержит настройки для подключения к серверу. Этот файл удобен тем, что его можно просто импортировать в приложение, и оно автоматически настроится.
Рекомендуется иметь отдельный конфигурационный файл для каждого устройства. Если использовать один и тот же конфиг для подключения с нескольких устройств, может возникнуть конфликт, из-за которого как минимум одно из устройств не сможет подключиться.
sudo apt install wireguard
После этого создайте файл конфигурации клиента
nano /etc/wireguard/wg0.conf
Для запуска соединения введите следующую команду:
sudo wg-quick up wg0
Если нужно, чтобы подключение по WireGuard устанавливалось автоматически при запуске системы, добавьте wg-quick в автозагрузку:
systemctl enable wg-quick@wg0.service
В большинстве решений в создаваемых конфигах есть строка с DNS-серверами
DNS = $DNS1, $DNS2
Эта строка обязательна для MacOS, iOS и Windows и работает там без проблем. А вот в Linux всё не так просто. Проблема в том, что wg-quick использует resolvconf для управления DNS и не поддерживает systemd-resolved, который используется почти везде. Для решения этой проблемы вы можете удалить эту строку DNS из клиентского конфигурационного файла. В этом случае будет использоваться DNS системы, например DNS-сервер на вашем домашнем роутере.
С настройкой Настройка MikroTik RB2011UiAS-2HnD-IN, Mikrotik RB750 как всегда полная жесть:(( Нашел для вас видео ибо если писать это текстом:( И так видео, как настроить клиента Wireguard на Mikrotik.
Ограничение делается при помощи ip адресов при помощи беcклассовой адресации CIDR.
Конфиг wg0.conf на сервере:
[Peer] PublicKey = <publickey peer1> AllowedIPs = 10.0.0.2/30
Вместо AllowedIPs = 10.0.0.2/32 можно сделать AllowedIPs = 10.0.0.2/30. В конфиге клиента прописать:
[Interface] PrivateKey = <privatekey peer 1> Address = 10.0.0.2/30
В этом примере разрешено подключение 4 устройств.
wg show all dump
Если вы устанавливаете Wireguard скриптами описанными выше, то они сами добавляют нужные настройки в файл /etc/sysctl.conf. Для оптимальной работы WireGuard на сервере Linux могут потребоваться определенные настройки ядра, которые обеспечат поддержку необходимых сетевых функций и улучшат производительность. Вот основные настройки, которые следует учесть:
net.ipv4.ip_forward = 1 net.ipv6.conf.all.forwarding = 1
net.ipv4.tcp_syncookies = 1
Весь список возможных настроек ядра Linux:
kernel.apparmor_restrict_unprivileged_userns = 1 kernel.printk = 4 4 1 7 net.ipv6.conf.all.use_tempaddr = 2 net.ipv6.conf.default.use_tempaddr = 2 kernel.kptr_restrict = 1 kernel.sysrq = 176 vm.max_map_count = 1048576 net.ipv4.conf.default.rp_filter = 2 net.ipv4.conf.all.rp_filter = 2 kernel.yama.ptrace_scope = 1 vm.mmap_min_addr = 65536 kernel.pid_max = 4194304 fs.protected_fifos = 1 fs.protected_hardlinks = 1 fs.protected_regular = 2 fs.protected_symlinks = 1 net.ipv4.tcp_syncookies = 0 net.ipv4.tcp_congestion_control = bbr net.ipv4.ip_forward = 1 net.ipv6.conf.all.forwarding = 1 net.ipv4.tcp_congestion_control = bbr
Протокол WireGuard обычно должен обходить брандмауэры, но есть одна проблема — поскольку протокол использует только протокол передачи UDP (сложно сказать, какой именно порт, хотя это может быть порт 51820), есть вероятность, что он может быть заблокирован брандмауэрами или сетевыми администраторами, которые вообще отключают UDP и разрешают только трафик TCP.
Если у вас есть время и желание, рекомендуется изучить такие инструменты, как Shadowsocks и XRay (или другие решения, маскирующиеся под HTTPS). Вы можете установить их вместе с WireGuard для повышения гибкости и безопасности.
Если вы хотите, чтобы устройства за клиентом могли использовать VPN-соединение для доступа к серверным ресурсам, вам нужно сделать проброс сетей. Чтобы пробросить сеть IP-адресов за клиентом в WireGuard, вам нужно настроить маршрутизацию трафика через клиентский интерфейс.
Предположим, что за клиентом находится сеть 192.168.2.0/24 и нам нужно сделать ее доступной для других IP входящих в нашу WireGuard сеть.
В случае проброса "серых" IP-адресов (приватных IP-адресов), MASQUERADE на клиенте может быть излишним, если все устройства и маршруты правильно настроены. В этом случае достаточно настроить правильные маршруты на сервере и клиенте WireGuard.
Настройка сервера WireGuard:
sudo nano /etc/wireguard/wg0.conf [Interface] PrivateKey = <серверный_приватный_ключ> Address = 10.0.0.1/24 ListenPort = 51820 [Peer] PublicKey = <публичный_ключ_клиента> AllowedIPs = 10.0.0.2/32, 192.168.2.0/24
sudo ip route add 192.168.2.0/24 dev wg0
Настройка клиента WireGuard:
[Interface] PrivateKey = <клиентский_приватный_ключ> Address = 10.0.0.2/24 [Peer] PublicKey = <публичный_ключ_сервера> Endpoint = <серверный_адрес>:51820 AllowedIPs = 10.0.0.0/24, 0.0.0.0/0
В данном случае 0.0.0.0/0 означает, что весь трафик будет направляться через VPN. Если нужно только пробросить определенные сети, укажите их в AllowedIPs.
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o wg0 -j MASQUERADE
Эти шаги помогут настроить проброс сети IP-адресов за клиентом в WireGuard, обеспечивая возможность маршрутизации трафика через VPN для устройств за клиентом.
Несмотря на некоторые ограничения, такие как отсутствие поддержки TCP и возможность блокировки провайдерами, WireGuard остается отличным выбором для личного использования и простых корпоративных задач. Благодаря своей скорости, легкости и использованию передовых криптографических алгоритмов, WireGuard становится все более популярным в сообществе ИТ-профессионалов.
Использование автоматизированных решений для установки и управления WireGuard может существенно упростить процесс и сэкономить время, особенно в случаях, когда требуется управление большим количеством клиентов. Рекомендуем ознакомиться с нашим каталогом VPN провайдеров. Надеемся, что предоставленные рекомендации и инструменты помогут вам эффективно настроить и использовать WireGuard VPN в вашей сети. По мере использования статья будет обновляться, добавьте себе ее в закладки.