YouTube + OpenWRT | DesSolo
YouTube + OpenWRT

YouTube + OpenWRT

Как автоматически маршрутизировать трафик YouTube через VPN в OpenWRT с использованием официальных IP-диапазонов Google.

YouTube + OpenWRT

Если вы используете OpenWRT с подключением к удалённому VPN-серверу и хотите, чтобы YouTube работал корректно без полного туннелирования всего трафика (full tunnel), вам понадобится направлять только нужные IP-адреса через VPN. Это особенно актуально при использовании split tunneling, когда часть трафика идёт напрямую, а часть - через VPN.

Один из способов - вручную добавлять маршруты к IP-подсетям YouTube. Однако YouTube (и другие сервисы Google) использует множество динамически меняющихся IP-адресов, поэтому поддерживать список вручную неудобно. К счастью, Google публикует актуальные IP-диапазоны в формате JSON. В этой статье мы автоматизируем добавление маршрутов к этим подсетям при поднятии VPN-интерфейса в OpenWRT.


Получаем актуальные IP-диапазоны Google

Google регулярно обновляет список IP-адресов, используемых его сервисами, включая YouTube. Эти данные доступны по адресу:

🔗 https://www.gstatic.com/ipranges/goog.json

Этот JSON-файл содержит как IPv4, так и IPv6 префиксы, предназначенные для доступа к сервисам Google, включая YouTube, Google Cloud, и другие. Более подробно о содержимом файла можно прочитать в официальной документации:

📚 Google Cloud - IP ranges documentation


Создаём скрипт управления маршрутами

Создайте скрипт /root/scripts/youtube.sh со следующим содержимым:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#!/bin/sh

# update add del

set -e

DEVICE=vpn-vpn
IPV4_FILE_NAME=/tmp/ipv4_google.txt

function update {
	wget -q -O- https://www.gstatic.com/ipranges/goog.json | grep ipv4 | cut -d '"' -f 4 > $IPV4_FILE_NAME
}

function __update_if_missing {
	if [ ! -f $IPV4_FILE_NAME ]; then
		echo "updating ..."
		update
	fi
}

function __ip_ro {
	ACTION=$1

	while read line; do
		ip ro $ACTION $line dev $DEVICE
	done < $IPV4_FILE_NAME
}

function add {
	__update_if_missing
	__ip_ro add
}

function del {
	__update_if_missing
	__ip_ro del
}

$1

Да, можно было бы использовать jq и не приседать с grep и cut, но в условии ограниченных ресурсов роутера…


Настраиваем автоматическое применение маршрутов

Чтобы маршруты добавлялись автоматически при поднятии VPN-интерфейса, создайте файл hotplug-скрипта:

1
2
3
4
5
6
#!/bin/sh

[ "$INTERFACE" = "vpn" ] && [ "$ACTION" = "ifup" ] && {
    sleep 3
    /root/scripts/youtube.sh update && /root/scripts/youtube.sh add
}

Не забудьте сделать его исполняемым:

1
chmod +x /etc/hotplug.d/iface/99-vpn-routes

Убедитесь, что имя интерфейса (vpn) соответствует имени вашего реального интерфейса в OpenWRT (например, wg0, tun0 и т.д.). Также имя устройства в скрипте (vpn-vpn) должно соответствовать имени сетевого интерфейса, через который идёт трафик (обычно совпадает с именем интерфейса).


Проверка работы

Переподключите интерфейс:

1
ifdown vpn && ifup vpn

После этого проверьте таблицу маршрутизации:

1
ip route show | grep "dev vpn-vpn"

Вы должны увидеть десятки (или даже сотни) строк вида:

1
2
8.8.8.0/24 dev vpn-vpn scope link
34.0.0.0/15 dev vpn-vpn scope link

Дополнительно

Ручная очистка маршрутов

Если маршруты по какой-то причине остались после отключения VPN, их можно удалить вручную:

1
ip ro | grep vpn-vpn | while IFS= read -r r; do ip ro del $r; done

Расширение списка подсетей

Файл goog.json не включает все IP-адреса YouTube. Некоторые CDN (например, через партнёров типа YouTube Delivery или сторонние хостинги) могут использовать другие диапазоны. Если вы замечаете, что видео не загружаются, можно вручную добавить недостающие подсети, например:

1
2
3
# Внутри функции update, после wget:
echo "173.194.0.0/16" >> "$IPV4_FILE_NAME"
echo "216.58.192.0/19" >> "$IPV4_FILE_NAME"

Но учтите: такие подсети могут устаревать, поэтому лучше периодически сверяться с актуальными данными.

Для отладки трафика используйте tcpdump или dnsmasq логи, чтобы выявить недостающие адреса или подсети.


Заключение

Теперь ваш OpenWRT-роутер автоматически маршрутизирует трафик YouTube через VPN, используя актуальные IP-диапазоны от Google. Это решение масштабируемо, легко поддерживается и не требует изменения DNS или перехвата трафика на уровне приложений.

Если вы используете WireGuard, OpenVPN или любой другой тип VPN - подход остаётся тем же. Главное -правильно указать имя интерфейса и устройство.


📎 Источники:

Авторский пост защищен лицензией CC BY 4.0.

Популярные теги