Pull to refresh

Comments 112

А, ещё есть прикол — если удалённая машина входит в подсеть блокировок,
нужно добавить маршрут до ip сервера статический через своего провайдера, а то получается петля.
У меня так сервер на ДО, входит по ip в одну из заблокированных подсетей, но доступ до него от провайдера есть.
Ну вообще это стандартная практика — добавлять /32 маршрут до адреса второй стороны VPN-сервера через свой гейт. Скажем, strongswan так делает, только маршруты не в общую кучу кладет, из-за этого может быть приоритет прилетевших маршрутов через ip rule. Обойти можно, добавив lookup-правило на таблицу с VPN-маршрутами раньше по списку.
Позвольте слегка поофтопить. Посоветуйте роутер Mikrotik?
В прошлой статье говорилось про Mikrotik hAP ac, но судя по отзывам — слабоват для 100+ мбит. У меня от провайдера приходит 200 мбит интернет, так что видимо мне надо что-то другое.
Роутер для домашнего использования (пара компов, мобильники). Желательно (но не обязательно) наличие вайфай.
Не путайте hAP ac с hAP ac lite, который активно обсуждают.
hAP ac, он же RB962UiGS-5HacT2HnT — это дорогая ($129) гигабитная двухдиапазонная железка, ваши 200 Mbps она пропустит, не задумываясь.
Сейчас есть версия попроще — hAP ac2 (RBD52G-5HacD2HnD-TC) — $69, без SFP и еще с парой мелких drawback, но под ваши задачи тоже подойдет безусловно.
Читал на него на маркете. Не он?
Пишут
Слабый процессор прошлого поколения. Способен прогонять через себя провайдерские 100 мбит только в месте c костылем Fastrack. Либо с минимальным количеством правил в фаирволе. В режиме серверов L2TP (c ipsec), OVPN или SSTP больше 30 мбит/с шифровать не способен.
100 мегабит без шифрования — легко. IPsec c AES256 — порядка 30 мегабит. Hardware offload отсутствует. Если не нужен WiFi, рекомендую RB750Gr3. Если нужен, присмотритесь к новой AC² железке.
Интересует 200 мегабит с правилами на файрволле, типа отрезания рекламы и прочего.
Посмотрите тесты железок. И можно написать в поддержку Mikrotik, отвечают может и не быстро, но детально.
Ставьте шлюзом RB750Gr3, за него hAP AC (RB962UiGS-5HacT2HnT) как точку доступа и гигабитный свич.
Только не забывайте смотреть на блочные диаграммы устройств. У 750гр3 очень своеобразный коммутатор, но как роутер он весьма неплох.

у rb750gr3 по сути нет свича, все порты к процессору подключены и свич у него софтовый, что с лихвой компенсируется двумя ядрами с неким аналогом hyper threading, в итоге получается 4 потока.
> через себя провайдерские 100 мбит только в месте c костылем Fastrack.
Чушь, 40-50 MiB в секунду проходят легко и непринужденно (NAS при этом упирается в дисковый iops на торрентах быстрее). Вот speedtest с NAS, стоящего за AC — image

По openvpn с дефолтным шифрованием — 70-100 mbps в зависимости от погоды на луне.

По wifi с WPA2 — 100-120 (это во время того, когда торренты качаются на NAS).

Проц не фонтан, конечно, но для текущих домашних скоростей его за глаза. Под гигабит по IPoE должен держать.
Ещё раз: В цитате говорится про 100 мегабит, я говорю про 200 мегабит, вы говорите про 50 мегабит… У вас на файрволле есть правила? Это с ним у вас 360?
Я говорю про 50 мегаБАЙТ. Или 360 мегаБИТ на спидтесте — торренты утилизируют канал лучше (сам канал — 400 mbps).

> У вас на файрволле есть правила
Правил там особенно нет — фильтр доступа снаружи, форвард https/ssh на NAS, дефолтный nat. Ну и роутинг в oVPN для некоторых адресов/подсетей.
Грамотно настроенный FW почти не влияет на скорость, впрочем. Вы же туда не десятки тысяч правил загружать собираетесь.
Дефолтное шифрование на OVPN там SHA1/BF128, что уже считается небезопасным.
Ну пока провайдер не научился влезать внутрь такого шифрования на лету и фильтровать по чёрному списку прямо там — пусть будет =)
Тогда в некоторых случаях и это лишнее, многие операторы даже просто GRE без шифрования не разбирают :)
Угу, многие операторы GRE не разбирают, а просто режут на корню =)
Особенно те, которые PPTP/pppoe.
Вот в РФ пока не встречал операторов с SFP домой, как и режущих GRE. Кстати, если это резать, будут вопли со стороны бизнеса, ибо GRE over IPsec — по сути, enterprise стандарт.
> Вот в РФ пока не встречал операторов с SFP домой
Дык, не «домой» а «в квартиру». В квартиру SFP банально неудобно и дорого тянуть, а больше гигабита всё равно пока никто не готов давать, меди хватает.
В офисах и частном секторе картина другая.

