Pull to refresh

Обход блокировок за NAT без белого IP

Reading time5 min
Views32K

На написание статьи меня сподвиг интересный Tutorial от Валерия Лутошкина с настройкой BGP и VPS на оборудовании MikroTik с подключением к проекту antifilter. Это решение натолкнуло меня на домашнюю практику с протоколами динамической маршрутизации. Попробовав его реализовать, я понял, что мой домашний провайдер не даёт манёвров для действий и блокирует порт TCP 179 по умолчанию. В дополнение к этому у меня нет белого IP адреса и я за NATом. В общем все прелести рядового пользователя. Текущая статья является у меня первой. Конструктивную критику и пожелания приветствую.

Предыстория

Для решения задачи по обходу блокировок в домашних условиях, я использовал вариант с покупкой VPS в свободной зоне глобальной сети. Установил на VPS CHR. Далее на домашнем MikroTik создал туннель через SSTP и отдельную Wi-Fi сеть со своим сегментом и бриджом. С использованием маркировки, статикой направлял пакеты в туннель до VPS. Netwatch контролировал наличие активного туннеля до VPS и активный маршрут в таблице маршрутизации на случай, если туннель упадёт, чтобы устройства во втором сегменте полностью не потеряли интернет.

Как выглядела настройка роутера MikroTik
На изображении home_bridge - это обычная сеть с Wi-Fi и home_vps_bridge - это второй сегмент с маркировкой трафика от устройств в сторону туннеля до VPS.
На изображении home_bridge - это обычная сеть с Wi-Fi и home_vps_bridge - это второй сегмент с маркировкой трафика от устройств в сторону туннеля до VPS.

Добавлено правило в firewall mangle:

/ip firewall mangle
add action=mark-routing chain=prerouting disabled=yes new-routing-mark=
browser_mark passthrough=yes src-address=192.168.8.128/25

Добавлен маршрут для маркированных пакетов:

/ip route
add disabled=yes dst-address=0.0.0.0/0 gateway=172.15.1.1 routing-table=
browser_mark suppress-hw-offload=no

Схематичное изображение решения для доступа к сети интернет через VPS с использованием двух сегментов в домашней сети.
Схематичное изображение решения для доступа к сети интернет через VPS с использованием двух сегментов в домашней сети.

И всё бы хорошо, но решение было сделано на коленке и переключаться между Wi-Fi сетями не совсем удобно. Хочется сделать так, чтобы роутер сам определял маршрут следования с использованием обычной домашней сети без разделения сегментов. В любом случае, мы должны прийти к динамической маршрутизации, либо использовать способ с автозагрузкой списка РКН через скрипт в Address list. Казалось бы просто, но мне захотелось, чтобы всё было ещё чуть изящнее. Отключаем старую реализацию с разделением сегментов и приступаем к постановке задачи.

Постановка задачи

Имеется инструкция как подключиться по BGP, обозначенная в начале статьи. А что делать если провайдер всё блокирует или вы находитесь за NAT? Всё верно. Можно попробовать поднять BGP сессию на VPS, а чтобы маршруты через туннель долетали до домашнего роутера, доставить их туда одним из протоколов IGP, например, используя OSPFv2, который включается на MikroTik очень легко. Схематично обозначим нашу цель.

Схематичное изображение постановки задачи
Схематичное изображение постановки задачи

Исходные данные

  • Нам необходим VPS хостинг на ваш вкус и цвет в свободной зоне интернет. Не привязываюсь к конкретному, так-как у всех разные предпочтения;

  • CHR установленный на VPS. С установкой можно ознакомиться в следующих статьях: Пример1, Пример2, Пример3. Настройка может быть индивидуальна для каждого хостинга, но в целом подход одинаков. Можно попробовать поднять на VPS и другой образ системы. Главное чтобы была поддержка работы с BGP и OSPF. Я использую CHR из-за минимального количества выделяемых для него ресурсов. Как следствие, минимальный тарифный план;

  • Лицензия CHR. При использовании бесплатной версии скорость на портах CHR будет всего 1 Мбит/сек. Как получить лицензию бесплатно можно ознакомиться здесь. Стоимость самой лицензии на момент написания статьи около 3000 руб.;

  • Любой туннель IPIP для связи Home router и VPS. Главное чтобы мы смогли взаимодействовать по порту TCP 89 для OSPF. Подразумевается, что туннель у вас уже настроен. В примере я использую SSTP (на нестандартном порту). Статикой на сервере VPN (в нашем случае это CHR) настроены параметры IP, которые выдаются всего одному клиенту (домашний роутер);

  • Предполагается, что между CHR и Home router нет NAT и запрещающих правил для OSPF. Правила фильтрации на роутерах для WAN интерфейсов настроены на необходимом уровне и на CHR нет запрещающих правил для BGP;

  • В примере на домашнем роутере и CHR версия прошивки 7.3.1 stable. В целом, всё "взлетит" и на 6-ой версии с небольшим отличием в командах и интерфейсе Winbox.

