Мне по работе постоянно нужно обращаться к запрещённым для России сайтам, например сайт NXP Semiconductors, на котором куча документации, при обращении с российского IP выдаёт 403. И так много где. Поскольку до технологического суверенитета нам ещё далековато (хотя на российских сайтах тоже попадается полезная информация), а каждый раз включать для этого телепорт в Нарнию надоело, решил настроить на роутере. Итак, что мы имеем:
- роутер MikroTik RB4011 без Wi-Fi (для всех остальных всё будет так же, но нагрузка будет выше намного и не факт, что он её осилит);
- обычный российский домашний интернет с белым постоянным айпишником;
- VDS с белым айпишником (хотя в принципе необязательно белым) в Нарнии, на которой VPN-клиент до дома и MASQUERADE NAT из VPN-сети наружу. В принципе неважно, в какую сторону это будет работать. Как это настроить — тема другой статьи. Сегодня мы чисто про роутер.
Исходное положение — у роутера есть интернет с внешним постоянным IP, соединение с VDS-кой установлено, внутренний IP-шник 192.168.14.1, VPN IP VDS-ки 192.168.45.1. DNS гугловый 8.8.8.8.
Также условимся, что у нас есть два списка сайтов — «список разрешённых сайтов», который идёт через обычный российский интернет, и всё остальное, которое идёт через Нарнию.
- Создаём 2 address-list с помощью меню IP/Firewall/Address list. В первом пишем сюда свой локальный внутренний IP (например 192.168.14.17) и называем его foreign-internet, во втором — какой-нибудь адрес, который строго требуется открывать через Россию (например gosuslugi.ru, которые не открываются из Нарнии, на момент написания статьи их IPv4-адреса 213.59.254.7 и 213.59.253.7, можно добавлять подсетью, например 213.59.0.0/16), и назовём его russia-only
- Создадим правило для перенаправления трафика. Меню IP/Firewall/Mangle. [ ! ] — означает «не» в клеточке слева от поля ввода. Что нужно включить:
- Enabled
- Chain=Prerouting
- Dst-Address=[ ! ] 192.168.0.0/16
- Src. Address-List = foreign-internet
- Dst. Address-List = [ ! ] russia-only
- Action = route
- Route Dst. = 192.168.45.1
- Запоминаем номер правила в списке (в моём случае это 3)
- Добавляем в System/Scheduler правило со скриптом следующего содержания и запуском раз в секунду:
:local HOST 192.168.45.1
:if ([/ping $HOST count=1] = 0) do={
:log error "HOST $HOST is not responding to ping request, disabling freedom rule …"
/ip/firewall/mangle/disable 3
} else {
:log warning "HOST $HOST ping is ok, enabling freedom rule …";
/ip/firewall/mangle/enable 3
}
Готово! Вы великолепны.
Это работает так. Все хосты, внесённые в список foreign-internet, получают доступ к сети через Нарнию, и всякие сайты типа NXP, Analog Devices, Нельзяграм, Лицокнига и тд начинают нормально работать. Если нужно, чтобы какой-то хост работал только через Россию (для быстродействия или потому, что из Нарнии он недоступен) — добавляем его в список russia-only. Если Нарния отвалится — все пойдут через обычный российский интернет. Если восстановится — всё вернётся. Обо всём остальном позаботится роутер.