September 23, 2025

WireGuard&Wstunnel

VPN WireGuard + обфускатор Wstunnel.

В качестве порта wireguard используется порт 12345, в качестве подсети 192.168.100.10/32

Слать трафик будем на порт 443, что бы как web-сервер

В роли клиента выступает машина на windows

Создаем VPS сервер

VDS/VPS можно купить где угодно.. Облачных хостингов достаточно много на любой вкус и цвет. В качестве рабочих примеров timeweb.cloud и hostmenow.org . Первый попроще, второй с возможность оплачивать всем чем только можно и даже криптой.

Как итог на руках должны быть логин и пароль от сервера с Debian, на котором есть белый ip адрес.

Серверная часть wireguard

Устанавливаем wireguard и перемещаемся в папку

apt install wireguard iptables -y
cd /etc/wireguard

Создаем скрипт для создания правил iptables при запуске wireguard вставляем код

mcedit ./add-nat-routing.sh

Вставляем туда код

#!/bin/bash
IPT="/sbin/iptables"
IPT6="/sbin/ip6tables"
IN_FACE="eth0" # интерфейс с белым ip
WG_FACE="wg0"
SUB_NET="192.168.100.0/24"
WG_PORT="12345"
#SUB_NET_6="2001:db8::/64"
## IPv4 ##
$IPT -t nat -I POSTROUTING 1 -s $SUB_NET -o $IN_FACE -j MASQUERADE
$IPT -I INPUT 1 -i $WG_FACE -j ACCEPT
$IPT -I FORWARD 1 -i $IN_FACE -o $WG_FACE -j ACCEPT
$IPT -I FORWARD 1 -i $WG_FACE -o $IN_FACE -j ACCEPT
$IPT -I INPUT 1 -i $IN_FACE -p udp --dport $WG_PORT -j ACCEPT
## IPv6 ##
#$IPT6 -t nat -I POSTROUTING 1 -s $SUB_NET_6 -o $IN_FACE -j MASQUERADE
#$IPT6 -I INPUT 1 -i $WG_FACE -j ACCEPT
#$IPT6 -I FORWARD 1 -i $IN_FACE -o $WG_FACE -j ACCEPT
#$IPT6 -I FORWARD 1 -i $WG_FACE -o $IN_FACE -j ACCEPT

Создаем скрипт для удаления правил iptables при остановке wireguard

mcedit ./remove-nat-routing.sh

Вставляем код

#!/bin/bash
IPT="/sbin/iptables"
IPT6="/sbin/ip6tables"
IN_FACE="eth0"  # интерфейс с белым ip
WG_FACE="wg0"
SUB_NET="192.168.100.0/24"
WG_PORT="12345"
# SUB_NET_6="2001:db8::/64"
## IPv4 rules ##
$IPT -t nat -D POSTROUTING -s $SUB_NET -o $IN_FACE -j MASQUERADE
$IPT -D INPUT -i $WG_FACE -j ACCEPT
$IPT -D FORWARD -i $IN_FACE -o $WG_FACE -j ACCEPT
$IPT -D FORWARD -i $WG_FACE -o $IN_FACE -j ACCEPT
$IPT -D INPUT -i $IN_FACE -p udp --dport $WG_PORT -j ACCEPT
## IPv6 rules ##
#$IPT6 -t nat -D POSTROUTING -s $SUB_NET_6 -o $IN_FACE -j MASQUERADE
#$IPT6 -D INPUT -i $WG_FACE -j ACCEPT
#$IPT6 -D FORWARD -i $IN_FACE -o $WG_FACE -j ACCEPT
#$IPT6 -D FORWARD -i $WG_FACE -o $IN_FACE -j ACCEPT

Даем права