> как и режущих GRE
Бизнесу никто ничего и не режет, а кто режет — быстро вылетают из бизнеса, если это не монополия в БЦ. Билайн (ещё со времен корбины) по l2tp точно резал из крупняка на домашних каналах. Да и думаю многие, кто туннелями интернет приносит, «режут», потому что для проброса gre через любой туннель нужны телодвижения на стороне провайдера.
С IPoE проще, там gre если и режут, то специально, таких и правда в районе нуля.

Там процессор другой архитектуры, то есть она чисто "маркетологически" в этом промежутке. На самом деле, на IPsec она даже быстрее, так что для дома действительно оптимальный вариант если нет задачи максимально производительного вайфая (в ней MIMO 2x2, а в ac 3x3).

А что если совсем «снищебродить» и развернуть образ Mikrotik-a на каком-нибудь гипервизоре? Если мне не изменяет память — Miktotik предлагает образы даже для Hyper-V.
UFO just landed and posted this here
И лицензии. Иначе надо покупать за 40$
UFO just landed and posted this here
Может создадите пост по данному топику — думаю людям будет очень интересно. Если нет желания — можете мне в личку скинуть step-by-step howto, буду очень благодарен. Давно хотел закрыть пробел в RouterOS каким-нибуть практическим кейсом.
Не соглашусь. Например, SFP в железке лишний в реалиях РФ, а процессор уже староват для нынешних скоростей, тем более когда речь заходит о шифровании. Вот новый RBD52G-5HacD2HnD-TC больше похож на «флагмана» для дома.
SFP домой бывает уже давно.
Без POE-out очень грустно.
Без metarouter — ещё грустнее.
Процессоры — сравнимы, ещё и глюки перехода на ARM будут некоторое время всплывать. Никакого революционного прорыва там нет — по IPoE и тот, и тот справлялись с гигабитом, по pptp всё так же упирается в одно ядро на примерно одинаковых скоростях (+\- 10%).

Единственное, в чём AC2 выигрывает однозначно — это wifi, там железка под это лучше заточена. Но у АС без подрезания мощности передачи бешеная зона покрытия (10 этажей вниз и ещё метров 100 в сторону), а у АС2 — нет.

Так что тут кому что нужнее. По возможностям АС однозначно далеко впереди, проигрывая 10-20% по скорости.
Хочу обсудить по-пунктно :)

1. Какие операторы предоставляют SFP домой?
2. Что вы реально крутите на Metarouter, что оно не виснет и реально работает?
3. PPTP — абсолютно старый и небезопасный протокол, его использование вызывает большие сомнения.
4. По WiFi разницы вообще не заметил. Хотя, возможно, дело в том, что настроен «роуминг» на трех железках.
> 1. Какие операторы предоставляют SFP домой?
Почти любой в частных секторах. Их же, думаю, можно задолбать и попросить притащить в квартиру (хотя по забитым стоякам оптику не тянут).

> 2. Что вы реально крутите на Metarouter, что оно не виснет и реально работает?
habr.com/post/354710

> 3. PPTP — абсолютно старый и небезопасный протокол, его использование вызывает большие сомнения.
TCP/IP — абсолютно старый и небезопасный протокол, его использование вызывает большие сомнения. Однако все пользуются.
На самом деле неважно, l2tp, openvpn и pppoe ровно так же упираются в одно ядро. Если же говорить про производительность в sha256, то она грустная и на MIPS, и на ARM (пусть и ARM в 2 раза быстрее на sha256) — намного шустрее поднимать любой туннель с sha256 на самих клиентах. А если всё же хочется строить туннели на микротиках — смотреть нужно на hEX минимум и разгонять частоту, а не hAP.
Мы всё же роутер для дома — туда мало кто тащит гигабитные ipsec-туннели, а 100-200 mbps по ipsec прожуют и AC, и AC2 в любую сторону.
Ну вот нет же. AC прокачивает максимум 30 мегабит на AES256 IPsec'a. А по оптике домой, все упирается в GPON ONU модули. Никто не хочет «прописывать» модули владельца, предпочитая ставить свое оборудование.
Ну а AC2, если судить по бенчмаркам процессора, прокачивает 50-60 mbps. Тоже не фонтан как бы)

