Browse Source

Merge remote-tracking branch 'upstream/main'

pull/102/head
Moroka8 2 months ago
parent
commit
20361cf07b
  1. 40
      README.md
  2. 27
      routes.ps1
  3. 25
      routes.sh

40
README.md

@ -1,9 +1,18 @@
# Good TURN
Проброс трафика WireGuard/Hysteria через TURN сервера VK звонков или Яндекс телемоста. Пакеты шифруются DTLS 1.2, затем параллельными потоками через TCP или UDP отправляются на TURN сервер по протоколу STUN ChannelData. Оттуда по UDP отправляются на ваш сервер, где расшифровываются и передаются в WireGuard. Логин/пароль от TURN генерируются из ссылки на звонок.
Проброс трафика WireGuard/Hysteria через TURN сервера VK звонков или ~~Яндекс телемоста~~. Пакеты шифруются DTLS 1.2, затем параллельными потоками через TCP или UDP отправляются на TURN сервер по протоколу STUN ChannelData. Оттуда по UDP отправляются на ваш сервер, где расшифровываются и передаются в WireGuard. Логин/пароль от TURN генерируются из ссылки на звонок.
Только для учебных целей!
## Похожие проекты
- https://github.com/MYSOREZ/vk-turn-proxy-android - клиент для андроида
- https://github.com/kiper292/wireguard-turn-android - клиент для андроида интегрированный в WireGuard
- https://github.com/WINGS-N/WINGSV - клиент для андроида с One UI, WireGuard, раздачей VPN с root
- https://github.com/nullcstring/turnbridge - клиент для IOS
- https://github.com/Urtyom-Alyanov/turn-proxy - реализация на Rust
- https://github.com/jaykaiperson/lionheart - аналог для https://stream.wb.ru (статья: https://habr.com/ru/articles/1017410/)
- https://github.com/kulikov0/whitelist-bypass - проброс через медиасервер SFU ВК и Яндекс Телемоста
## Настройка
Нам понадобится:
@ -45,7 +54,34 @@ curl -L -o server https://github.com/cacggghp/vk-turn-proxy/releases/latest/down
# Запуск сервера
./server -listen 0.0.0.0:56000 -connect 127.0.0.1:<порт wg>
```
#### Установка демона
На сервере в файле `/etc/systemd/system/vk-turn-proxy.service`
```
[Unit]
Description=VK Turn Proxy Service
After=network.target
[Service]
Type=simple
ExecStart=/opt/vk-turn-proxy/server-linux-amd64 -listen 0.0.0.0:56000 -connect 127.0.0.1:<wg_port>
KillMode=process
Restart=always
RestartSec=5
User=nobody
Group=nogroup
StandardOutput=append:/var/log/vk-turn-proxy/vk-turn-proxy.log
StandardError=append:/var/log/vk-turn-proxy/vk-turn-proxy_error.log
SyslogIdentifier=vk-turn-proxy
[Install]
WantedBy=multi-user.target
```
Где `/opt/vk-turn-proxy/server-linux-amd64` - путь к файлу, `<wg_port>` - порт сервера wg
```
systemctl daemon-reload
systemctl enable vk-turn-proxy.service
systemctl start vk-turn-proxy.service
```
#### Docker
Образ Docker публикуется в GitHub Container Registry:
@ -129,6 +165,8 @@ curl -L -o client https://github.com/cacggghp/vk-turn-proxy/releases/latest/down
**Если после включения VPN в терминале вылезают ошибки DNS, попробуйте в Wireguard включить VPN только для нужных приложений.**
#### IOS
- https://github.com/cacggghp/vk-turn-proxy/issues/76
#### Linux
В клиентском конфиге WireGuard меняем адрес сервера на `127.0.0.1:9000`, ставим MTU 1280

27
routes.ps1

@ -16,12 +16,33 @@ $input | ForEach-Object {
$addr = $_.Trim()
if ($addr -eq "") { return }
Write-Host "Добавляем маршрут к $addr через $gateway"
if ($addr -notmatch '^\d{1,3}(\.\d{1,3}){3}$') {
Write-Warning "Пропускаем неожиданный ввод: $addr"
return
}
$prefix = "$addr/32"
$existingRoutes = @(Get-NetRoute `
-DestinationPrefix $prefix `
-PolicyStore ActiveStore `
-ErrorAction SilentlyContinue)
if ($existingRoutes | Where-Object { $_.NextHop -eq $gateway }) {
Write-Host "Маршрут к $addr через $gateway уже существует"
return
}
if ($existingRoutes.Count -gt 0) {
Write-Host "Обновляем маршрут к $addr через $gateway"
$existingRoutes | Remove-NetRoute -Confirm:$false -ErrorAction Stop
} else {
Write-Host "Добавляем маршрут к $addr через $gateway"
}
New-NetRoute `
-DestinationPrefix "$addr/32" `
-DestinationPrefix $prefix `
-NextHop $gateway `
-PolicyStore ActiveStore `
-ErrorAction Stop
-ErrorAction Stop | Out-Null
}

25
routes.sh

@ -1,5 +1,26 @@
#!/bin/bash
set -euo pipefail
gateway="$(ip -o -4 route show to default | awk '/via/ {print $3}' | head -1)"
while read -r remote; do
sudo ip r add $remote via $gateway
if [[ -z "${gateway}" ]]; then
echo "Could not determine default gateway" >&2
exit 1
fi
ip_cmd=(ip)
if [[ "${EUID:-$(id -u)}" -ne 0 ]]; then
ip_cmd=(sudo ip)
fi
while IFS= read -r remote; do
remote="${remote%$'\r'}"
[[ -z "$remote" ]] && continue
if [[ ! "$remote" =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$ ]]; then
echo "Skipping unexpected input: $remote" >&2
continue
fi
echo "Ensuring route to $remote via $gateway"
"${ip_cmd[@]}" route replace "$remote" via "$gateway"
done

Loading…
Cancel
Save