chmod -v +x /etc/wireguard/*.sh

Разрешаем форвардинг, редактируя файл

mcedit /etc/sysctl.d/10-wireguard.conf

Вставляем

net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1

Сохраняем

sysctl -p /etc/sysctl.d/10-wireguard.conf

Создаем ключи и выводим их на экран

wg genkey | tee privatekey | wg pubkey > publickey
wg genpsk > pskkey
cat privatekey # – приватныйключсервера
cat publickey # – публичный ключ сервера
cat pskkey # – распределенный ключ wiregurd для симметричного шифрования

Создаем конфигурацию сервера - редактируем файл интерфейса

mcedit /etc/wireguard/wg0.conf

[Interface]
Address = 192.168.100.0/24
PostUp = /etc/wireguard/add-nat-routing.sh
PostDown = /etc/wireguard/remove-nat-routing.sh
ListenPort = 12345
PrivateKey = приватный_ключ_сервера

[Peer]
PublicKey = публичный_ключ_клиента (появится в инструкции дальше)
PresharedKey = распределенный_ключ_wireguard
AllowedIPs = 192.168.100.10/32

Добавляем в автозапуск и рестартуем

systemctl restart wg-quick@wg0.service
systemctl enable wg-quick@wg0.service

Серверная часть wstunnel

Качаем дистрибутив под Linux на GitHub и копируем ссылку. В качестве примера ссылка на wstunnel_10.3.0_linux_amd64.tar.gz

wget -O wstunnel.tar.gz https://github.com/erebe/wstunnel/releases/download/v10.3.0/wstunnel_10.3.0_linux_amd64.tar.gz

Распаковываем и удаляем архив

tar -xzf wstunnel.tar.gz wstunnel && rm -fr ./wstunnel.tar.gz

Добавляем исполнения, переносим и проверяем что всё установлено

chmod +x wstunnel
mv wstunnel /usr/local/bin
wstunnel --version

Биндим порт (в нашем случае 443)

setcap cap_net_bind_service=+ep /usr/local/bin/wstunnel

Создаем ключ для авторизации wstunnel и сохраняем/запоминаем (понадобиться далее в инструкции)

openssl rand -base64 42

Создаем файл конфигурации сервиса

mcedit /etc/systemd/system/wstunnel.service

И добавляем конфигурацию

[Unit]
Description=Wstunnel for WireGuard
After=network-online.target
Wants=network-online.target

[Service]
User=root
Type=exec
ExecStart=/usr/local/bin/wstunnel server --restrict-http-upgrade-path-prefix ключ_авторизации_wstunnel wss://статичный_ip_сервера:443 --restrict-to 127.0.0.1:12345
Restart=on-failure

[Install]
WantedBy=multi-user.target

Рестартуем и добавляем в автозапуск

systemctl restart wstunnel
systemctl enable wstunnel

Клиентская часть wstunnel

Качаем дистрибутив под Windows на GitHub. В качестве примера ссылка на wstunnel_10.3.0_windows_amd64.tar.gz

curl.exe -fLo wstunnel.tar.gz https://github.com/erebe/wstunnel/releases/download/v10.3.0/wstunnel_10.3.0_windows_amd64.tar.gz

Распаковываем и переносим исполняемый файл куда-нибудь в Program Files например в папку wstunnel

tar -xzf wstunnel.tar.gz wstunnel.exe
xcopy wstunnel.exe "C:\Program Files\Wstunnel\"

Добавляем wstunnel в переменные среды

В пуске набираем "Изменение системных переменных среды" (Edit the system environment variables) проваливаемся в сервис.

Переменные среды/Enviroment Variables -> Изменить/Edit -> Создать/New

В нижнем окне (системные переменные/system variables) редактируем переменную Path и добавляем новый путь до папки wstunnel

C:\Program Files\Wstunnel\

Проверяем что всё сработало командой (должна появиться версия wstunnel)

wstunnel --version

Разрешаем исполнение скриптов через PowerShell (запустить от администратора)

reg add HKLM\Software\WireGuard /v DangerousScriptExecution /t REG_DWORD /d 1 /f

Вывод должен быть - «The operation completed successfully».

Клиентская часть wireguard

Выбираем и скачиваем клиента на сайте wireguard. Затем устанавливаем.

Далее переходим в папку wireguard

cd C:\Program Files\WireGuard

Создаем приватный и публичные ключи и выводим их на экран

 wg genkey > privatekey
 type privatekey | wg pubkey > pubkey
 type privatekey # – приватный ключ клиента
 type publickey # – публичный ключ клиента

Разрешаем исполнение скриптов через PowerShell (запустить от администратора)

Set-ExecutionPolicy RemoteSigned

Открываем блокнот и записываем в него конфигурацию, подставляя полученные ключи и данные

server_ip – статический ip адресс вашего сервера gateway_ip – ip адресс шлюза (посмотреть можно командой ipconfig)
[Interface]
PrivateKey = приватный_ключ_клиента
Address = 192.168.100.10/32
DNS = 8.8.8.8, 8.8.4.4
MTU = 1400
PostUp = route add server_ip mask 255.255.255.255 gateway_ip && start wstunnel client --http-upgrade-path-prefix ключ_авторизации_wstunnel_(из шага "Серверная часть wstunnel") -L udp://12345:127.0.0.1:12345 wss:// server_ip:443
PostDown = route delete server_ip mask 255.255.255.255 gateway_ip && powershell -command "(Get-Process -Name wstunnel).Kill()"

[Peer]
PublicKey = публиличный_ключ_сервера (из шага "Серверная часть wireguard")
PresharedKey = рспределенный_ключ_wireguard (из шага "Серверная часть wireguard")
AllowedIPs = 0.0.0.0/1, 128.0.0.0/1
Endpoint = 127.0.0.1:12345
PersistentKeepalive = 15

Cнимаем галку в окне надписью “Block untunneled traffic (kill-switch)”

Для клиентов на macOS / *nix

Устанавливаем ПО

  • На macOS делается через brew:
brew install wstunnel
brew install wireguard-tools
brew install iproute2mac
  • На *nix - подобной машине через apt:
apt install wstunnel wireguard-tools iproute2

Далее везде одинаково.

Генерим ключи

wg genkey | tee privatekey | wg pubkey > publickey
cat privatekey # – приватный ключ клиента
cat publickey # – публичный ключ клиента

Открываем блокнот и записываем в него конфигурацию, подставляя полученные ключи и данные. Сохраняем в файл wg0.conf (wg НОЛЬ)

server_ip – статический ip адресс вашего сервера gateway_ip – ip адресс шлюза (посмотреть можно командой ipconfig)
[Interface]
PrivateKey = приватный_ключ_клиента
Address = 192.168.100.10/32
DNS = 8.8.8.8, 8.8.4.4
MTU = 1400
PostUp = route add server_ip mask 255.255.255.255 gateway_ip
PostUp = wstunnel client --http-upgrade-path-prefix ключ_авторизации_wstunnel_(из шага "Серверная часть wstunnel) -L udp://12345:127.0.0.1:12345 wss:// server_ip:443
PostDown = route delete server_ip mask 255.255.255.255 gateway_ip
PostDown = killall wstunnel

[Peer]
PublicKey = публиличный_ключ_сервера (из шага "Серверная часть wireguard")
PresharedKey = рспределенный_ключ_wireguard (из шага "Серверная часть wireguard")
AllowedIPs = 0.0.0.0/1, 128.0.0.0/1
Endpoint = 127.0.0.1:12345
PersistentKeepalive = 15

В терминале переходим к файлу wg0.conf и подключаемся командой к серверу командой

wg-quick up ./wg0.conf