> Никто не хочет «прописывать» модули владельца, предпочитая ставить свое оборудование.
«Никто» — это ростелеком, видимо =) Ну и опять же — GPON это GPON. SFP встречается там, где оптика «со столба» абоненту заходит.
vidnoe.net/tarify/internet/chastnym-domam — вот наши местные просто тащат оптику на участок, что ты на втором конце поставишь им в целом наплевать (разве что предупредить нужно, что у тебя свой микротик есть).
Ну, иные провайдеры говорят так: мы ставим вам роутер с SFP и выходом по eth потому, что в случае ваших жалоб хотим зайти на свое (стоящее у вас) оборудование, и хотя бы какой-то тест запустить. Но их можно все же уговорить свою железку в «мост» превратить, главное, чтобы мост этот был не менее стабилен, чем сама оптика.

С другой стороны, Mikrotik предлагает самые разные модули, скажем, GPON ONU module — Pluggable GPON ONU interface for Fiber to Home — возможно, он ваши задачи решит (но какому-нибудь RT мало что докажешь, мне кажется).
Hap AC2 сейчас по факту сейчас поставляется с 256М RAM, что под задачи, подобные этой делает его более пригодным, IMHO
Откуда такая информация? На оффсайте 128, в магазинах тоже.
Ubiquiti EdgeRouter X. Гигабитные порты, хардварный нат и IPsec. Гонял через него 800мбит, нагрузка 1-3%, за счет offload.
Для hep младшей модели таблица маршрутов оказалась тяжела. Виснет.
для Centos 7 каталога /etc/bird нету — надо создать
и вписать полные пути
include "/etc/bird/subnet.txt";
include "/etc/bird/ipsum.txt";
Можно более широко суммаризовать сети внутри файла ipsum.lst — например, если собрать их по /16, то из 13 тысяч префиксов останется чуть больше 2 тысяч. Но при этом, конечно, много лишнего уйдет в туннель.
hAP Lite — так же не осиливает 13 тысяч маршрутов. Свернул ipsum.lst до /16 — получилось около 3500 строк. Но Mikrotik (прошивка 6.40.8) после получения маршрутов постоянно отключает и вновь подключает VPN-туннель (я поднял простой GRE). В логе это описано как VPN link down / VPN link up и пока что пытаюсь понять это за чудо
Тут у вас что-то странное. У меня в окружении есть несколько hAP lite, пользующихся моим сервисом и съедающих именно эти 13 тысяч префиксов.
Возможно, дело в версии прошивки, да — они все обновлены по максимуму, на данный момент до 6.42.3.

Хм. Мой провайдер еще и перехватывает запросы к любым DNS серверам, видимо по порту, выдавая вместо IP заблокированного ресурса IP заглушки. Думаю, многие провайдеры так делают. Было бы хорошо еще и заворачивать все DNS запросы в VPN туннель. Заодно можно переадресовать их в 1.1.1.1 или 8.8.8.8 вместо DNS сервера провайдера, который, скорее всего, тоже будет подменять IP на заглушку.

