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
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