В этой статье мы рассмотрим процесс настройки цепочки VPN серверов с помощью WireGuard на Windows. В Интернете есть множество руководств, посвященных построению и настройке цепочек VPN серверов, однако большинство из них основаны на Linux и требуют определенных навыков администрирования данной ОС. В предыдущей статье мы уже узнали, как настроить WireGuard VPN Server в Windows, здесь же мы используем ту же технологию для создания цепочки WireGuard VPN из двух хостов Windows с помощью WireGuard и WireSock. К написанию данной статьи меня подтолкнул вот этот вопрос на Reddit. Если опустить детали грустной ситуации с Internet в Иране, то останется следующая задача: So this is solution but i'm not expert in Linux so I didn't know how to do it technically  the solution?  1. buy one VPS Server located in Iran. 2. buy one VPS Server located out of Iran (Europe or USA) 3. tunnel Iran VPS to out side VPS so when I connect to Iran VPS from my home or office , all my packet send to vps out of Iran. and from that VPS , we can access to internet. Идея, как говорится, не нова, но за ней огромное будущее: клиент подключается к первому серверу WireGuard, который вместо пересылки клиентского трафика напрямую в Интернет туннелирует его на второй сервер WireGuard, который, в свою очередь, перенаправляет его в Интернет. Можно добавить и больше VPN-серверов в цепочку, получив Triple или Quadro VPN, однако, чем больше промежуточных серверов, тем больше задержки в цепочке и медленнее туннель.   Важное замечание: все серверы WireGuard в цепочке имеют полный доступ к незашифрованному клиентскому трафику. Чтобы избежать этого, мы могли бы рассмотреть возможность «вложения» одного туннеля в другой, чтобы только последний VPN-сервер в цепочке мог полностью его расшифровать. Однако это привело бы к увеличению потребления CPU на клиенте (двойное шифрование) и снижению пропускной способности из-за уменьшения MTU маршрута. Кроме того, клиенты WireGuard для Android и iOS не поддерживают более одного активного туннеля, поэтому в этой статье мы не будем рассматривать «вложенные» туннели WireGuard. Для чего может понадобиться "двойной" VPN, кроме отмеченной выше ситуации с Internet в Иране? В случае классического VPN подключения, интернет-провайдер может видеть адрес VPN сервера, и сопоставив данные, теоретически можно вычислить активность пользователя в "подконтрольной" сети. При использовании "двойного" трансграничного VPN туннеля, сопоставить трафик на компьютере пользователя и на конечном ресурсе уже не получится. Мы не будем рассматривать возможные конфигурации и провайдеров VPS, потому что существует множество прямых или косвенных факторов в каждом конкретном случае. Однако, если вы чувствуете себя комфортно с Windows Server Core, то VPS с 1 процессором и 1 ГБ ОЗУ должно быть достаточно для базовых потребностей.   Далее нам необходимо настроить каждый VPS следуя инструкции. Вкратце, нужно скачать и установить последнюю версию WireGuard for Windows и WireSock Gateway и запустив wg-quick-config -add - start создать начальную конфигурацию для сервера WIreGuard. Если вы выбрали Windows Server Core 2016/2019 для своего VPS, то процесс немного сложнее: нужно скопипастить и выполнить пять команд в PowerShell до запуска утилиты wg-quick-config.    При первом запуске wg-quick-config -add -start создает файлы конфигурации для сервера (wiresock.conf) и клиента (wsclient_1.conf), затем запускает туннель WireGuard используя wiresock.conf. Утилита также отображает конфигурацию клиента (wsclient_1.conf) в виде QR-кода, который можно отсканировать с помощью смартфона. Дополнительных клиентов можно добавить, вызвав wg-quick-config -add -restart.  До этого момента процесс установки и настройки идентичен как для VPN-сервера 1, так и для VPN-сервера 2, и в результате вы должны получить два работающих VPN сервера. Не забудьте настроить перенаправление портов и проверьте подключение к каждому из серверов. В случае возникновения проблем попробуйте просто перезагрузить VPS. WireSock Gateway основан на Windows Packet Filter, и в некоторых относительно редких случаях требуется перезагрузка после установки или переустановки драйвера.  Теперь давайте свяжем VPN-сервер 1 и VPN-сервер 2 через WireGuard туннель. Для этого на VPN-сервере 2 откройте wsclient_1.conf с помощью notepad.exe, скопируйте содержимое этого файла в буфер обмена, а затем вставьте его в локально работающий notepad, нам предстоит его немного отредактировать. Все что нам нужно сделать, это разрешить split tunneling в этой клиентской конфигурации, потому что на VPN-сервер 1 будут работать два туннеля одновременно, к тому же если этого не сделать, то при активации клиентского туннеля мы потеряем связь с сервером. Сделать это очень просто, просто замените AllowedIPs = 0.0.0.0/0 на AllowedIPs = 0.0.0.0/1, 128.0.0.0/1. В итоге получилась такая конфигурация:  Теперь создайте новый файл конфигурации на VPN-сервере 1 с именем vpn2.conf, скопируйте в него полученную конфигурацию и сохраните.    Есть два варианта, того, как запустить туннель между VPN-сервером 1 и VPN-сервером 2. Если VPN-сервером 1 работает под управлением Windows с интерфейсом рабочего стола, то можно использовать GUI клиента WireGuard для импорта и запуска только что созданного туннеля. Однако для этого руководства я установил два VPS c Windows Core Server 2019, поэтому выполним следующую команду в PowerShell: wireguard.exe /installtunnelservice "C:\users\vadim\vpn2.conf". Текущую конфигурацию туннелей VPN Server 1 можно посомтреть выполнив команду wg show: Теперь, если вы подключитесь к VPN-серверу 1 с помощью клиента WireGuard и проверите свой внешний IP-адрес, вы заметите, что он принадлежит VPN-серверу 2. Однако, если вы запустите DNS leak тест, вы заметите, что он обнаружит сети обоих серверов из нашей цепочки. Это происходит потому, что по умолчанию WireSock Gateway использует локальный DNS-сервер для ускорения разрешения DNS. Это может быть нежелательным поведением в случае цепочки VPN.  К счастью, это очень легко исправить. Сервис WireSock Gateway имеет специальный параметр командной строки, который определяет используемые DNS-сервера. Для этого запустите cmd от имени администратора на VPN-сервере 1 и перенастройте службу WireSock для использования любых нелокальных DNS-серверов (DNS запросы все равно будут перехвачены на VPN-сервере 2). В приведенном ниже примере мы используем 1.1.1.1 и 1.0.0.1 в этом качестве:    Если теперь запустите DNS leak тест, то увидите, что следов VPN-сервера 1 больше не обнаруживается. Software Developer