DNS-запросы заворачивать в туннель — это вполне себе очевидное решение, делается прописыванием на маршрутизаторе статических маршрутов в сторону туннеля.
Можно, конечно, просто дописать еще один инклуд файла с маршрутами на адреса DNSов в конфиг bird, тоже будет работать.
Можно где-то в своей сети поднять dnscrypt-proxy, например, на той же «малинке», или даже pi-hole какой-нибудь, там тоже есть вариант использования DNS-over-HTTPS. Либо на сервере dnsmasq с переадресацией.
Или через metarouter поднять openwrt с dns-tls/dns-https в 1.1.1.1+9.9.9.9
Подскажите, какой образ не виснет и реально работает? Пробовал даже свои собирать, заканчивалось всегда все однозначно: либо виртуалка падает, либо маршрутизатор.
А как вздумается. Вообще нет никакой связи. Может день проработать, а может месяц, но потом только ребут маршрутизатора, например.
Если будет время и желание, расскажите потом :)
UFO just landed and posted this here
Как OVPN живёт на провайдерах, раздающих клиентам серые IP?
Вопрос немного не в тему: не пробовали по OVPN раздавать IPv6 адреса с дефолтом Андроидному клиенту? У меня после получения адреса в андроиде перестают работать браузеры. При этом ping, traceroute работают.
OVPN вполне себе успешно поднимается из-за NAT, постоянно пользуюсь в поездках по миру, как с ноутбука, так и с телефона.
Про Android ничего не скажу, к сожалению — изжил у себя везде, кроме STB. Если AppleTV научится показывать файлы из сетевых шар — изживу и там.
4-е поколение вполне себе показывает с помощью сторонних приложений
Я выбрал DLNA Plex сервер и клиент, уверен есть ПО и для smb/afp
Plex — это стриминг с сервера, соответственно, часть нагрузки уходит на сервер. Вот пока про доступ с приставки к smb или afp без серверных прослоек я нагуглить не смог. Если попадется — поделитесь информацией, пожалуйста.
я же могу держать bird на самом шлюзе, а удаленный серв просто как впн-серв?
на шлюзе тоже линь.
Конечно. Под более общий вариант «bgp и туннель в разные места» был заточен текст предыдущей статьи, но у пытающихся повторить при этом возникало много вопросов. Эта же статья была написана фактически для настройки копипастой.
Кстати, когда именно на самом шлюзе — то там и bird не особо нужен, поскольку в bgp в этой схеме смысла нет. Можно напрямую актуализировать таблицу маршрутизации скриптами.
Хотя с bird это получается более просто, безусловно. Только bgp из bird в этом случае можно изничтожить и просто делать экспорт маршрутов из процесса static_bgp не в bgp, а прямо в protocol kernel, указав в них правильный некстхоп на стадии сборки файлов — вместо «reject;» там должно быть «via nexthop_IP;».
да. именно для удобства управления.
Не совсем понимаю, а зачем для этого использовать BGP? В OpenVPN можно же пушить маршруты или это вариант для не OpenVPN VPN?
В комментариях к предыдущему посту обсуждали — если вас устраивает получать маршруты только при пересоздании туннеля — можно пушить их через OVPN. Фактически обновление списка происходит раз в полчаса и лично мне не хотелось бы раз в полчаса дергать туннель с разрывом всех tcp-сессий.
кто-нибудь пробовал это реализовать на RB951Ui-2nD??
вывезет такая железяка?
Должна справиться, хотя в момент запуска ей будет нелегко. Но когда протокол сойдется — всё будет хорошо.
UFO just landed and posted this here
Безусловно, можно пойти и таким путем. Для тех, у кого есть VPN, но нет VPS, это будет очень даже правильно.
По известной мне статистике, пока никто не попросил bgp-пира на упомянутом сервисе. А листы забирают почти полторы сотни. Возможно, это потому, что людям проще сделать так, как описано, а возможно — потому что им хочется оставить больше контроля за тем, что прилетает в их устройства, в своих руках. Не готов однозначно определить.
UFO just landed and posted this here
Ровно та же проблема — файл на github не так давно переставал обновляться (и поэтому и появился antifilter), и точно так же может исчезнуть в любой момент. Гарантий никаких в обоих случаях. А доступ напрямую к дампу РКН имеют только некоторые сотрудники провайдеров, которым такая статья без надобности — они и сами умеют запилить нужное под свои потребности.
Про контроль я скорее в том ключе, что, выгружая файл, ничто не мешает перед его обработкой провести достаточно серьезный программный контроль его консистентности. В прямом BGP-стыке возможности такого контроля сильно ограничены возможностями маршрутизатора.
Но, безусловно, любой вариант имеет место быть, я же не обещал перекрыть все возможные варианты построения. Я всего лишь предложил тем, кому хочется, воспользоваться одним из таких вариантов.

Просто мысль вслух: именно VPN (в классическом понимании — с шифрованием) нужен не всем/не всегда. Технически, зачастую, достаточно просто p2p соединения с инкапсуляцией (без шифрования). А это может сильно облегчить жизнь роутеру. Мой уже старенький RB951G-2HnD вполне даёт 100+ МБит при 16000 маршрутов.

Да, безусловно. Очень мало операторов, которые парсят внутренности нешифрованных туннелей.
А можно подробнее про это? Хотелось бы покопать в этом направлении.
Furriest, подскажите пожалуйста, а в чём может быть проблема со скриптом?
bird[9322]: bird: /etc/bird/ip.txt, line 1: syntax error
при том, что в первой строке файла вроде все как надо:
route 11.22.33.44 reject; (адрес намеренно изменен)
Такое выдает конечно же на этапе systemctl start bird
С очень большой вероятностью в файле виндовые переносы строки 0D0A вместо юниксовых 0A. Bird, к сожалению, чувствителен к этому.
Решается простейшим sed 's/\x0D$//' file1.txt > file2.txt
А. Не проснулся еще, поэтому не сразу заметил, извиняюсь. Строка route требует сети, а не адреса, поэтому для ip.txt она должна выглядеть как route 11.22.33.44/32 reject;
Решается, опять же, изменением соответствующего sed в скрипте обработки.
Спасибо за подсказку! Заработало!
Для остальных, вдруг пригодится, строка в конфиге для ip.lst:
cat /root/blacklist/list/ip.lst | sed 's_.*_route &/32 reject;_' > /etc/bird/ip.txt

а для эникейщиков если вас не затруднит
Если роутер простой, а роль тонеля до vds выполняет одноплатный пэка на armbian который используется как шлюз, тоннель openvpn. То очевидно на него надо поставить все тот же bird, а как его сконфигурировать?