Настройка

Для поднятия BGP сессии на VPS используем статью от Валерия Лутошкина. Он достаточно подробно описал процесс. С белым IP адресом на CHR у вас не возникнет "подводных камней" в настройке. По BGP в таблицу маршрутизации прилетит всё что нужно.

Переходим к OSPF. Перед настройкой OSPF обязательно делаем статичным интерфейс на CHR через "SSTP Server Binding". Нужно это для того, чтобы SSTP интерфейс был статичным и не исчезал при отключении клиента (домашнего роутера). В вашем случае это может быть и другой интерфейс.

Настраиваем статичный интерфейс для клиента (Home router)
Настраиваем статичный интерфейс для клиента (Home router)

Далее включаем у CHR протокол OSPF на статическом интерфейсе sstp-in1, который смотрит в сторону Home router. Обратите внимание, что со стороны CHR мы анонсируем маршруты, полученные только по BGP.

/routing ospf instance
add disabled=no name=ospf-instance-1 originate-default=never redistribute=bgp
routing-table=main
/routing ospf area
add disabled=no instance=ospf-instance-1 name=ospf-area-1
/routing ospf interface-template
add area=ospf-area-1 disabled=no instance-id=1 interfaces=sstp-in1

Теперь включаем у Home router протокол OSPF на интерфейсе MT-EXTERNAL, который смотрит в сторону CHR. Обратите внимание, что со стороны Home router мы анонсируем маршруты только со статусом connected. Это необходимо, чтобы наш CHR знал сегменты на домашнем роутере.

/routing ospf instance
add disabled=no name=ospf-instance-1 originate-default=never redistribute=
connected routing-table=main
/routing ospf area
add disabled=no instance=ospf-instance-1 name=ospf-area-1
/routing ospf interface-template
add area=ospf-area-1 disabled=no instance-id=1 interfaces=MT-EXTERNAL

Дополнительные настройки OSPF можно подкрутить по желанию. Ожидаем определения bdr и dr статуса на роутерах. В разделе OSPF=>Neighbors ожидаем конечного статуса "FULL" на CHR и Home Router соответственно. Если с настройкой OSPF возникнут проблемы, возможно поможет статья из wiki MikroTik.

Пример статуса OSPF соседей на CHR. У Home router статус соседа должен быть аналогичный.
Пример статуса OSPF соседей на CHR. У Home router статус соседа должен быть аналогичный.

После этого в таблице маршрутизации CHR появятся маршруты до connected сетей домашнего роутера, а на Home router появится несколько десятков тысяч маршрутов в сторону CHR. У меня стоит HAPac2 и он вполне справляется с 11000 тыс. маршрутами и LSA в OSPF. Загрузка CPU и RAM в норме. Для дома это вполне хороший результат.

Загрузка CPU и RAM после получения всех LSA в OSPF
Загрузка CPU и RAM после получения всех LSA в OSPF
Общий список маршрутов прилетевший от CHR на домашний роутер
Общий список маршрутов прилетевший от CHR на домашний роутер

Финансы

По финансовым расходам у нас получается следующая картина:

  • Стоимость лицензии CHR около 3000 руб. либо используем бесплатную версию;

  • Стоимость арендной платы за VPS 300 руб./мес. Может чуть больше.

Заключение

Таким образом мы настроили довольно интересную связку. Наш Home router самостоятельно принимает решение куда отправлять пакеты. Вся информация через BGP прилетает на VPS и передаётся на наш домашний роутер по OSPF. Весь процесс максимально автоматизирован, чтобы настроить и комфортно пользоваться глобальной сетью дома. Вместо OSPF можно попробовать запустить другие протоколы IGP.

Tags:
Hubs:
Total votes 8: ↑8 and ↓0+8
Comments13

Articles