Привет, Хабр!
В связи с последними событиями вокруг видео хостинга YouTube, ситуация вынуждает искать технические решения для восстановления доступа к сервису. В этой статье я хочу поделиться своим техническим опытом по восстановлению доступа к сервису с помощью дешевого одноплатника Orange Pi Zero 2 от компании Xunlong Software.
Получается так, что в ходе моих разработок в моем арсенале остаются "ненужные" железки, одной из этих железок оказалась плата Orange Pi Zero 2, ниже представлен внешний вид устройства и технические характеристики:
Hardware specification
CPU | Allwinner H616 64-bit high-performance Quad-core Cortex-A53 processor |
GPU | • Mali G31 MP2• Supports OpenGL ES 1.0/2.0/3.2、OpenCL 2.0 |
Video decoding | • H.265 Main10@L5.1 decoder up to 4K@60fps or 6K@30fps• VP9 Profile 2 decoder up to 4K@60fps• AVS2 JiZhun 10bit decoder up to 4K@60fps• H.264 BP/MP/HP@L4.2 decoder up to 4K@30fps |
Video encoding | • H.264 BP/MP/HP encoder up to 4K@25fps or 1080p@60fps• JPEG snapshot performance of 1080p@60fps |
Memory(SDRAM) | 512MB/1GB DDR3 (Shared with GPU) |
Onboard Storage | • TF card slot• 2MB SPI Flash |
Onboard Network | Support 1000M/100M/10M Ethernet |
Onboard WiFi+BT | • 859 Chip• Support IEEE 802.11 a/b/g/n/ac• Support BT5.0 |
Video Outputs | • Micro HDMI 2.0a up to 4K@60fps• TV CVBS output, Support PAL/NTSC(Via 13pin interface board) |
Audio output | • Micro HDMI• 3.5mm audio port (Via 13pin interface board) |
Power Source | Type-C interface 5V3A input |
USB 2.0 Ports | 3*USB 2.0 HOST(Two of them are via 13pin interface board) |
Low-level peripherals | • 26pin header with I2C, SPI, UART and multiple GPIO ports• 13pin header with 2*USB Host, IR pin, Tv-out、AUDIO (no MIC) and 3 GPIO ports |
Debug serial port | UART-TX、UART-RX and GND |
LED | Power led & Status led |
IR receiver | Support IR remote control (via 13pin interface board) |
Supported OS | Android10、Ubuntu、Debian |
Appearance specification introduction
Dimension | 53mm×60mm |
Weight | 30g |
Так как мои устройства, которые используют видеосервис YouTube, подключены через беспроводное соединение и исходя из спецификации платы, вырисовывается следующая концепция:
Проводной сетевой интерфейс (Ethernet) мы будем использовать для (внешнего) подключения к сети интернет, в моем случае к сетевому роутеру, а на беспроводном модуле одноплатника мы реализуем Wi-Fi Хотспот для подключения наших устройств, и вся "магия" будет выполняться с помощью установленного на одноплатник ПО.
Установка программного обеспечения
В качестве операционной системы используется Debian 12 без графической оболочки, скачать образ системы можно на официальном сайте Orange Pi.
Wi-Fi хотспот в данном решении реализован с помощью пакета hostapd, перед дальнейшими действиями, рекомендуется обновить пакеты с помощью команды
sudo apt-get update && apt-get upgrade
Установка и настройка hostapd
sudo apt-get install hostapd
Редактируем файл конфигурации /etc/default/hostapd
sudo nano /etc/default/hostapd
В файле конфигурации раскомментируем следующую строку
DAEMON_CONF="/etc/hostapd/hostapd.conf"
И на всякий случай остановим сервис hostapd
service hostapd stop
Отредактируем файл конфигурации нашего Wi-Fi хотспота:
sudo nano /etc/hostapd/hostapd.conf
Приведем файл к следующему содержанию
interface=wlan0
driver=nl80211
country_code=RU
ssid=INTERNETFORYOUTUBE #Wi-Fi AP SSID
hw_mode=a
channel=36
ieee80211n=1
ieee80211ac=1
vht_capab=[VHT80][SHORT-GI-80]
wpa=2
wpa_passphrase=YOUTUBE12345 #PASSWORD
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
auth_algs=1
macaddr_acl=0
В данной конфигурации реализована Wi-Fi точка доступа 5 ГГц, стандарт 802.11n, 802.11ac, частотный канал 36, wlan0 - беспроводной сетевой интерфейс, определяется с помощью команды:
ip a
Далее нам необходимо сконфигурировать беспроводной интерфейс, отредактировав следующий файл с помощью команды:
sudo nano /etc/network/interfaces
Содержимое файла нужно привести к следующему
source /etc/network/interfaces.d/*
# Network is managed by Network manager
auto lo
iface lo inet loopback
auto wlan0
iface wlan0 inet static
address 192.168.50.1
netmask 255.255.255.0
gateway 192.168.50.1
В данной файле мы прописали статическую конфигурацию адреса для беспроводного интерфейса.
Теперь, для корректной работы нашего хотспота, необходимо настроить автоматическую раздачу адресов для клиентов. Для этого реализуем DHCP сервис с помощью dnsmasq.
Установка dnsmasq:
sudo apt-get install dnsmasq
И, на всякий случай, остановим сервис
service dnsmasq stop
Конфигурируем dnsmasq
sudo nano /etc/dnsmasq.conf
И приводим файл конфигурации к следующему содержимому
interface=wlan0 # Use interface wlan0
listen-address=192.168.50.1 # Explicitly specify the address to>
bind-interfaces # Bind to the interface to make sur>
server=8.8.8.8 # Forward DNS requests to Google DNS
domain-needed # Don't forward short names
bogus-priv # Never forward addresses
dhcp-range=192.168.50.50,192.168.50.150,12h # IP range DHCP
dhcp-option=6,192.168.50.1,8.8.4.4 # Alternative DNS servers for clients
В своей магии мы будем использовать локальный прокси сервер Socks 5, и для возможности его использования, мы воспользуемся пакетом Redsocks
Установка и настройка redsocks
sudo apt-get install redsocks
Редактируем конфигурационный файл
sudo nano /etc/redsocks.conf
Приведем файл конфигурации к следующему содержимому:
base {
log_debug = off;
log_info = on;
log = "file:/var/log/redsocks.log";
daemon = on;
redirector = iptables;
}
redsocks {
local_ip = 0.0.0.0;
local_port = 12345;
ip = 127.0.0.1;
port = 1080;
type = socks5;
}
Теперь нам необходимо завернуть весь трафик от клиентов хотспота в наш будущий socks 5 прокси. Реализуем данную задачу с помощью iptables:
sudo iptables -t nat -N REDSOCKS
sudo iptables -t nat -A REDSOCKS -d 192.168.50.0/24 -j RETURN # Исключаем локальную сеть
sudo iptables -t nat -A REDSOCKS -p tcp -j REDIRECT --to-ports 12345
sudo iptables -t nat -A PREROUTING -i wlan0 -p tcp -j REDSOCKS
Далее нам желательно сохранить данные правила и реализовать их загрузку при старте системы:
Сохранение текущих правил iptables в файл iptables.rules. Создаем файл и ограничиваем к нему доступ
sudo touch /etc/iptables.rules
sudo chmod 640 /etc/iptables.rules
Сохраняем текущие правила iptables в файл
sudo iptables-save | sudo tee /etc/iptables.rules
Автозагрузка сохраненных правил. В /etc/network/if-pre-up.d/ создаём файл iptables, со следующим содержимым:
#!/bin/sh
iptables-restore < /etc/iptables.rules
exit 0
Делаем созданный сценарий исполнимым
sudo chmod +x /etc/network/if-pre-up.d/iptables
Теперь немного магии, чтобы у нас все заработало, будем использовать "ciadpi"
Создаем сервис ciadpi не под root пользователем, например orangepi. Входим под пользователем orangepi и клонируем репозиторий:
git clone https://github.com/hufrea/byedpi
Переходим в папку с репозиторием и собираем
сd byedpi
make
Далее нам необходимо создать сервис для автозагрузки нашей магии:
nano /etc/systemd/system/byedpi_orange_pi.service
И сохраняем следующее содержимое
[Unit]
Description=dpi port 1080
After=network.target
[Service]
User=orangepi
Group=orangepi
ExecStart=/home/orangepi/byedpi/ciadpi --disorder 1 --auto=torst --tlsrec 1+s
[Install]
WantedBy=multi-user.target
Добавляем скрипт в автозагрузку
systemctl enable byedpi_orange_pi
Перезагружаем систему и проверяем работу
sudo shutdown -r now
Подведем итоги
В данной статье я постарался доходчиво описать свой технический опыт восстановления доступа к YouTube с помощью отладочной платы Orange Pi zero 2.
Если статья вам понравилась, то поддержите её стрелочкой вверх. Если есть что добавить или хотите поделиться подобным опытом, то добро пожаловать в комментарии! Всем добра, здоровья и спасибо за внимание!
Обратите внимание, что данная статья не популяризует и не склоняет пользователя к обходу блокировок. Здесь лишь описан частный технический случай, который является труднореализуемым со стороны обычного обывателя.