Если я правильно понимаю схему — на границе «простой» роутер, а armbian стоит в сети за ним. При этом дефолт у устройств в сети указывает на armbian, а на нем маршрутизация разруливает «это в туннель, а это в роутер». В такой схеме да, можно поставить bird на armbian и принимать префиксы на него. Настройка bird в этом случае фактически повторяет приведенную в примере, только нужно разрешить export в протоколе kernel и правильно установить nexthop при этом экспорте. Ну и не забыть пробросить в сторону armbian порт 179/tcp на роутере.

А вот если вы, как большинство пользователей таких схем, заворачиваете трафик на armbian на каждом устройстве в локальной сети отдельно, вам тут bgp и не очень нужен. Потому что проблемой будет как раз динамически обучать все устройства, а для такого списка префиксов это некрасиво решаемая задача.

Поэтому опишите, как у вас сейчас решается вопрос с отправкой трафика в туннель — тогда можно будет посоветовать направления модернизации схемы.

За ранее прошу прощения если будет слишком длинно
На входе простой роутер, старенький WNR3500l, к провайдеру подключен через IPoE на нем DD-Wrt, он умеет поднимать openvpn, но скорость очень маленькая.
Я вычитал что у orange pi на процессорах H3/5 есть crypto engine благодаря которому openvpn должен на них бегать быстрее. Вот тут можно посмотреть.
http://sunxi.montjoie.ovh/#support_overview
Оказалось правдой, скорость упирается в скорость канала до VDS
Все домашние железки достаточно умны чтобы обходить блокировки сами так или иначе, на vds висят socs5 прокси использую в браузерах и для телеграм, openvpn для всего остального, а еще l2tp/ipsec и pptp чисто для экспериментов, но вот та же PS4 ничего этого не умеет. И хочется прозрачное решение для всех сразу.
Как сейчас все решено.
Апельсин подключен в роутер по lan, соединяется через opnvpn с VDS, на апельсине поднята WLAN точка доступа для PS4 или любого другого устройства которому вдруг понадобится выйти в сеть в обход блокировок, ограничение только то что это WIFI.
между lan и wlan апельсина сделано перенаправление, вот так:
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
iptables -A FORWARD -i tun0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i wlan0 -o tun0 -j ACCEPT
и все работает.
Но железка простаивала и я подумал, а чего бы её еще не подгрузить. В итоге на апельсине поселился жесткий диск, deluged торент клиент, Mariadb mysql база данных для трех домашних медиасерверов на KODI, ну и samba шара до кучи.
Все шуршит, только с торент клиента трафик к примеру утекает в тонель, где он не нужен и я не могу его оттуда убрать. Я пробовал указывать в клиенте использовать eth1, включил в /proc/sys/net/ipv4/ rp_filter=1 на интерфейсах, все пофигу. Думаю это костыли и решение с динамическими маршрутами будет правильнее, вопрос как все сделать чтобы при этом ничего не сломать, оставив весь функционал и желательно уйти от wifi точки доступа. т.е. как я думаю на выходе использовать апельсин как gate и dns в настройках устройств которым надо обойти запреты.
Изначально идея была сделать некую дешевую и глупую чёрную коробочку "для друга", включив которую в свою домашнюю сеть и настроив её по инструкции не сложнее домашнего роутера, он получал все эти ваши впн ничего в них не понимая.

Т.е. получается, что у вас есть одно устройство (router), которое обслуживает канал и обеспечивает выход в «грязную» сеть и второе (апельсин), которое обслуживает туннель и обеспечивает выход в чистую. И выбор канала обеспечивается через выбор SSID в беспроводной сети.

Если я правильно понял конструкцию — то можно внедрить динамику следующим способом.
1) Дефолт на апельсине прописать через внутренний IP нетгира.
2) На нетгире пробросить порт 179/tcp во внутренний адрес апельсина.
3) На апельсине поднять bird и запирить его с BGP-сервисом (например, как в моей соседней статье описано)
4) В bird прописать, что для всех полученных по bgp маршрутов некстхоп — это туннель OVPN
5) На всех домашних устройствах прописать дефолтом апельсин.

В этой схеме любое устройство сначала пойдет на апельсин, если у того в таблице маршрутизации нет маршрута в туннель, он через ICMP редирект переадресует устройство на роутер и трафик пойдет через роутер. А если маршрут в туннель есть — уйдет в туннель. Немаловажно не перекрыть icmp излишней фильтрацией, каковую очень любят пилить на iptables для icmp.

да именно так я и хотел бы сделать


  1. route add default gw 192.168.1.1 где 192.168.1.1 внутренний IP нетгира. Или если у нас будет работать Bird то он все берет на себя и надо указывать в его конфиге?
  2. нам нужен чтобы получать на апельсин по BGP маршруты от VDS в обход openvpn? Соответственно в конфиге burd на апельсине мы указываем как источник маршрутов обычный внешний адрес VDS, так?
    4-5 почитаю предыдущую статью, попробую разобраться.
