Как Orange Pi вернула мне Ютуб

в 6:20, , рубрики: diy-проекты, orangepi, YouTube
Обложка статьи

Обложка статьи

Привет, Хабр!

В связи с последними событиями вокруг видео хостинга YouTube, ситуация вынуждает искать технические решения для восстановления доступа к сервису. В этой статье я хочу поделиться своим техническим опытом по восстановлению доступа к сервису с помощью дешевого одноплатника Orange Pi Zero 2 от компании Xunlong Software.

Получается так, что в ходе моих разработок в моем арсенале остаются "ненужные" железки, одной из этих железок оказалась плата Orange Pi Zero 2, ниже представлен внешний вид устройства и технические характеристики:

Внешний вид Orange Pi Zero 2

Внешний вид 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.conf.

sudo nano /etc/default/hostapd.conf

В файле конфигурации раскомментируем следующую строку

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

В своей магии мы будем использовать локальный прокси сервер 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.

Если статья вам понравилась, то поддержите её стрелочкой вверх. Если есть что добавить или хотите поделиться подобным опытом, то добро пожаловать в комментарии! Всем добра, здоровья и спасибо за внимание!

Обратите внимание, что данная статья не популяризует и не склоняет пользователя к обходу блокировок. Здесь лишь описан частный технический случай, который является труднореализуемым со стороны обычного обывателя.

Автор: CyberexTech

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js