Обход замедления ютуба без GoodbyeDPI

Обход замедления ютуба без GoodbyeDPI

Все актуальные способы обхода замедления Ютуб я собрал в тг канале — для Smart TV, Android, IOS, ПК, итд.

Предисловие

В статье будут рассмотрены три независимых варианта прохождения трафика транзитом с помощью:

  • Double openVPN
  • openVPN + vtun
  • openVPN + tun2proxy через socks5 прокси

У меня провайдер заблокировал мой openvpn. Сначала обычный провайдер, а потом и мобильный тоже. Это был обычный vds сервер за рубежом с openvpn. Использовался исключительно в личных целях. После блокировки я просто решил проверить, а будет ли работать doublevpn, так как у меня был сервер еще и в России. Оказалось, что все отлично работает с помощью double. Суть этой технологии в том, что интернет‑трафик проходит через два сервера вместо одного. Об этом хорошо забытом инструменте и пойдет речь в статье, возможно, кому‑то это будет полезно. Так же я в статье на всякий случай рассмотрел варианты туннелировать трафик и с помощью vtun или socks5 прокси.

Вариант I. DoubleVPN

Схема double vpn
Схема double vpn

Конечно, первое, что пришло в голову - это просто соединить два сервера в России и в другой стране с помощью openvpn. И это получилось без проблем. Вот ниже мое решение:

Шаг первый. Установка openVPN на обоих серверах

Все, что я пишу, подходит так или иначе для любых *nix серверов, будь то ubuntu, centos, fedora, rocky и т.д.

Установить можно openvpn готовым скриптом, например, вот таким:

После того как вы запустили скрипт на обоих серверах, можно перейти к настройкам каждого из них.

Шаг два. Настройка на зарубежном VDS

На сервере в стране Х настройка очень простая. После того как вы запустили вышеуказанный скрипт и openvpn установился, все что нужно сделать - это отредактировать файл конфигурации, замените его следующим содержимым.

/etc/openvpn/server/server.conf :

port XXXX # Порт на котором у вас работает openvpn proto udp dev tun ca ca.crt cert server.crt key server.key dh dh.pem tls-crypt tc.key remote-cert-tls client server 10.100.39.0 255.255.255.0 keepalive 10 120 persist-key persist-tun verb 3 sndbuf 0 rcvbuf 0 push "route 10.100.39.0 255.255.255.0"

Далее сделайте рестарт опенвпн сервера:

systemctl restart [email protected]

И скопируйте клиентский ключ, который был создан при установке на российский VDS. Например, с помощью

scp

На этом всё. Настройка зарубежного сервера завершена.

Шаг три. Настройка российского VDS.

На российском vds после установки openvpn из скрипта уже работает впн-сервер (10.8.0.0/24). Мы его трогать не будем. Все что нам надо сделать - это запустить на российском vds еще и зарубежного open-vpn клиента.

Редактируем /etc/sysctl.conf

Втыкаем следующие строки:

net.ipv4.ip_forward=1 net.ipv4.conf.tun0.rp_filter=0 net.ipv4.conf.tun1.rp_filter=0

Строки net.ipv4.conf.tun0.rp_filter=0 и net.ipv4.conf.tun1.rp_filter=0 отключают проверку reverse path filtering для интерфейсов tun0 и tun1 соответственно. Можно ребутнуть сервер или ввести соответствующие команды.

Редактируем файл:

/etc/iproute2/rt_tables

И добавляем в него строку:

150 vpn_net

Теперь нам надо создать два скрипта, которые будут выполняться при старте зарубежного openvpn клиента и при остановке.

/etc/openvpn/server1_up.sh

/sbin/ip rule add from 10.8.0.0/24 table vpn_net /sbin/ip route add default dev tun1 table vpn_net

/etc/openvpn/server1_down.sh

/sbin/ip rule del from 10.8.0.0/24 table vpn_net /sbin/ip route del default dev tun1 table vpn_net

На оба скрипта вешаем

chmod +x /etc/openvpn/server1_up.sh

и

chmod +x /etc/openvpn/server1_down.sh

Теперь нам надо взять клиентский конфиг, который мы взяли на зарубежном сервере. Сменить ему расширение: вместо .ovpn написать .conf

mv my_client.ovpn my_client.conf

Положить в папку: /etc/openvpn/client и отредактировать примерно таким образом:

client dev tun proto udp remote XX.XX.XX.XX YY YY # IP и порт зарубежного VDS resolv-retry infinite nobind persist-key persist-tun remote-cert-tls server auth SHA512 cipher AES-256-CBC verb 3 script-security 2 up "/etc/openvpn/server1_up.sh" down /etc/openvpn/server1_down.sh # До этого место. Дальше не трогаем. <ca> -----BEGIN CERTIFICATE----- wIBAgIJAL0WnyzV8N87MA0 ......

Указываем, что у нас будут стартовать скрипты при запуске и остановке клиента.

Запускаем опенвпн-клиент

systemctl start openvpn-client@my_client

Добавляем новое правило iptables

iptables -t nat -I POSTROUTING -s 10.8.0.0/24 -o tun1 -j MASQUERADE

А старое nat правило, которое добавил установщик Nyr/openvpn-install, удаляем. Сохраняем iptables тем способом, которые есть в вашем *nix, так чтобы они сработали после загрузки. И делаем автостарт нашего клиента:

systemctl enable openvpn-client@my_client

Проверяем, что все работает, с помощью команд

ip route show table all|grep vpn_net ip rule list| grep vpn_net ip address

С помощью openvpn-install создаем необходимое кол-во опенвпн ключей.

Вариант II. OpenVPN + Vtun

Туннель трафика с помощью VTUN
Туннель трафика с помощью VTUN

В первом варианте у нас был openvpn + openvpn, но нам ничего не мешает соединить, например, российский VDS и зарубежный с помощью старого и доброго vtun. И точно так же туннелировать трафик

Шаг первый. Установка vtun на обоих серверах

Vtun можно собрать из исходников. Будем считать, что вы на обоих серверах vtun и openvpn поставили. Форвард пакетов разрешили, см. настройки у варианта № 1.

Шаг второй. Запуск vtun сервера на зарубежном сервере

Для сервера можно взять примерно такой конфиг и положить его в файл /etc/vtund.conf:

options { port 5000; ifconfig /sbin/ifconfig; } # Default session options default { proto tcp; # TCP protocol compress no; # Compression is off encrypt no; # ssh does the encryption speed 0; # By default maximum speed keepalive yes; stat yes; } my_tunnel { passwd MY_STRONG_PASS; # Password type tun; # IP tunnel proto tcp; # TCP protocol up { ifconfig "%% 10.3.0.2 pointopoint 10.3.0.1 mtu 1500"; }; down{ ifconfig "%% down"; }; }

Открываем порт 5000 и добавляем SNAT правила, где to-source XX.XX.XX.XX это белый IP в стране Х.

-A INPUT -p tcp -m tcp --dport 5000 -j ACCEPT -A POSTROUTING -s 10.3.0.0/24 -j SNAT --to-source XX.XX.XX.XX

Запускаем:

vtund -s

Проверяем, должен появиться интерфейс tun и ip.

ip address

Шаг три. Запуск vtun клиента и openvpn в России

Openvpn ставим как обычно, см. вариант 1.

А вот настройки vtun на российском сервере