1. Да, правильно, дефолт лучше таки прописать статикой, как вы и написали.

2. Тут логика, что устанавливаем пиринг как бы со статического адреса роутера, но пробрасываем порт в апельсин. BGP через такой NAT работает хорошо.
Можно поднимать пиринг и через VPN, но там такой же нат, там тоже пробрасывать порт. Потенциально чуть больше проблем при траблшутинге. Но допустимо.

Конфиг bird для апельсина можно взять из статьи, только в bgp прописать import all, export none, чтобы получить маршруты от внешнего сервиса и не анонсировать свои маршруты ему. Когда получите маршруты и их будет видно в birdc show route — можно делать следующий шаг и разрешать их экспорт в таблицу маршрутизации в protocol kernel. Придется, правда, еще разобраться, как написать функцию для изменения nexthop при экспорте. Если не получится самостоятельно — пишите, помогу.
Если провайдер не дает при этом функцию статического nat (чтобы хотя бы конкретный порт зафиксировать на конкретном белом адресе) — то такое подключение использовать не получится. BGP ориентируется по IP пира.

сделал так, ip адреса из тоннеля
на VDS:
log syslog all;
router id 10.8.0.1;


protocol kernel {
scan time 60;
import none;
export none;
}


protocol device {
scan time 60;
}


protocol static static_bgp {
include "subnet.txt";
include "ipsum.txt";
}


protocol bgp OurRouter {
description "Our Router";
neighbor 10.8.0.4 as 64998;
import none;
export where proto = "static_bgp";
next hop self;
local as 64999;
source address 10.8.0.1;
passive off;
}


На апельсине
log syslog all;
router id 10.8.0.4;


protocol kernel {
scan time 60;
import none;


export all; # Actually insert routes into the kernel routing table

}


protocol device {
scan time 60;
}


protocol bgp OurRouter {
description "Our Router";
neighbor 10.8.0.1 as 64999;
import all;
export none;
local as 64998;
passive off;
multihop;
}


оба на birdc show protocol показывают это:


BIRD 1.6.3 ready.
name proto table state since info
kernel1 Kernel master up 14:46:07
device1 Device master up 14:46:07
static_bgp Static master up 14:46:07
OurRouter BGP master start 14:46:07 Connect


судя по всему магия не происходит (

Для начала — допишите на VPS команду multihop в protocol bgp, как на втором. Бывает, что bird не может разобраться в виртуальных интерфейсах и поэтому не поднимает порт (проверить можно через netstat -tulpen — есть ли в списке процесс bird, слушающий порт 179).
Следующим шагом я бы попробовал пинги с одного адреса на другой (именно с указанием src address), чтобы убедиться, что работает прямое коннективити. И, возможно, на время тестирования зачистил бы правила iptables (или другого используемого файрвола) — обычно они достаточно наворочены и бывает, что блокируют трафик не очень однозначным путем.

Порты слушаются, но да, вы правы, клиент не пингуется. Клиенты пингуют друг друга и сервер, но сервер их не пингует. Судя по тому что я нагуглил это ситуация известная, но что-то причины все разные и я пока не понял как вылечить. Пока пробовал только ufw на сервере отключить, не помогло.

А можно дополнить для совсем ленивых пример настроек BGP на второй стороне, на таком же bird, а не на микротике? Я через какое-то время разберусь и допишу в комменты, но может у кого-то уже есть)

PS, немного оффтопа: решил потестировать решение, под рукой ноутбук с windows, решил на нем поднять второй bgp и посмотреть, придут ли маршруты ну и просто потыкаться, потому что раньше сталкивался только с rip, ospf и eigrp. И не нашел софта для bgp или любого другого протокола маршрутизации. Bird и компания — все под никсы, у какого-то было написано что можно завести под cygwin, но это сомнительное удовольствие… Получается, либо windows server, либо не windows. Хотя казалось бы, http, ftp, dhcp, dns и прочие более прикладные протоколы существуют в виде десятков разных реализаций, просто выбери и поставь.
Вообще, если у простого человека нет навороченного роутера, но есть openvpn и желание гонять туда только заблокированный трафик, что лучше всего сделать? если б нашелся bgp-сервер, я б такому человеку поставил openvpn, bgp-сервер и выдал соответствующие конфиги…
Для того, чтобы в openvpn гонять только заблокированный трафик, какое-то устройство должно принимать решение, какой именно трафик заворачивать в этот openvpn. Например, если openvpn приземляется на ПК — можно на нем прописывать маршруты статикой в этот туннель. Если есть контроль за второй стороной openvpn — можно там формировать список маршрутов из выгрузки и опускать его в клиента средствами OpenVPN. Вариантов много, надо приземлять их на конкретную инсталляцию.
Пример конфига bird для второго конца:
log syslog all;
router id 172.30.1.1;

