Выборочное туннелирование — это штука, которая даёт Вам гибкость в нашем деле и/или делах повседневных. Хочешь, чтобы трафик для определённых доменов шёл через VPN, а остальное летело напрямую? Легко. В этом посте покажу, как настроить это на RouterOS, используя TLS-Host. В бонус накину готовый список IP-адресов RU с автоапдейтом.
🤔 Зачем это нужно?
- Обход геоблокировок (cisco, привет): перенаправляешь трафик для заблокированных доменов через VPN, а остальное — без потерь скорости напрямую.
- Сохранение приватности: шифруешь только чувствительный трафик.
- Экономия ресурсов: меньше нагрузки на VPN-сервер. Я для YouTube, например, арендовал отдельный РУССКИЙ (!) VPS, так как не хочу рекламы на устройствах.
🚀 Что потребуется?
- RouterOS 6.47+ (с поддержкой SNI / TLS-Host).
- Рабочий VPN (например, OpenVPN или WireGuard, или же AmnesiaWG. По последнему есть рабочий ARM контейнер для поцанчиков с 512+ оперативы, но как нить позже распишу и сюда закину).
- Список доменов, которые надо туннелировать (можно свой или готовый).
🛠 Настройка на RouterOS
1️⃣ Создаём VPN-клиент
Добавляем соединение с VPN. Пример для OpenVPN:
/interface ovpn-client add name="vpn" connect-to="vpn.example.com" user="user" password="password" profile="default-encryption"
2️⃣ Настраиваем выборочный маршрутизатор
Создаём routing table для VPN-трафика:
/ip route add gateway="vpn" routing-table=to-vpn
3️⃣ Настройка правил туннелирования по доменам
Используем TLS-Host, чтобы ловить запросы для доменов и перенаправлять их через VPN:
/ip firewall nat add chain=dstnat protocol=tcp dst-port=443 tls-host="example.com" action=mark-routing new-routing-mark=to-vpn
/ip firewall nat add chain=dstnat protocol=tcp dst-port=443 tls-host="*.example.net" action=mark-routing new-routing-mark=to-vpn
4️⃣ Список доменов
Для удобства список доменов можно автоматизировать через скрипты. Например, загружать его с внешнего источника:
/system script add name="update-domains" source="/tool fetch url=\"https://example.com/domains.txt\" dst-path=domains.txt"
/system scheduler add interval=1d name="update-domains-schedule" on-event=update-domains
🔧 Оптимизация
- Ускоряем DNS-запросы: Добавляем кеширование через ip dns static, чтобы не тормозить при каждом запросе.
- Мониторинг трафика: С помощью Torch или логов проверяем, что трафик действительно идёт через VPN.
⚡️ Преимущества
- Не надо городить огромные списки IP для маршрутизации.
- Простота настройки, если знаком с RouterOS.
- Отлично подходит для динамически обновляемых доменов (например, стриминговых сервисов).
📦 Бонус: список российских IP
Если у вас есть задачи, где проще использовать готовый список IP-адресов, чем туннелировать по доменам через TLS-Host, то вот рабочий вариант.
Пример использования списка:
/ip firewall address-list
add list="Russian IP" address=2.16.20.0/23
# и ещё 16,502 строки...
Этот список легко комбинируется с предыдущей настройкой через маршруты и политики:
/ip firewall mangle add chain=prerouting src-address-list="Russian IP" action=mark-routing new-routing-mark=to-vpn
/ip route add gateway="vpn" routing-table=to-vpn
Как быстро поставить? Выложил сюда, приложил к посту, а так же для облегчения импорта написал следующее:
/tool fetch url="https://gist.githubusercontent.com/nekkitl/7d5952f0cc8b7c9f45f2f38ff4732b2f/raw/3c7450ef514ab8f8e5923813846163d48f7b48c3/ros-russian-ip.txt" dst-path=russian-ip.txt
/ip firewall address-list load file-name=russian-ip.txt
/file remove russian-ip.txt
⚠️ Когда использовать списки IP?
- Если необходимо перекрывать трафик к большим подсетям.
- Когда домены быстро меняются, а IP остаются более-менее стабильными.
- Для простых кейсов, где нет необходимости в SNI или глубокой фильтрации.
Но если есть возможность использовать TLS-Host, лучше отдать предпочтение ему — это быстрее и эффективнее.