options { port 5000; # Path to various programs ifconfig /sbin/ifconfig; ip /sbin/ip; } # Default session options default { compress no; encrypt no; speed 0; keepalive yes; stat yes; } my_tunnel { passwd PASS; # Password type tun; # IP tunnel proto udp; # TCP protocol up { # 10.3.0.1 локальный ip # 10.3.0.2 удаленный ip ifconfig "%% 10.3.0.1 pointopoint 10.3.0.2 mtu 1500"; ip "rule add from 10.8.0.0/24 table vpn_net"; ip "route add default dev %% table vpn_net"; }; down{ ip "rule del from 10.8.0.0/24 table vpn_net"; ip "route del default dev %% table vpn_net"; ifconfig "%% down"; }; }

Запускаем командной:

vtund my_tunnel ip_адрес_вашего_зарубежного_сервера

Точно так же как и с опенвпн маскарадим трафик:

iptables -t nat -I POSTROUTING -s 10.8.0.0/24 -o tun1 -j MASQUERADE

После этого все должно заработать. Если не работает, то убедитесь, что пинги проходят между 10.3.0.1 и 10.3.0.2 и смотрите логи.

Конфигурация vtun дана для примера. Там по желанию можно и трафик передавать по udp, шифровать, сжимать и т.д.

Вариант III. OpenVPN + tun2proxy

socks5 соединение
socks5 соединение

В третьем варианте мы закинем openvpn трафик в socks5 и так же выпустим наружу. Хотя с помощью tun2proxy можно туннелировать и в http прокси, поэтому даже зарубежный VDS не обязателен, достаточно иметь ssh доступ в стране Х или какую-нибудь http-проксю.

Tun2proxy - это туннельный интерфейс для HTTP- и SOCKS-прокси на Linux, Android, macOS, iOS и Windows:

  • HTTP‑прокси (без аутентификации, базовая и дайджест‑аутентификация)
  • Поддержка SOCKS4 и SOCKS5 (без аутентификации, аутентификация по имени пользователя и паролю)
  • Поддержка SOCKS4a и SOCKS5h (через функцию виртуального DNS)
  • Минимальная настройка конфигурации для маршрутизации всего трафика
  • Поддержка IPv4 и IPv6
  • Механизм обхода GFW для определенных случаев использования
  • Поддержка SOCKS5 UDP
  • Встроенная поддержка проксирования DNS через TCP

Установка и настройка

Вся установка и настройка делается на сервере в России. На первом сервере. На втором (зарубежном сервере) лишь нужен ssh аккаунт для создания socks5 прокси.

Я поставил rust последнюю версию

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

И далее запустил установку

$HOME/.cargo/bin/cargo install tun2proxy

И он благополучно установился, проверил что все ок:

$HOME/.cargo/bin/tun2proxy --help

Почитал справку по использованию. Дальше я создал для проверки ssh socks5 tcp динамическую проксю такой командой:

ssh -D 14017 -q -C -N [email protected]

Повесил на порт 14017. По хорошему, надо было бы udp socks5 делать (но мы же не ищем легких путей), и для теста так интереснее.

Далее запустил tun2proxy командой:

$HOME/.cargo/bin/tun2proxy --tun tun1 --proxy "SOCKS5://127.0.0.1:14017"

Потом поднял сетевой интерфейс, т.к. по умолчанию он отключен:

ifconfig tun1 up

Это и есть фишка tun2roxy, что он создает сетевой интерфейс. То есть если набрать, например ifconfig, то при включенном tun2roxy можно увидеть еще одну "сетевую карту", которую он создал на основе прокси. А если есть tun1, то можно уже делать все, что мы захотим, почти так же как и в предыдущих вариантах.

Интерфейс tun1, который создал tun2proxy на основе socks5 прокси
Интерфейс tun1, который создал tun2proxy на основе socks5 прокси

Проверил, что все работает такой командой:

curl --interface tun1 ifconfig.me

В ответ получил IP адрес своего зарубежного сервера. Все окей, трафик завернулся в tun1 и вышел из-за рубежа.

Теперь надо заставить openVPN ходить таким же макаром, чтобы выпустить наружу трафик openVPN через tun1 & socks5.

/etc/sysctl.conf:

net.ipv4.ip_forward=1 net.ipv4.conf.tun0.rp_filter=0 net.ipv4.conf.tun1.rp_filter=0 net.ipv4.conf.all.route_localnet=1

В файл:

/etc/iproute2/rt_tables

Добавил строчку:

150 vpn_net

И ввел команды:

/sbin/ip rule add from 10.8.0.0/24 table vpn_net /sbin/ip route add default dev tun1 table vpn_net

И дальше прикол, если просто замаскарадить трафик командой:

iptables -t nat -I POSTROUTING -s 10.8.0.0/24 -o tun1 -j MASQUERADE

то работать не будут DNS запросы, ведь они идут не по TCP. Как я и писал выше, обычный socks5 tcp прокси не очень-то и подходит. Так что перед тем как маскарадить, мне пришлось поставить dnsproxy и запустить его командой:

./dnsproxy -u 8.8.8.8:53

И сам tun2proxy на этот раз запустил командой, что указана выше, но с доп. ключом --dns direct и так же изменил настройку клиентского опенвпн, чтобы он с DNS запросами шел ко мне локально на сервер.

После этого все заработало и openvpn клиент вышел наружу через этот туннель.

Переходите в мой тг-канал, где я регулярно выкладываю полезные сервисы и приложения для жизни

6262
1111
22
22
11
55 комментариев

Какой адский пердолинг

39
4
2
Ответить

как и вся жизнь в рф

8
6
Ответить

ТЫ ЧЕ НАПИСАЛ НАХУЙ НА ЦЕЛУЮ КНИГУ
ТВ АНДРОИД - ПОВЕРТУНЕЛЬ
ПК БРАУЗЕР РАСШИРЕНИЕ - ЮБУСТ ИЛИ ПРОКСИ
ВСЕ

12
11
Ответить

Проблема в том, что повертунель работает не особо стабильно. Прокси/Юбуст же блокируется крайне крайне легко.

Ответить

Легче в Казахстан переехать, ей богу.

9
Ответить

В твоём Казахстане так то тоже куча важных сайтов перебанены Казкомнадзором

3
Ответить