protocol kernel {
scan time 60;
import none;
export all;
}

protocol device {
scan time 60;
}

protocol bgp OurRouter {
description "Our Router";
neighbor 172.30.1.2 as 64999;
# import filter { gw = 192.168.1.1; accept; }; # если нужно указывать другой некстхоп
import all; # если устраивает некстхоп на другой конец туннеля
export none;
local as 64999;
source address 172.30.1.1;
passive off;
}


Адреса и номера автономных систем тюнить по вкусу.

Так мне и не удалось подружить Bird на сервере и на локальной машинке, не хочет сервер внутри тоннеля видеть клиента. Я вот думаю, а нафиг мне вообще VDS сервер для этого, пусть там VPN крутится как крутился. Я же могу скрипт этот локально запускать и локально импортировать список и использовать его для построения маршрутов. Взлетит же?

Вы вообще можете внедрить вариант из этого поста и не озадачиваться настройками.
Но, конечно, можете на локальном сервере выдергивать список маршрутов, обрабатывать его скриптом и затягивать в локальную таблицу маршрутизации.
Не могу, у меня микротика то нет, можно пойти и купить, но это не спортивно, мне просто интересно решить задачу. Затягивать маршруты проблем не вызывает и даже все вчера заработало и весьма бодро, но только до перезагрузки, т.к. после не просто не поднялся тоннель. Ну и локальные сервисы отвалились все. Я не могу осилить статические маршруты, просто не понимаю их, такая вот маршрутная дислексия. И в iptables мог что-то накосячить. Буду пробовать разобраться поэтапно. Сначала просто гейт настрою, заворачивая все в тоннель и если все гладко заработает, буду дальше мучить Bird.
Давайте так. Дайте мне в личку данные для настройки:
  1. IP-адрес вашего интерфейса, который смотрит в провайдера
  2. шлюз по умолчанию вашего провайдера
  3. внешний IP-адрес вашего туннеля (т.е. куда коннектится туннель)
  4. локальный и удаленный IP-адреса внутри вашего туннеля

и я вам в ответ пришлю готовый конфиг bird, который будет работать без BGP, просто вытаскивая список маршрутов на локальную машину.
Спасибо! Наконец-то руки у меня дошли настроить. В репозиториях archlinux оказался значительно более свежий bird (2.0.2), он ругался на ваш конфиг, получилось завести как-то так:
log syslog all;
router id 1.1.1.1;
 
protocol kernel kernel4 {
        scan time 60;
        ipv4 {
                export all;
                import none;
        };
}
 
protocol device {
        scan time 60;
}
 
protocol bgp OurRouter {
        description "Our Router";
        neighbor 2.2.2.2 as 64999;
        ipv4 {
                import filter { gw=3.3.3.3; accept; }; # такой адрес peer в openvpn
                #import all; # а так не завелось
                export none;
        };
        local as 64999;  # bgp без разницы что AS совпадают?
        source address 1.1.1.1;  # в нашем случае же без разницы что указывать тут?
        passive off;
}

В итоге, работает, но пришлось руками прописать адрес peer из openvpn. Может кому пригодится.

Ну и до кучи поставил dnscrypt-proxy, потому что провайдер подменяет dns-ответы… Но это уже совсем другая история)
bird 2 — это уже совсем другая история, под него надо перерабатывать конфиги. Честно скажу, пока кроме экспериментов на стенде никуда не запускал, продакшн везде на 1.6.4.

По вашим вопросам:
1) в нашем случае совсем не важно, совпадает ли номер AS. Но это именно в нашем, потому что в общем поведение при совпадении номера (iBGP) и при его несовпадении (eBGP) сильно разнится. Поэтому если строить что-то более сложное — неплохо было бы изучить, чем они отличаются, перед проектированием.
2) в source address указывается адрес, с которого этот конкретный пир будет пытаться поднимать bgp-сессию. Поэтому, опять же, в общем случае там важно указывать правильный адрес. Но вроде бы bird умеет понять, что написана фигня, и проигнорировать.

вроде настроил, но открывается не все. Один сайт выдает почему то заглушку провайдера, телеграм не открывается вообще. Но через впн доступен.
сделал так:
log syslog all;
router id 192.16.1.6;


protocol direct {
interface "eth0", "tun0";
}


table frz;
table FCKRKN;
table other;
table master;
table VPN;


protocol static {
table frz;
description "провайдер";
check link on;
preference 100;
route 0.0.0.0/0 via 192.168.1.1;
}


protocol static {
table VPN;
description "VPN";
check link on;
preference 100;
route 0.0.0.0/0 via 10.8.0.1;
}


protocol static {
table master;
description "Common Table";


Это главная таблица, сюда вписываются все default-маршруты
    route 0.0.0.0/0 multipath
                via 192.168.1.1
                via 10.8.0.1;

}


############утащил из прмера, не нужно######
protocol static {
table other;
description "Other custom static routes";
preference 200;


Включение всех конфигов (если есть в наличии) в /etc/bird/static_route.d/
include "/etc/bird/static_route.d/*.conf";

}


protocol static {
table FCKRKN;
description "заблокированные";
preference 200;
include "subnet.txt";
}
###########################################################################################
protocol kernel {
table frz;
persist;
learn;
scan time 20;
kernel table 10;
export all;


debug all;

}


protocol kernel {
table master;
persist;
learn;
scan time 20;
kernel table 254;
export all;


debug all;

}


protocol pipe {
table master;
peer table frz;
peer table VPN;
peer table FCKRKN;


peer table other;
    import all;

import filter { gw = 192.168.1.1; accept; }
debug all;

}

вроде настроил, но открывается не все. Один сайт выдает почему то заглушку провайдера, телеграм не открывается вообще. Но через впн доступен.
сделал так:
log syslog all;
router id 192.16.1.6;


protocol direct {
interface "eth0", "tun0";
}


table frz;
table FCKRKN;
table other;
table master;
table VPN;


protocol static {
table frz;
description "провайдер";
check link on;
preference 100;
route 0.0.0.0/0 via 192.168.1.1;
}


protocol static {
table VPN;
description "VPN";
check link on;
preference 100;
route 0.0.0.0/0 via 10.8.0.1;
}


protocol static {
table master;
description "Common Table";


Это главная таблица, сюда вписываются все default-маршруты
    route 0.0.0.0/0 multipath
                via 192.168.1.1
                via 10.8.0.1;

}


############утащил из прмера, не нужно######
protocol static {
table other;
description "Other custom static routes";
preference 200;


Включение всех конфигов (если есть в наличии) в /etc/bird/static_route.d/
include "/etc/bird/static_route.d/*.conf";

}


protocol static {
table FCKRKN;
description "заблокированные";
preference 200;
include "subnet.txt";
}
###########################################################################################
protocol kernel {
table frz;
persist;
learn;
scan time 20;
kernel table 10;
export all;


debug all;

}


protocol kernel {
table master;
persist;
learn;
scan time 20;
kernel table 254;
export all;


debug all;

}


protocol pipe {
table master;
peer table frz;
peer table VPN;
peer table FCKRKN;


peer table other;
    import all;

import filter { gw = 192.168.1.1; accept; }
debug all;

}

и накосячил с маршрутами, после перезагрузки тоннель не поднимается, no route to host, плохо быть мартышкой.

Почему-то итоговый список маршрутов получается больше чем на самом деле заблокировал РКН. Например 54.194.41.141 по данным eais.rkn.gov.ru не заблокирован. Однако в скачанном у вас реестре есть сеть 54.194.41.0/24
Понял что надо использовать полный список адресов на 90 тысяч записей, чтобы избежать такого эффекта.
Хотелось бы полохматить бабушку. Кейс такой — то что выгружается сейчас судя по всему это список отсюда eais.rkn.gov.ru. Однако есть еще такой список blocklist.rkn.gov.ru — и вот они двое ни разу не синхронизированы. Вопрос такой — есть ли какой-то способ объединить эти два списка в решении из этой статьи?
Если вы знаете способ, как получить полный список из второй ссылки в виде файла — далее всё будет делаться ровно по той же логике.
UFO just landed and posted this here
Если вы забираете маршруты со своего же bird по инструкции из этой статьи, то проверьте, включено ли в описании пира passive off (т.е. активный режим). Если включено — проверьте настройки файрволла на микротике — есть ли в ветке input разрешение на входящие сессии на 179/tcp.

Замечу, что списки на antifilter.download сейчас не обновляются, судя по всему, они делаются на основе antizapret.info, где последнее обновление было 12 октября.
К счастью, https://github.com/zapret-info/z-i обновляется регулярно.

Это не так. Списки делаются на основе дампа РКН, регулярно обновляющегося. Текущая версия использованного дампа — updateTime=«2020-12-08T05:00:00+03:00».

А на основании чего сделан вывод, что списки не обновляются?

был неправ, дело не в том, что списки не обновляются, а в том, что allyouneed.lst (оно же отдаётся по bgp, как я понимаю), не включает хосты из ipresolve.lst


моя вина, невнимально читал.

Sign up to leave a comment.

Articles