Обновить

Прозрачный прокси-шлюз на роутере: VLESS + Reality + TPROXY на OpenWrt от А до Я

Уровень сложностиСложный
Время на прочтение29 мин
Охват и читатели97K
Всего голосов 97: ↑93 и ↓4+97
Комментарии112

Комментарии 112

Пробовал похожую тему с tproxy..правда не vless а другой протокол..в итоге были две проблемы ..перехват трафика в raw и зависающие сессии .. Потом перешёл с tproxy на tun..и стало лучше )

У меня схема отличается - я не использую raw вообще, у меня TPROXY через nftables в mangle/prerouting + policy routing.

Сессии не висят: Xray стабильно принимает соединения и маршрутизирует (и direct, и proxy), это видно по логам.

Так что, скорее всего, у тебя проблема была в конкретной реализации (raw/маршрутизация/loop), а не в TPROXY как таковом :)

Вполне возможно) реализация была адовая просто)

Да боже мой...
Статья очередной нейрослоп.
Сравнения, противопоставления, выводы, разрыв повествования, отсутствие структуры, ни одного скриншота.
А куда ставиться пакеты? А по какому пути лежат конфиги? Где команды для редактирования их?
А "Проверка что всё работает" вообще гениален. Никто и никогда в виде "кода" выкладывать набор команд, да еще с комментариями не будет.

ps пишу под первым комментовм чтобы мой комментарий увидели побольше читающих.

Если бы вы дочитали статью, то увидели бы и пути, и команды: /etc/xray/config.json, /etc/init.d/xray-tproxy, /etc/hotplug.d/iface/99-xray-fix, /usr/bin/adguardhome, nft list table ip xray, ip rule show - это всё там есть.

Скриншоты для SSH/nftables-конфига тут не обязательны: важнее рабочие команды и понятная схема. Если нужен формат «одна кнопка и всё само», то это просто не тот жанр статьи.

Ага части конфига /etc/xray/config.json размазаны рандомно по всей статьи, а путь конфига указан только в файле Init скрипта
А по ответу мне кажется что и ИИ бот отвечает :)
ps А как на вашем роуторе пожарить яичницу? :)

Путь к конфигу есть в статье, просто он не вынесен в отдельный “список путей”, а показан там, где это нужно по смыслу.

Статья - не справочник по OpenWrt, а разбор рабочей схемы. Поэтому конфиг, init-скрипт, nft и диагностика разбросаны по соответствующим разделам, а не сведены в один блок ради галочки.

Про “ИИ-бота” удобно писать, когда не хочется читать внимательнее.

А яичницу на этом роутере, к сожалению, не жарю :)

Я воспользовался поиском и путь где находлится config.json указан ровно в одном месте, в инит скрипте.
А настройки которорые в нем содержатся начинаются с самого начала статьи, с заголовка "Конфиг Xray: разбор по частям", сразу как установили пакеты, но узнаем где же этот конфиг находится мы из скрипта запуска, все очень логично

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

Дочитал статью до конца и даже не один раз. И знаете - вопросы примерно такие же как у автора выше. Именно структура статью жутко плавает. Разъяснение логики это прекрасно, но многим нужен именно структурированный мануал. А вот с ним беда.

Я понимаю, что многие вещи у вас просто в голове и вы просто не замечаете, что им нужно уделить внимание или как-то отметить. Но со стороны это вызывает ступор. К примеру самое, практически начало. Настройка конфигов Inbound и Outbound для Xray из статьи даже не очевидно, что блок Inbound относится к удаленному серверу с поднятым Xray на нем. При этом в Inbount у нас слушает порт 12345, а в outbound - запросы на 443. И вот сидишь и думаешь - ты где-то что-то проглядел или это автор забыл сменил порт-заглушку?

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

Боже мой, какие нафиг скриншоты (ещё бы в ворд их предложили вставить)??? Текст и только текст, который легко скопировать, сохранить, переписать, а не голимый скриншот непонятно чего непонятного качества, который завтра на хостинге протухнет и ищи-свищи, чего там было «выставляем галочки как на скриншоте».

Вы настраивали на роуторе что-нибудь похожее как в статье?
Вот возьмите статью и читая ее и пользуюсь информацией из нее попробуйте настроить.
Не прочитать и положить на полочку, а прочитать и по статье настроить.
Сразу поймете что с статьей чтото не так, информации нахватает, огромная часть информации о настройки, о действияфх с роутерами, с конфигами, почему это так просто отсутствует.
Я думаю на этапе прошивки возникнут вопросы (на точно таком же роуторе), так как роуторы Cude шьются на openwrt через переходную прошивку насколько помню.

 

В статье есть отдельный блок про прошивку, включая переходную firmware и sysupgrade, как раз под Cudy TR3000.

Если на этом этапе «возникают вопросы», значит дело не в отсутствии информации, а в том, как читается статья.

Ну так и скажите конкретно, чего не хватает. А не серчайте на отсутствие скриншотов. У меня нет роутера, который бы я мог настроить по этой статье, но как появится, я ей воспользуюсь.

Про переходную прошивку в статье сказано. И какую надо брать тоже. Вы бы сами ещё раз её внимательно перечитали, м? Но статья не про прошивку роутера, ей простительно. А то мы докатимся до того, что будем обсуждать, где: на Озоне, в DNS или на каком-нибудь Али этот роутер лучше купить.

Я на ВБ заказывал, если интересно :)

Но да, сделаю вторую часть: разложу спорные моменты подробнее и учту комментарии.

Изначально статья была про саму схему (TPROXY + Xray + routing), а не про полный гайд «с нуля до продакшена», поэтому какие-то вещи оставил за рамками.

...а ещё они почему-то обожают вместо запятых ставить тире. Иногда это выглядит уместно. Видимо "учитель" так делал, а теперь они друг у друга нахватались и стали все так делать, в большинстве случаев даже игнорируя официальные правила русского языка.

Вопрос по xray: сейчас проходит через dpi? Я настраивал awg тоннель до роутера, из роутера в ssh или warp на заграничный vps. Работает на всех опсосах (пока что). Но! Вот кажется, что можно сделать пошустрее, но бодаться с dpi не охото

Да, с Xray (VLESS + Reality) сейчас в целом нормально проходит через DPI, если сервер и конфиг адекватные.

Твоя схема с awg/ssh/warp - это несколько слоёв туннелей, поэтому она более устойчива, но добавляет задержку и оверхед. Xray более прямой вариант, обычно быстрее, но сильнее зависит от того, как именно настроен сервер и маскировка.

вообще ничего непонятно, при чём тут ssh и warp? если клиент будет на роутере, то очень вряд ли будет быстрее чем awg

REDIRECT (DNAT) — подменяет адрес назначения на 127.0.0.1:порт. Проблема: оригинальный адрес теряется. 

Вообще-то нет. Точно не знаю как оно работает, но проходит любой TCP трафик. Ядро как-то сохраняет оригинальный адрес и передаёт xray. Для UDP трафика почему-то не работает и нужен tproxy

Он не «сохраняется сам».

При REDIRECT адрес реально теряется (DNAT на 127.0.0.1), а то, что у тебя работает с TCP - это либо sniffing (SNI/Host), либо SO_ORIGINAL_DST. Это не универсально.

TPROXY как раз и нужен, чтобы получать оригинальный адрес нативно

Да нету у меня сниффинга

iptables -t nat -A PREROUTING -p tcp -j REDIRECT --to-ports 10

sing-box redirect inbound видит айпи адрес любого tcp протокола, xray тоже, нормальная универсальность. Если нужен только TCP то настраивается в 10 раз проще чем tproxy (можно прямо из веб интерфейса openwrt добавить правило).

*

Скорее всего у тебя это через SO_ORIGINAL_DST работает, а не потому что ядро само «сохраняет адрес».

С REDIRECT это в целом ок для TCP, но всё равно не совсем универсально и зависит от реализации. Поэтому TPROXY обычно используют, когда нужна более предсказуемая прозрачная схема.

"network": "tcp"

Я думаю 90% читателей будут ожидать проксирование и UDP трафика в том числе. А тут такая подстава.

Кстати QUIC блочат даже при рабочем UDP в целях увеличения производительности vless:

  1. Xtls не делает двойное шифрование https трафика, т.е. quic трафик будет жрать ресурсы проца на шифрование

  2. Quic имеет свой congestion control, ваш прокси сервер тоже, получается два congestion control что даёт производительность ниже

  3. UDP over TCP потребляет больше ресурсов проца

Тут только TCP сделан специально.

QUIC (UDP 443) я режу, чтобы весь трафик уходил в TCP и нормально проксировался. UDP в прозрачной схеме - отдельный уровень сложности.

Так что это не «подстава», а осознанное решение :)

я и так из статьи понял зачем вы блокируете quic. здесь речь не о вас, а о читателях.

напишите в самом верху что весь UDP трафик пропущен напрямую.

и вообще, вроде бы не хватает 1 строчки nft чтобы UDP проксился, но точно не уверен

*

Да, хорошее замечание, можно это явнее подчеркнуть, позднее сверху помечу про UDP, спасибо :)

Но также замечу, что там не совсем «1 строчка»: для UDP нужно ещё inbound в Xray, отдельные правила и нюансы с тем же QUIC. Я поэтому решил не усложнять и оставить только TCP.

для UDP нужно ещё inbound в Xray

network: tcp поменять на network: tcp,udp или вообще убрать строчку, по дефолту вроде оба слушает. quic как блокировался так пусть и блокируется (ниже писал почему)

Спасибо, подумаю над этим

Транспорт — чистый TCP (не WebSocket, не gRPC). TCP даёт минимальную задержку и не добавляет лишних заголовков.

а так же даёт потенциальную сибирскую блокировку (моя последняя статья), стоило бы добавить что лучше иметь в запасе gRPC траспорт (из-за встроенного мультиплекса).

кстати TCP транспорт так-то не даёт минимальную задержку, тратится много времени на tcp и tls хендшейки, если впска где-то далеко в США, то это очень заметно (ещё одна причина быть фанатом протоколов с мультиплексом, хотя там есть минусы)

Да, тут согласен - TCP не серебряная пуля, особенно если сервер далеко, хендшейки начинают чувствоваться.

Я скорее имел в виду, что TCP без WS/gRPC даёт минимальный оверхед в рамках самой схемы (без лишних слоёв), а не вообще минимальную задержку в любых условиях.

Про запасной транспорт тоже хорошее замечание :)
gRPC/WS с мультиплексом действительно могут быть полезны как fallback, особенно если начинаются блокировки или высокий RTT, спасибо, добавлю это в схему позднее

P.S. из практики: основная проблема, с которой столкнулся - забивающийся overlay.

В итоге вынес Xray и AdGuard в /tmp, а при загрузке разворачиваю их из архивов через init-скрипт и запускаю. Так удалось разгрузить overlay и всё работает стабильно.

Простите, не могу не написать)

телевизор вообще не умеет в VLESS

умеет

колонка — тем более

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

У меня Яндекс Алиса с выходом на TV, которая поддерживает ютуб. Но при этом с момента блокировки ютуба она не смогла загрузить мне ни одного видео толком. Теперь может :)

Ааа. Тогда логично. Я подумал у вас Станция без видео и ТВ/приставка на Android TV.

Судя по роутингу, запрос 2ip.io выдает адрес впн, и любой подключенный к роутеру телефон с максом может спокойно слить ip. Лучше роутинг "перевернуть" и geosite:ru-blocked заворачивать в впн, а по умолчанию сделать путь в директ. Хотя лучше не лениться и прописать категории нужных сайтов руками (geosite:youtube, geosite:telegram и т.д.). Вдруг список geosite:ru-blocked просто бесконечно разрастается и старые адреса никто не проверяет, и ушлый ркнщик найдет уже неиспользуемый домен из этого списка и запилит на нем ip чекер? А приложения встроят к себе обращения на него, и поймают всех с простым роутингом geosite:ru-blocked -> vpn. Он конечно может и новый домен создать и заблокировать, но вроде при добавлении в geosite:ru-blocked есть какая-то модерация сообществом? И свежий ноунейм сайт надеюсь не пропустят

Да, замечание справедливое :)

У меня сейчас действительно схема proxy-by-default, так что любой домен, который не вынесен в direct, может уйти через VPN - в том числе и 2ip-подобные сервисы. Для более строгого privacy-first подхода логичнее делать default direct и отдельно перечислять нужные категории.

Про geosite тоже верно: списки комьюнити-поддерживаемые и со временем меняются, так что здесь лучше держать политику маршрутизации осознанно, а не только полагаться на один большой блок.

Отличный гайд. Но я не могу пока придумать решение против активного пробинга по разным ip со стороны МАХ и т.п. И я пока перестал маршрутизировать трафик на роутере, пока не найдется решение. Поставил ip MAX в блок, домашних научил выключать wifi, если нужен MAX

У меня все телефоны, на которых стоит МАХ, имеют фиксированный IP и маршрутизируются по нему в direct. А следующее правило - блокировка МАХ, как и у вас.

на компьютере в браузере сайты озона-валбериса и т.д. не открываете? Там тоже может присутствовать несложный js который сделает пару запросов к сайтам и отправит оба ip в базу пользователей квн.

Мужчина, можно у вас роутер со всем этим купить? :)

Предложение, кстати, на полном серьёзе.

Это как-то разом можно накатить на новый роутер или каждый раз руками ставить?

А то готовая бизнес-идея.

Понятно - до первого не штатного случая (там разберемся).

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

Тоже приобрел бы готовый комплект -)

Я за вами в очереди)

На Авито подобного добра навалом.

Вот не поверите - реально всю текущую неделю именно на Авито искал роутер под работу блок-сайтов.

Пообщался, наверное, с 12-15 продавцами.

Из них 2-ое в теме (на мой взгляд).

Один прям достаточно глубоко в теме (но явно проигрывает автору этой статьи).

Остальные продавцы - полное ощущение - по какому-то гайду прошивку накатили и дальше кто во что горазд.

Глубокого понимания нет (я сам для себя тоже и WireGuard и Amnesia по "букварю" поставлю - но глубокого понимания нюансов у меня нет).

Я к чему - предложений такого уровня (читаю и перевожу со словарем) - много и я сам примерно так и могу.

А вот некая система с подходом как выше - такое редко вижу.

Со своей стороны я это называю "профессионализм" и готов за это платить.

При этом и у меня (а главное - у автора) есть понимание, что может у него и не идеальное Retail-издание, но он слушает и слышит - готов следовать дельным советам.

Поэтому - я за такое бы платил.

Ничем не хуже скилла "заменить смеситель", "установить розетки/УЗО", "сварить кофе вкусно".

Точно стоит денег.

Мне иногда кажется, что мы не на техническом сайте, на котором следят специалисты в айти.

Одни не в состоянии найти one-line аналоги, вторые городят свои нейровелосипеды.

уже и готовые роутеры с потенциально встроенными бекдорами от Авито продаванов начали рассматривать к применению.

раньше трава была зеленей...

Конкретно за модель Cudy TR3000, которая упоминается в статье, есть даже целые видео-обзоры, к которым приложены ссылки на готовые прошивки. Прошить сам аппарат несложно, хоть и какие-то знания для этого нужны. Другое дело, насколько эти прошивки в плане ошибок обкатаны. Я списывался с человеком, который сейчас допиливает OpenWrt под этот аппарат. Недавно он мне написал, что выловил следующий баг - "при отсутствие интернета V2rayA перезапускается и пишет лог, после заполнения лога, роутер выходит в режим аварии на низком уровне, переходит в режим “кирпич”.

По этому готовые решения не всегда подойдут. Если в них нет ошибок (а если есть?), то можно покупать готовое.

Сам жду TR3000. Буду пробовать. Если с vless на уровне роутера сложно, то для того же СмартТВ можно прикрутить ТВ-приставку на Android и туда накатить клиенты V2ray (и много чего ещё) и раздавать по кабелю уже с неё на ТВ. Я так около года смотрел Тюбик (без рекламы, бесплатно) на СмартТВ. На ПК тоже есть свои клиенты, на свою довольно-таки старую Windows 7, да ещё с поломанным .NET Framework, смог найти клиент. Недавно купил Mesh-систему Cudy M1200, в ней протокол WG работает из коробки, СмартТВ показывает и таким образом, даже меньше кнопок нажимать перед просмотром. Приставка теперь не нужна. Решил с роутером эксперимент провести.

Да, готовые решения есть, но там главный вопрос - насколько они понятны и поддерживаемы.

Я как раз хотел уйти от истории «прошил по гайду и надеюсь, что всё ок», потому что при любом нестандартном баге (как ты описал) без понимания дальше уже тяжело.

А так да, через приставку или клиенты на устройствах тоже вполне рабочий вариант, просто менее централизованный.

Идете на озон, заказываете Routerich AX3000, он там 5к стоил. В нем уже с завода настроен WARP и Opera Turbo, стоит Zapret 2 и ZeroBlock. AWG, кстати, тоже.
Все, можно смотреть, хоть и медленно.
Если хотите не медленно - покупаете у той же amnesia премиум-ключ - смотрите быстро. Все в веб-интерфейсе, с подробными инструкциями и консультациями в чате в телеге.

Если еще чуть времени потратить, купить VPS, поставить на него awg 2.0 одной командой, все.
Хочется больше контроля - 3X-UI (одной командой в консоли), настроить vless + XTLS + Reality прямо в вебе, получить ключ, вставить в роутер и все.

P.S. Маршрутизация из коробки в ZeroBlock (который форк podkop, как я понял) - тоже есть.

Вот спасибо за совет.

Вот в этом и дело - вы так круто и понятно расписали, что даже ради интереса хочется купить этот роутер.

А вот ни в описании этого продукта, ни в тысяча коментах - ничего подобного нет.

Максимум - поддержка молодцы, смотрю теперь ютуб (что не сильно отличает этот продукт от других в глазах покупателя).

Так что снова приходим к важности понятного продукта, который закрывает потребности/боли человека.

Купил я на likevps впску с 3x-ui сборкой, ни черта она не работает снаружи из РФ. Банальный ssh даже блочится, только ping и работает. Попросил знакомого из-за рубежа, он смог в ssh. Так что рабочая vps - тот ещё квест.

Или как принято в виндовс-среде - скачать 1 файл инсталлятора, проставить галочки, Далее, Далее, Готово. 21-й век давно, уже даже ИИ создан, а здесь всё как в 90-е, какие-то магические заклинания в командной строке, недоступные большинству пользователей интернета.

Всё так.

Или готовый роутер (с обновлениями) или понятный инсталятор all-in-one ))

Ну почему же? Вполне можно иишечке подбросить эту статью как исходный пункт для размышлений и вдохновения. В частности, оно и инсталлятор сгенерить может - но, как по мне, всё же лучше несколько скриптов с ручным контролем.

Возникло несколько вопросов после прочтения статьи:

  1. Правильно ли я понимаю, что списки серверов VPN и базы данных geoip и geosite скачиваются не через этот самый VPN, а потому провайдер спокойно видит, что вы их качаете, и, соответственно, может понять, что сейчас его будут дурить?

  2. Вроде как IPv6 более лучший протокол (все предпочитают использовать его из статьи), но вы сознательно его выключаете. В чём с ним сложность, почему нельзя всё то же самое настроить и для IPv6?

  3. Будут ли работать торренты в этой схеме? Там же peer-to-peer соединения, всё будет заворачиваться на VPN всё равно?

Хорошие вопросы :)

  1. Да, всё это качается напрямую. Провайдер может это видеть, но это обычный HTTPS-трафик и редкие запросы.

  2. IPv6 можно настроить, но там сильно больше нюансов и легко словить утечку - я поэтому его просто отключил.

  3. Торренты будут работать, но пойдут через VPN и без входящих соединений раздача может быть хуже.

По пункту 2: вот интересно было бы почитать, что это за «куча нюансов» и как «легко словить утечку». И почему через IPv4 нет этой «кучи» и «тяжело».

Кстати, забыл ещё спросить про категории в geoip и geosite. Как и откуда вообще узнать, какие существуют? Как решить практические вопросы: в какую категорию попадает этот домен / IP (ну или хотя бы более простой: попадает ли этот домен / IP в эту категорию)? Как добавить домен / IP в категорию? Как создать свою категорию?

По IPv6 - да, там реально больше нюансов. В Xray при IPIfNonMatch / IPOnDemand домен может резолвиться и в IPv4, и в IPv6, а встроенный DNS работает с A и AAAA-записями, так что IPv6 нужно отдельно учитывать в DNS, firewall и маршрутизации; OpenWrt прямо отдельно предупреждает про отключение ISP prefix delegation, чтобы не ловить IPv6 leaks на VPN-клиенте. Я поэтому и упростил схему, отключив IPv6, а не потому что он “плохой” сам по себе.

По geoip/geosite: geosite - это список доменных наборов из репозитория domain-list-community, где каждый файл в data/ превращается в правило вида geosite:filename, а внутри используются include:, domain:, full:, keyword:, regexp: и атрибуты вроде @ads / @cn; geoip - отдельный проект с месячными релизами и CLI для сборки своих баз. Практически проще всего смотреть исходные списки и plain-экспорт (dlc.dat_plain.yml, текстовый вывод geoip CLI), а свою категорию делать либо отдельным файлом в data/, либо через CLI-сборку своих geoip-файлов.

ну и после всех настроек роутера надо запустить в локальную сеть маха чтобы он разобрался куда роутер валит трафик к заблокированному контенту.

Впрочем теперь этим будет заниматься не только мах но и валберисы с озонами и т.д. Хотя никто не мешает в js наших маркетплейсов внести небольшой код который будет пробивать внешний (зарубежный) ip и на компьютере при открытии сайта в браузере.

те кто считает что раздельное маршрутизирование спасает могут поэкспериментировать - https://api.ipify.org или https://ipinfo.io/json

Очень круто и многое уже продумано, респект :) На гитлаб или около того планируете выкладывать? У вас сейчас изложено в порядке как думали и проблемы решали - это познавательно, погружает в контекст и будет здорово итоговый вариант для развертывания ) И да, про ipv6 имхо все-таки стоит проработать, через него обходы зачастую эффективнее работают.

Спасибо! Да, сейчас хочу сначала довести всё до более-менее стабильного состояния, а потом уже, возможно, выложить в более удобном для развёртывания виде, пока продумываю, как будет лучше.

Про IPv6 согласен, тема важная - я отдельно это ещё добью, но в текущей схеме сознательно упростил и отключил его, чтобы не ловить утечки и лишние сюрпризы.

Насколько безопасно пропускать трафик банков и госуслуг через кастомные прошивки наподобие OpenWRT ?

скажу банальность, но самое безопасное сейчас не пользоваться вообще никакими vpn, openwrt и полностью погрузится в заботливые обьятия ркн. Все остальное в той или иной мере не безопасно.

а так из боле-менее безопасного - что-то "xray" в режиме прокси, firefox с расширением "firefox мульти-аккаунт контейнер" и настройка проксирования для разных контейнеров. Ну а затем нужные сайты закреплять за выбранными контейнерами.

Всё это красиво конечно но влес уже устаревший и его активно блочат.

Что есть из современного?

Если я не ошибаюсь, все же в каком-то отношении использование локальных средств обхода выигрывает по безопасности за счет возможности настройки раздельной маршрутизации для разных приложений, конечно, при условии отсутствия уязвимостей SOCKS5 без авторизации. Проблема может возникнуть, например, если у жены / ребенка / гостя на устройстве есть вредоносное ПО, которое может пингануть ресурсы из реестра РКН, обнаружить факт использования средств обхода и скомпрометировать ваш ВПН. Хотя эту проблему можно частично решить с помощью каскадного ВПН (так, по крайней мере, впн сервер не попадет под подозрение) и польностью - с помощью белого списка устройств, трафик с которых нужно проксировать

А как обстоят дела с поставщиками подписок, у которых требуется передача HWID клиента? В этом решении получится получить подписку или каким-то образом передать HWID? Понимаю, что из подписки можно выдернуть ключи для каждого сервера, а потом их добавить, но подписка все же удобнее, тк могут добавляться, убираться серверы.

Да, у меня подписка как раз тянется с передачей HWID - через заголовок x-hwid в скрипте обновления.

То есть если провайдеру нужен HWID, это уже поддержано на уровне fetch-скрипта; роутерная схема тут не мешает.

Насколько хорошим решением будет развернуть все это дело на NanoPi?

Да, если речь про R5S/R6S - это уже хороший вариант под такую схему. У R5S нормальный запас по CPU и 2/4 ГБ RAM, у R6S запас ещё больше.

Для моего стека критична именно память: Xray + geodata + AdGuard уже ощутимо едят RAM, так что 1-2 ГБ хватит спокойно.

Удивительно, как у вас Filogic 820 тянет с такой низкой загрузкой tproxy + pppoe. Xiaomi AX3000T с таким же процем и активным tproxy дает 350-400 мбит в лучшем случае с маской распределения нагрузки на все ядра (правда mihomo, не xray, но суть одна). Поэтому 2.5 гбит wan с таким userspace-проксированием невозможно, да даже гигабит нереально. А под торрентами этот проц ложится даже на 300 мбитах. С таким конфигом лучше перейти на x86.

Да, тут всё очень зависит от конкретной схемы и профиля нагрузки. У меня не “просто tproxy”, а TCP-only стек с Xray+Reality, QUIC отдельно режется, и в статье я как раз показывал, что роутер живёт без заметной нагрузки в простое и без проблем тянет обычный домашний трафик.

Под торренты и сотни коротких соединений картина, конечно, хуже - это уже совсем другой сценарий. Но из этого не следует, что Filogic 820 “в принципе не тянет” такую схему: в моём случае узкое место сейчас скорее не CPU, а память/overlay и обвязка.

По моим тестам самый производительный впн на ax3000t это ядерный ipsec с шифром aes. Выдавал 900мбит и потреблял всего 40% проца если правильно помню. На втором месте openvpn с новым DCO (которого пока нет в репе openwrt), выдаёт около 600мбит. На 3 месте wireguard, выдаёт около 300мбит. (Возможно немного ошибся, точно не помню)

Ниче у автора не тянет там и близко, у меня такой же тр3000, он конечно крутой, но если вешать на него аналог пакетов для RR типо зероблока + запрет он около 250-300 выдает в вг тунельчик, проц как бы физически не выжмет выше, тем более с роутингами, физика она такая.

Сравнение некорректно из-за различной нагрузки на процессор. WireGuard шифрует весь трафик, тогда как XTLS-Vision оптимизирует работу с TLS, исключая двойное шифрование. Моя конфигурация также ограничивает QUIC, торренты и UDP, снижая общую нагрузку.

При обычном домашнем использовании TR3000 загружен на 5-8% ЦПУ, обеспечивая скорость выше 300 Мбит/с. При полноценном туннелировании всего трафика, включая торренты, показатели меняются.

Конфигурации с полным туннелем, как Зероблок, имеют иные задачи и быстрее упираются в ограничения ЦПУ.

ТС, у меня один вопрос! А зачем так усложнять? Есть же пакет V2RayA и все можно сделать без отдельных скриптов и прочего и главное - в 10 раз легче

Можно и через V2RayA, если нужен простой рабочий вариант.

Я же специально пошёл в более сложную схему: чтобы был контроль над роутингом, DNS, QUIC, автоперезапуском, обновлением подписок и чтобы было понятно, что где ломается. Для домашнего роутера это уже не только “включить прокси”, а отдельная система.

Так это все настраивается в v2RayA)

> Flash: 128 МБ NAND (overlay ~44 МБ)

В сети есть мануалы прошивки c u-boot, после чего доступно около 95 Мб, и хватит места для ADH, Podkop, ещё и останется с запасом.

Кстати, этот роутер есть с флешем 256 Мб(китайская версия, либо перепаивают память), есть ещё Cudy TR30 - это то-же самое что и TR 3000 (вроде как коллаборация Cudy и Wildberries)

Да, вариант с 256 МБ и расширением overlay встречается, но это уже не базовая TR3000 из коробки, а отдельная ревизия/модификация. У Cudy для TR3000 официально указаны 128 МБ flash, а в OpenWrt Wiki есть отдельные techdata и для 128 МБ, и для 256 МБ версии.

Поэтому в статье я бы оставил цифры для обычной ревизии, а про 256 МБ и U-Boot-правки упомянул бы как про отдельный вариант. TR30, кстати, у Cudy в каталоге идёт как отдельная модель, а не просто другое название TR3000.

Кстати, если уж упоминули подкоп, почему не подкоп?

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

Ниже уже отвечал на этот вопрос

потому что без u-boot прошивки для Podkop и AGH не хватит места на флеше

Agh не нужен

Хватает 44 метров там для всего, убут это если совсем смелый, зероблок аналог подкопа ест меньше него , все остальное решается флешкой в юсб 3.0

Не могу найти никакой инфы про зероблок, где скачать и т.п.

Обращу внимание, что бывают домены, например 17.doramalive.la, контент которых работает только из рф, либо блочится некоторыми странами, поэтому полезно иметь еще список исключений доменов и ip, которые отправлять напрямую в ру-сегнент. Список доменов нужен потому, что на одном серваке могут находиться разные сайты, какие-то работают только из ру сети, несмотря на то, что находятся на сервере вне ру сети, а какие-то размещены могут быть там же, но блочить уже клиентов из ру сети.

Да, это хороший аргумент, поэтому я как раз и добавлял исключения по доменам, а не только по IP.

На практике одного geoip:ru мало: сервис может жить на внешнем IP, но при этом нормально работать только из ру-сегмента, либо наоборот - блокировать клиентов из РФ. Так что доменные исключения тут реально нужны.

Приветствую. Я конечно не эксперт. Но чем это принципиально отличается от какого нибудь подкопа, который устанавливается и настраивается минут за 10?

Разница в контроле.

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

Простите, но у меня все еще нет ответа на вопрос комментатора выше. Потому что я уже 1.5 года сижу на podkop и все прекрасно контролирую там. Включая geosite, списки, конфиг и роутинг. В сочетании с VPS + autoXRAY - 10 минут и у тебя готовое решение.
Выглядит пока просто как попытка написать свой собственный альтернативный способ, потому что "было интересно".

Если коротко, то да, Podkop удобнее, но моя схема гибче.

Podkop - это готовое решение, и для большинства задач его более чем хватает.

У меня же цель была собрать всё руками, чтобы полностью контролировать роутинг, DNS и понимать, что происходит под капотом. Это сложнее, но даёт больше предсказуемости и гибкости.

А какой в этом смысл если ядро у вас не поддерживает альтернативные протоколы?

Кажется работа ради работы

Везде у этого роутера в описании и на фото только 1 wan и 1 lan порт. совсем не сходится с

  • Порты: 1× WAN 2.5GbE, 3× LAN 1GbE

Что-то как-то слишком скромно для его цены. вот у меня в моем два лан порта используется - это мне рядом с ним еще свич ставить?

Тут опечатка в тексте. Спасибо, что обратили внимание.

У него действительно 1 WAN + 1 LAN, так как данная модель - это по сути Travel-роутер, компактный для того, чтобы брать в путешествия. Если нужно больше портов, то без свича не обойтись, да.

Как я вижу все подобные статьи:

вот именно. Тут некоторые комментаторы наперегонки пытаются предоставить РКН варианты решения блокировки обхода трафика. Зачем? Понты? Типа, смотрите как я много знаю. Глупо. Никто так не помогает РКН, как пользователи Хабра.

Автор, не обижайтесь но покритикую. Без fakedns, который сейчас стандарт-дефакто, ваша схема выглядит как велосипед. Особенно с adguard, который нет-нет, да уже подставлял. Только на dot и doh полагаться нельзя, надо использовать оба, а еще лучше иметь failsafe на случай падения обоих. Убирать их схемы dnsmasq считаю неправильным, лучше понять его и полюбить, зато в случае чего у вас роутер не останется без dns. Качать чужие dat, тем более в /tmp - а если не скачается? А если битым скачается? А если авторы листов сойдут с ума и раздуют до размера не совместимого с жизнью? Не используйте чужие листы, да геморно, но составляйте свои. quic не страшный. udp тоже проксируется, нет в этом никакой проблемы. ipv6 точно так же легко добавляется в схему, для него только что надо тот же fakedns настроить. Под ipset можно написать собственные обработчики, тот же firewall позволяет вам использовать user скрипты. Ну и схема в кучей серверов - я не знаю, может у вас используется куча дохнущих серверов из подписки, но по-моему лучше использовать 1-2 своих. В идеале вообще каскад (я думаю вы сами в состоянии придумать)... Просто не рационально заводить 5-6 vps и по пингу решать какую использовать. Завтра может все заблочат, выбирать будет не из чего. Хорошо если роутер у вас один, но вы же небось друзьям и знакомым схему настроили.
Я не знаю в каком сообществе вы состоите, может сами через документацию всю схему придумывали (хотя есть паттерны, которые говорят что точно вдохновлялись), но таки поищите в тг...
Статья крутая для понимания xray, хотя документация на мой взгляд у xray хорошая. Для средней прокачености юзера обычно хватает подкопа. Кстати у xray есть свои неочевидные минусы, может еще столкнетесь. Желаю вам успехов.

Спасибо за развёрнутый фидбек, это правда полезно. По DNS согласен, fakedns и запасной вариант выглядят крепче, я тут сознательно упростил схему, чтобы не раздувать её и не тащить лишние состояния, но это действительно компромисс. С dat-файлами тоже согласен, это не идеальный путь, просто так пока было проще собрать рабочий вариант. QUIC, UDP и IPv6 тоже можно прикрутить, но тогда схема заметно усложняется в сопровождении, а с несколькими серверами у меня это скорее из практики с подписками. В общем, статья не про единственно правильное решение, а про мой рабочий вариант и то, что в нём пришлось допиливать руками :)

Здравствуйте! Видел комменты про подкоп, но ни одного не видел про passwall 2. Что скажете по поводу него? Там в целом же возможно настроить примерно тоже самое и поставить нужный dns (doh, adguard)...

И отдельно хотел бы поинтересоваться как вы ищете возможные утечки? Я в этом новичок

PassWall2 по возможностям реально близок к тому, что у меня собрано вручную: там уже есть transparent proxy, smart routing по доменам и geo, DNS control с DoH/DoT, load balancing, subscription support, node testing и failover, плюс он умеет работать с Xray и Sing-Box. То есть для многих задач это вполне готовый и более простой путь.

А утечки я обычно ищу просто: смотрю, какой IP видит внешний сервис, какой DNS уходит наружу, и сверяю это с логами роутера. У PassWall2 для этого прямо есть свои логи /tmp/log/passwall2.log и /tmp/log/passwall2_server.log, а у Xray есть access/error logging.

В нынешних реалиях такой подход обречен выдать IP вашего VPN, когда рандомное российское приложение на одном из устройств проверит доступность условного web.telegram.org

Решение - на выходной ноде ставим wg cloudflare warp (в базовой версии бесплатен) и заворачиваем direct outbound трафик через него, тогда рандомное российское приложение на выходе увидит ип-адрес клаудфлары, а не vps, удачи.

Когда эти богомерзкие ВПН на роутерах вымрут, даже если все идёт напрямую, кроме YouTube, шпионские приложение (в скором времени все, что разрабатывается внутри РФ) могут имитируя браузер "открыть" любое видео и получить токен с внешней ip адресом

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

Ну очень костыльно это всё. Актуальные версии Xray поддерживают создание Tun-интерфейса, куда либо правилами PBR либо статик-дефаулт-роутом можно смело отправлять весь трафик локалки (кроме BOGUS сетей и адреса VPS, разве что), затем geosite:ru и geoip:ru правилами роутинга отправлять в direct и прицепить для резолва доменов днс провайдера, а для всего остального fakedns и в прокси, смело включать quic в сниффинге и прокидывать udp в прокси.

Я с вами согласен, уже многое переработал и готовлю статью со всеми изменениями в работе роутера, на след неделе планирую выпустить ч2

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

| \\\n sort -u\n}\n\u003C\u002Fcode\u003E\u003Cdiv class=\"code-explainer\"\u003E\u003Ca href=\"https:\u002F\u002Fsourcecraft.dev\u002F\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"\u003E\u003Cimg style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\u002F\u003E\u003C\u002Fa\u003E\u003C\u002Fdiv\u003E\u003C\u002Fpre\u003E\u003Cp\u003EФункция парсит JSON grep’ом (jq на OpenWrt нет), вытаскивает все значения \u003Ccode\u003E\"address\"\u003C\u002Fcode\u003E и фильтрует только IPv4. Результат подставляется в nft-файл. Никакого ручного хардкода — обновилась подписка, рестартнул сервис, bypass-список обновился автоматически.\u003C\u002Fp\u003E\u003Cp\u003EЗачем два уровня защиты от петли (meta mark + bypass IP)? \u003Ccode\u003Emeta mark 0xff\u003C\u002Fcode\u003E — основная защита, но она работает только для соединений, которые Xray \u003Cstrong\u003Eуже установил\u003C\u002Fstrong\u003E. При начальном DNS-резолве адреса сервера пакет может не иметь метки. Bypass по IP — страховка на этот случай.\u003C\u002Fp\u003E\u003Cp\u003E\u003Cstrong\u003EДроп QUIC (правило 5)\u003C\u002Fstrong\u003E — техническое ограничение текущей схемы. QUIC (HTTP\u002F3) — это UDP на порту 443. В текущей конфигурации Xray проксирует \u003Cstrong\u003Eтолько TCP\u003C\u002Fstrong\u003E, поэтому QUIC не маршрутизируется через прокси. Если не дропнуть QUIC, произойдёт следующее:\u003C\u002Fp\u003E\u003Col\u003E\u003Cli\u003E\u003Cp\u003EБраузер пытается подключиться к сервису по QUIC (UDP 443)\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003EUDP не перехватывается TPROXY (нет правила для UDP)\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003EПакет уходит напрямую через WAN, минуя прокси-сервер\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003EТрафик уходит напрямую, минуя заданные правила маршрутизации\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003C\u002Fol\u003E\u003Cp\u003EДроп QUIC заставляет браузеры fallback’иться на TCP (HTTPS), который уже перехватывается TPROXY. HTTP\u002F3 при этом недоступен, но маршрутизация трафика работает корректно.\u003C\u002Fp\u003E\u003Cp\u003EАльтернатива — проксировать UDP тоже. Для этого нужно добавить UDP-правило в nftables и UDP inbound в Xray. Это сложнее и менее стабильно (UDP через прокси работает хуже TCP), но возможно.\u003C\u002Fp\u003E\u003Cp\u003E\u003Cstrong\u003ETCP TPROXY (правило 6)\u003C\u002Fstrong\u003E — собственно перехват. Только с интерфейса \u003Ccode\u003Ebr-lan\u003C\u002Fcode\u003E (LAN), только TCP. Пакет передаётся Xray на 127.0.0.1:12345, получает метку 0x1 для policy routing.\u003C\u002Fp\u003E\u003Cp\u003E\u003Ccode\u003Eiifname \"br-lan\"\u003C\u002Fcode\u003E — перехватываем только трафик с LAN. Трафик самого роутера (output) и трафик с WAN не трогаем.\u003C\u002Fp\u003E\u003Chr\u002F\u003E\u003Ch3\u003EGeodata: откуда берутся списки\u003C\u002Fh3\u003E\u003Cp\u003EXray использует два файла для маршрутизации:\u003C\u002Fp\u003E\u003Cp\u003E\u003Cstrong\u003Egeoip.dat\u003C\u002Fstrong\u003E — база GeoIP (привязка IP-адресов к странам). Стандартная от V2Fly. Содержит категорию \u003Ccode\u003Egeoip:ru\u003C\u002Fcode\u003E — все IP-блоки, зарегистрированные в России.\u003C\u002Fp\u003E\u003Cp\u003E\u003Cstrong\u003Egeosite.dat\u003C\u002Fstrong\u003E — база доменов. Я использую \u003Cstrong\u003Eкастомную\u003C\u002Fstrong\u003E от проекта \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Frunetfreedom\u002Frussia-v2ray-rules-dat\" rel=\"noopener noreferrer nofollow\"\u003Erunetfreedom\u002Frussia-v2ray-rules-dat\u003C\u002Fa\u003E. Она содержит категорию \u003Ccode\u003Eru-available-only-inside\u003C\u002Fcode\u003E — домены, которые корректно работают \u003Cstrong\u003Eтолько при обращении из РФ\u003C\u002Fstrong\u003E (часть финансовых, государственных и корпоративных сервисов реализует геофильтрацию). Если такие ресурсы направить через зарубежный прокси-сервер, они вернут ошибку или откажут в обслуживании по собственной политике.\u003C\u002Fp\u003E\u003Cp\u003EФайлы скачиваются при запуске и хранятся в \u003Ccode\u003E\u002Ftmp\u002Fxray-assets\u002F\u003C\u002Fcode\u003E (tmpfs):\u003C\u002Fp\u003E\u003Cpre\u003E\u003Ccode class=\"bash\"\u003EASSET_DIR=\"\u002Ftmp\u002Fxray-assets\"\nGEOIP_URL=\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fgh\u002Fv2fly\u002Fgeoip@release\u002Fgeoip.dat\"\nGEOSITE_URL=\"https:\u002F\u002Fraw.githubusercontent.com\u002Frunetfreedom\u002Frussia-v2ray-rules-dat\u002Frelease\u002Fgeosite.dat\"\n\nmkdir -p \"$ASSET_DIR\"\ncurl -fsSL -o \"$ASSET_DIR\u002Fgeoip.dat\" \"$GEOIP_URL\"\ncurl -fsSL -o \"$ASSET_DIR\u002Fgeosite.dat\" \"$GEOSITE_URL\"\n\u003C\u002Fcode\u003E\u003Cdiv class=\"code-explainer\"\u003E\u003Ca href=\"https:\u002F\u002Fsourcecraft.dev\u002F\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"\u003E\u003Cimg style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\u002F\u003E\u003C\u002Fa\u003E\u003C\u002Fdiv\u003E\u003C\u002Fpre\u003E\u003Cp\u003E\u003Cstrong\u003EО потреблении памяти:\u003C\u002Fstrong\u003E geoip.dat ~20 МБ, geosite.dat ~65 МБ — суммарно ~85 МБ в tmpfs. Это значительная часть tmpfs (у меня 242 МБ). На роутерах с 256 МБ RAM это может стать проблемой. Если памяти мало — можно хранить geodata на overlay (Flash), но это увеличит время запуска из-за медленного NAND.\u003C\u002Fp\u003E\u003Chr\u002F\u003E\u003Ch3\u003EInit-скрипт: собираем всё вместе\u003C\u002Fh3\u003E\u003Cp\u003EInit-скрипт использует \u003Cstrong\u003Eprocd\u003C\u002Fstrong\u003E — систему управления процессами OpenWrt. procd мониторит Xray и автоматически перезапускает его при падении. Также скрипт следит за изменениями конфига — если \u003Ccode\u003Econfig.json\u003C\u002Fcode\u003E обновился (например, скриптом подписки), procd перезапустит Xray.\u003C\u002Fp\u003E\u003Cpre\u003E\u003Ccode class=\"bash\"\u003E#!\u002Fbin\u002Fsh \u002Fetc\u002Frc.common\n\nUSE_PROCD=1\nSTART=99\nSTOP=10\n\nCONF=\"\u002Fetc\u002Fxray\u002Fconfig.json\"\nASSET_DIR=\"\u002Ftmp\u002Fxray-assets\"\nGEOIP_URL=\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fgh\u002Fv2fly\u002Fgeoip@release\u002Fgeoip.dat\"\nGEOSITE_URL=\"https:\u002F\u002Fraw.githubusercontent.com\u002Frunetfreedom\u002Frussia-v2ray-rules-dat\u002Frelease\u002Fgeosite.dat\"\n\ndownload_assets() {\n mkdir -p \"$ASSET_DIR\"\n [ -s \"$ASSET_DIR\u002Fgeosite.dat\" ] && [ -s \"$ASSET_DIR\u002Fgeoip.dat\" ] && return 0\n local i=0\n while [ \"$i\" -lt 3 ]; do\n i=$((i + 1))\n curl -fsSL --connect-timeout 10 --max-time 120 \\\n -o \"$ASSET_DIR\u002Fgeoip.dat\" \"$GEOIP_URL\" && \\\n curl -fsSL --connect-timeout 10 --max-time 120 \\\n -o \"$ASSET_DIR\u002Fgeosite.dat\" \"$GEOSITE_URL\" && \\\n [ -s \"$ASSET_DIR\u002Fgeosite.dat\" ] && [ -s \"$ASSET_DIR\u002Fgeoip.dat\" ] && return 0\n sleep 2\n done\n return 1\n}\n\n# Автоизвлечение IP удалённых прокси-серверов из конфига для bypass в nftables\nextract_server_ips() {\n grep -o '\"address\"[[:space:]]*:[[:space:]]*\"[^\"]*\"' \"$CONF\" 2>\u002Fdev\u002Fnull | \\\n sed 's\u002F.*\"\\([^\"]*\\)\"$\u002F\\1\u002F' | \\\n grep -E '^[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+
Обновить

Прозрачный прокси-шлюз на роутере: VLESS + Reality + TPROXY на OpenWrt от А до Я

Уровень сложностиСложный
Время на прочтение29 мин
Охват и читатели97K
Всего голосов 97: ↑93 и ↓4+97
Комментарии112

Комментарии 112

Пробовал похожую тему с tproxy..правда не vless а другой протокол..в итоге были две проблемы ..перехват трафика в raw и зависающие сессии .. Потом перешёл с tproxy на tun..и стало лучше )

У меня схема отличается - я не использую raw вообще, у меня TPROXY через nftables в mangle/prerouting + policy routing.

Сессии не висят: Xray стабильно принимает соединения и маршрутизирует (и direct, и proxy), это видно по логам.

Так что, скорее всего, у тебя проблема была в конкретной реализации (raw/маршрутизация/loop), а не в TPROXY как таковом :)

Вполне возможно) реализация была адовая просто)

Да боже мой...
Статья очередной нейрослоп.
Сравнения, противопоставления, выводы, разрыв повествования, отсутствие структуры, ни одного скриншота.
А куда ставиться пакеты? А по какому пути лежат конфиги? Где команды для редактирования их?
А "Проверка что всё работает" вообще гениален. Никто и никогда в виде "кода" выкладывать набор команд, да еще с комментариями не будет.

ps пишу под первым комментовм чтобы мой комментарий увидели побольше читающих.

Если бы вы дочитали статью, то увидели бы и пути, и команды: /etc/xray/config.json, /etc/init.d/xray-tproxy, /etc/hotplug.d/iface/99-xray-fix, /usr/bin/adguardhome, nft list table ip xray, ip rule show - это всё там есть.

Скриншоты для SSH/nftables-конфига тут не обязательны: важнее рабочие команды и понятная схема. Если нужен формат «одна кнопка и всё само», то это просто не тот жанр статьи.

Ага части конфига /etc/xray/config.json размазаны рандомно по всей статьи, а путь конфига указан только в файле Init скрипта
А по ответу мне кажется что и ИИ бот отвечает :)
ps А как на вашем роуторе пожарить яичницу? :)

Путь к конфигу есть в статье, просто он не вынесен в отдельный “список путей”, а показан там, где это нужно по смыслу.

Статья - не справочник по OpenWrt, а разбор рабочей схемы. Поэтому конфиг, init-скрипт, nft и диагностика разбросаны по соответствующим разделам, а не сведены в один блок ради галочки.

Про “ИИ-бота” удобно писать, когда не хочется читать внимательнее.

А яичницу на этом роутере, к сожалению, не жарю :)

Я воспользовался поиском и путь где находлится config.json указан ровно в одном месте, в инит скрипте.
А настройки которорые в нем содержатся начинаются с самого начала статьи, с заголовка "Конфиг Xray: разбор по частям", сразу как установили пакеты, но узнаем где же этот конфиг находится мы из скрипта запуска, все очень логично

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

Дочитал статью до конца и даже не один раз. И знаете - вопросы примерно такие же как у автора выше. Именно структура статью жутко плавает. Разъяснение логики это прекрасно, но многим нужен именно структурированный мануал. А вот с ним беда.

Я понимаю, что многие вещи у вас просто в голове и вы просто не замечаете, что им нужно уделить внимание или как-то отметить. Но со стороны это вызывает ступор. К примеру самое, практически начало. Настройка конфигов Inbound и Outbound для Xray из статьи даже не очевидно, что блок Inbound относится к удаленному серверу с поднятым Xray на нем. При этом в Inbount у нас слушает порт 12345, а в outbound - запросы на 443. И вот сидишь и думаешь - ты где-то что-то проглядел или это автор забыл сменил порт-заглушку?

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

Боже мой, какие нафиг скриншоты (ещё бы в ворд их предложили вставить)??? Текст и только текст, который легко скопировать, сохранить, переписать, а не голимый скриншот непонятно чего непонятного качества, который завтра на хостинге протухнет и ищи-свищи, чего там было «выставляем галочки как на скриншоте».

Вы настраивали на роуторе что-нибудь похожее как в статье?
Вот возьмите статью и читая ее и пользуюсь информацией из нее попробуйте настроить.
Не прочитать и положить на полочку, а прочитать и по статье настроить.
Сразу поймете что с статьей чтото не так, информации нахватает, огромная часть информации о настройки, о действияфх с роутерами, с конфигами, почему это так просто отсутствует.
Я думаю на этапе прошивки возникнут вопросы (на точно таком же роуторе), так как роуторы Cude шьются на openwrt через переходную прошивку насколько помню.

 

В статье есть отдельный блок про прошивку, включая переходную firmware и sysupgrade, как раз под Cudy TR3000.

Если на этом этапе «возникают вопросы», значит дело не в отсутствии информации, а в том, как читается статья.

Ну так и скажите конкретно, чего не хватает. А не серчайте на отсутствие скриншотов. У меня нет роутера, который бы я мог настроить по этой статье, но как появится, я ей воспользуюсь.

Про переходную прошивку в статье сказано. И какую надо брать тоже. Вы бы сами ещё раз её внимательно перечитали, м? Но статья не про прошивку роутера, ей простительно. А то мы докатимся до того, что будем обсуждать, где: на Озоне, в DNS или на каком-нибудь Али этот роутер лучше купить.

Я на ВБ заказывал, если интересно :)

Но да, сделаю вторую часть: разложу спорные моменты подробнее и учту комментарии.

Изначально статья была про саму схему (TPROXY + Xray + routing), а не про полный гайд «с нуля до продакшена», поэтому какие-то вещи оставил за рамками.

...а ещё они почему-то обожают вместо запятых ставить тире. Иногда это выглядит уместно. Видимо "учитель" так делал, а теперь они друг у друга нахватались и стали все так делать, в большинстве случаев даже игнорируя официальные правила русского языка.

Вопрос по xray: сейчас проходит через dpi? Я настраивал awg тоннель до роутера, из роутера в ssh или warp на заграничный vps. Работает на всех опсосах (пока что). Но! Вот кажется, что можно сделать пошустрее, но бодаться с dpi не охото

Да, с Xray (VLESS + Reality) сейчас в целом нормально проходит через DPI, если сервер и конфиг адекватные.

Твоя схема с awg/ssh/warp - это несколько слоёв туннелей, поэтому она более устойчива, но добавляет задержку и оверхед. Xray более прямой вариант, обычно быстрее, но сильнее зависит от того, как именно настроен сервер и маскировка.

вообще ничего непонятно, при чём тут ssh и warp? если клиент будет на роутере, то очень вряд ли будет быстрее чем awg

REDIRECT (DNAT) — подменяет адрес назначения на 127.0.0.1:порт. Проблема: оригинальный адрес теряется. 

Вообще-то нет. Точно не знаю как оно работает, но проходит любой TCP трафик. Ядро как-то сохраняет оригинальный адрес и передаёт xray. Для UDP трафика почему-то не работает и нужен tproxy

Он не «сохраняется сам».

При REDIRECT адрес реально теряется (DNAT на 127.0.0.1), а то, что у тебя работает с TCP - это либо sniffing (SNI/Host), либо SO_ORIGINAL_DST. Это не универсально.

TPROXY как раз и нужен, чтобы получать оригинальный адрес нативно

Да нету у меня сниффинга

iptables -t nat -A PREROUTING -p tcp -j REDIRECT --to-ports 10

sing-box redirect inbound видит айпи адрес любого tcp протокола, xray тоже, нормальная универсальность. Если нужен только TCP то настраивается в 10 раз проще чем tproxy (можно прямо из веб интерфейса openwrt добавить правило).

*

Скорее всего у тебя это через SO_ORIGINAL_DST работает, а не потому что ядро само «сохраняет адрес».

С REDIRECT это в целом ок для TCP, но всё равно не совсем универсально и зависит от реализации. Поэтому TPROXY обычно используют, когда нужна более предсказуемая прозрачная схема.

"network": "tcp"

Я думаю 90% читателей будут ожидать проксирование и UDP трафика в том числе. А тут такая подстава.

Кстати QUIC блочат даже при рабочем UDP в целях увеличения производительности vless:

  1. Xtls не делает двойное шифрование https трафика, т.е. quic трафик будет жрать ресурсы проца на шифрование

  2. Quic имеет свой congestion control, ваш прокси сервер тоже, получается два congestion control что даёт производительность ниже

  3. UDP over TCP потребляет больше ресурсов проца

Тут только TCP сделан специально.

QUIC (UDP 443) я режу, чтобы весь трафик уходил в TCP и нормально проксировался. UDP в прозрачной схеме - отдельный уровень сложности.

Так что это не «подстава», а осознанное решение :)

я и так из статьи понял зачем вы блокируете quic. здесь речь не о вас, а о читателях.

напишите в самом верху что весь UDP трафик пропущен напрямую.

и вообще, вроде бы не хватает 1 строчки nft чтобы UDP проксился, но точно не уверен

*

Да, хорошее замечание, можно это явнее подчеркнуть, позднее сверху помечу про UDP, спасибо :)

Но также замечу, что там не совсем «1 строчка»: для UDP нужно ещё inbound в Xray, отдельные правила и нюансы с тем же QUIC. Я поэтому решил не усложнять и оставить только TCP.

для UDP нужно ещё inbound в Xray

network: tcp поменять на network: tcp,udp или вообще убрать строчку, по дефолту вроде оба слушает. quic как блокировался так пусть и блокируется (ниже писал почему)

Спасибо, подумаю над этим

Транспорт — чистый TCP (не WebSocket, не gRPC). TCP даёт минимальную задержку и не добавляет лишних заголовков.

а так же даёт потенциальную сибирскую блокировку (моя последняя статья), стоило бы добавить что лучше иметь в запасе gRPC траспорт (из-за встроенного мультиплекса).

кстати TCP транспорт так-то не даёт минимальную задержку, тратится много времени на tcp и tls хендшейки, если впска где-то далеко в США, то это очень заметно (ещё одна причина быть фанатом протоколов с мультиплексом, хотя там есть минусы)

Да, тут согласен - TCP не серебряная пуля, особенно если сервер далеко, хендшейки начинают чувствоваться.

Я скорее имел в виду, что TCP без WS/gRPC даёт минимальный оверхед в рамках самой схемы (без лишних слоёв), а не вообще минимальную задержку в любых условиях.

Про запасной транспорт тоже хорошее замечание :)
gRPC/WS с мультиплексом действительно могут быть полезны как fallback, особенно если начинаются блокировки или высокий RTT, спасибо, добавлю это в схему позднее

P.S. из практики: основная проблема, с которой столкнулся - забивающийся overlay.

В итоге вынес Xray и AdGuard в /tmp, а при загрузке разворачиваю их из архивов через init-скрипт и запускаю. Так удалось разгрузить overlay и всё работает стабильно.

Простите, не могу не написать)

телевизор вообще не умеет в VLESS

умеет

колонка — тем более

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

У меня Яндекс Алиса с выходом на TV, которая поддерживает ютуб. Но при этом с момента блокировки ютуба она не смогла загрузить мне ни одного видео толком. Теперь может :)

Ааа. Тогда логично. Я подумал у вас Станция без видео и ТВ/приставка на Android TV.

Судя по роутингу, запрос 2ip.io выдает адрес впн, и любой подключенный к роутеру телефон с максом может спокойно слить ip. Лучше роутинг "перевернуть" и geosite:ru-blocked заворачивать в впн, а по умолчанию сделать путь в директ. Хотя лучше не лениться и прописать категории нужных сайтов руками (geosite:youtube, geosite:telegram и т.д.). Вдруг список geosite:ru-blocked просто бесконечно разрастается и старые адреса никто не проверяет, и ушлый ркнщик найдет уже неиспользуемый домен из этого списка и запилит на нем ip чекер? А приложения встроят к себе обращения на него, и поймают всех с простым роутингом geosite:ru-blocked -> vpn. Он конечно может и новый домен создать и заблокировать, но вроде при добавлении в geosite:ru-blocked есть какая-то модерация сообществом? И свежий ноунейм сайт надеюсь не пропустят

Да, замечание справедливое :)

У меня сейчас действительно схема proxy-by-default, так что любой домен, который не вынесен в direct, может уйти через VPN - в том числе и 2ip-подобные сервисы. Для более строгого privacy-first подхода логичнее делать default direct и отдельно перечислять нужные категории.

Про geosite тоже верно: списки комьюнити-поддерживаемые и со временем меняются, так что здесь лучше держать политику маршрутизации осознанно, а не только полагаться на один большой блок.

Отличный гайд. Но я не могу пока придумать решение против активного пробинга по разным ip со стороны МАХ и т.п. И я пока перестал маршрутизировать трафик на роутере, пока не найдется решение. Поставил ip MAX в блок, домашних научил выключать wifi, если нужен MAX

У меня все телефоны, на которых стоит МАХ, имеют фиксированный IP и маршрутизируются по нему в direct. А следующее правило - блокировка МАХ, как и у вас.

на компьютере в браузере сайты озона-валбериса и т.д. не открываете? Там тоже может присутствовать несложный js который сделает пару запросов к сайтам и отправит оба ip в базу пользователей квн.

Мужчина, можно у вас роутер со всем этим купить? :)

Предложение, кстати, на полном серьёзе.

Это как-то разом можно накатить на новый роутер или каждый раз руками ставить?

А то готовая бизнес-идея.

Понятно - до первого не штатного случая (там разберемся).

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

Тоже приобрел бы готовый комплект -)

Я за вами в очереди)

На Авито подобного добра навалом.

Вот не поверите - реально всю текущую неделю именно на Авито искал роутер под работу блок-сайтов.

Пообщался, наверное, с 12-15 продавцами.

Из них 2-ое в теме (на мой взгляд).

Один прям достаточно глубоко в теме (но явно проигрывает автору этой статьи).

Остальные продавцы - полное ощущение - по какому-то гайду прошивку накатили и дальше кто во что горазд.

Глубокого понимания нет (я сам для себя тоже и WireGuard и Amnesia по "букварю" поставлю - но глубокого понимания нюансов у меня нет).

Я к чему - предложений такого уровня (читаю и перевожу со словарем) - много и я сам примерно так и могу.

А вот некая система с подходом как выше - такое редко вижу.

Со своей стороны я это называю "профессионализм" и готов за это платить.

При этом и у меня (а главное - у автора) есть понимание, что может у него и не идеальное Retail-издание, но он слушает и слышит - готов следовать дельным советам.

Поэтому - я за такое бы платил.

Ничем не хуже скилла "заменить смеситель", "установить розетки/УЗО", "сварить кофе вкусно".

Точно стоит денег.

Мне иногда кажется, что мы не на техническом сайте, на котором следят специалисты в айти.

Одни не в состоянии найти one-line аналоги, вторые городят свои нейровелосипеды.

уже и готовые роутеры с потенциально встроенными бекдорами от Авито продаванов начали рассматривать к применению.

раньше трава была зеленей...

Конкретно за модель Cudy TR3000, которая упоминается в статье, есть даже целые видео-обзоры, к которым приложены ссылки на готовые прошивки. Прошить сам аппарат несложно, хоть и какие-то знания для этого нужны. Другое дело, насколько эти прошивки в плане ошибок обкатаны. Я списывался с человеком, который сейчас допиливает OpenWrt под этот аппарат. Недавно он мне написал, что выловил следующий баг - "при отсутствие интернета V2rayA перезапускается и пишет лог, после заполнения лога, роутер выходит в режим аварии на низком уровне, переходит в режим “кирпич”.

По этому готовые решения не всегда подойдут. Если в них нет ошибок (а если есть?), то можно покупать готовое.

Сам жду TR3000. Буду пробовать. Если с vless на уровне роутера сложно, то для того же СмартТВ можно прикрутить ТВ-приставку на Android и туда накатить клиенты V2ray (и много чего ещё) и раздавать по кабелю уже с неё на ТВ. Я так около года смотрел Тюбик (без рекламы, бесплатно) на СмартТВ. На ПК тоже есть свои клиенты, на свою довольно-таки старую Windows 7, да ещё с поломанным .NET Framework, смог найти клиент. Недавно купил Mesh-систему Cudy M1200, в ней протокол WG работает из коробки, СмартТВ показывает и таким образом, даже меньше кнопок нажимать перед просмотром. Приставка теперь не нужна. Решил с роутером эксперимент провести.

Да, готовые решения есть, но там главный вопрос - насколько они понятны и поддерживаемы.

Я как раз хотел уйти от истории «прошил по гайду и надеюсь, что всё ок», потому что при любом нестандартном баге (как ты описал) без понимания дальше уже тяжело.

А так да, через приставку или клиенты на устройствах тоже вполне рабочий вариант, просто менее централизованный.

Идете на озон, заказываете Routerich AX3000, он там 5к стоил. В нем уже с завода настроен WARP и Opera Turbo, стоит Zapret 2 и ZeroBlock. AWG, кстати, тоже.
Все, можно смотреть, хоть и медленно.
Если хотите не медленно - покупаете у той же amnesia премиум-ключ - смотрите быстро. Все в веб-интерфейсе, с подробными инструкциями и консультациями в чате в телеге.

Если еще чуть времени потратить, купить VPS, поставить на него awg 2.0 одной командой, все.
Хочется больше контроля - 3X-UI (одной командой в консоли), настроить vless + XTLS + Reality прямо в вебе, получить ключ, вставить в роутер и все.

P.S. Маршрутизация из коробки в ZeroBlock (который форк podkop, как я понял) - тоже есть.

Вот спасибо за совет.

Вот в этом и дело - вы так круто и понятно расписали, что даже ради интереса хочется купить этот роутер.

А вот ни в описании этого продукта, ни в тысяча коментах - ничего подобного нет.

Максимум - поддержка молодцы, смотрю теперь ютуб (что не сильно отличает этот продукт от других в глазах покупателя).

Так что снова приходим к важности понятного продукта, который закрывает потребности/боли человека.

Купил я на likevps впску с 3x-ui сборкой, ни черта она не работает снаружи из РФ. Банальный ssh даже блочится, только ping и работает. Попросил знакомого из-за рубежа, он смог в ssh. Так что рабочая vps - тот ещё квест.

Или как принято в виндовс-среде - скачать 1 файл инсталлятора, проставить галочки, Далее, Далее, Готово. 21-й век давно, уже даже ИИ создан, а здесь всё как в 90-е, какие-то магические заклинания в командной строке, недоступные большинству пользователей интернета.

Всё так.

Или готовый роутер (с обновлениями) или понятный инсталятор all-in-one ))

Ну почему же? Вполне можно иишечке подбросить эту статью как исходный пункт для размышлений и вдохновения. В частности, оно и инсталлятор сгенерить может - но, как по мне, всё же лучше несколько скриптов с ручным контролем.

Возникло несколько вопросов после прочтения статьи:

  1. Правильно ли я понимаю, что списки серверов VPN и базы данных geoip и geosite скачиваются не через этот самый VPN, а потому провайдер спокойно видит, что вы их качаете, и, соответственно, может понять, что сейчас его будут дурить?

  2. Вроде как IPv6 более лучший протокол (все предпочитают использовать его из статьи), но вы сознательно его выключаете. В чём с ним сложность, почему нельзя всё то же самое настроить и для IPv6?

  3. Будут ли работать торренты в этой схеме? Там же peer-to-peer соединения, всё будет заворачиваться на VPN всё равно?

Хорошие вопросы :)

  1. Да, всё это качается напрямую. Провайдер может это видеть, но это обычный HTTPS-трафик и редкие запросы.

  2. IPv6 можно настроить, но там сильно больше нюансов и легко словить утечку - я поэтому его просто отключил.

  3. Торренты будут работать, но пойдут через VPN и без входящих соединений раздача может быть хуже.

По пункту 2: вот интересно было бы почитать, что это за «куча нюансов» и как «легко словить утечку». И почему через IPv4 нет этой «кучи» и «тяжело».

Кстати, забыл ещё спросить про категории в geoip и geosite. Как и откуда вообще узнать, какие существуют? Как решить практические вопросы: в какую категорию попадает этот домен / IP (ну или хотя бы более простой: попадает ли этот домен / IP в эту категорию)? Как добавить домен / IP в категорию? Как создать свою категорию?

По IPv6 - да, там реально больше нюансов. В Xray при IPIfNonMatch / IPOnDemand домен может резолвиться и в IPv4, и в IPv6, а встроенный DNS работает с A и AAAA-записями, так что IPv6 нужно отдельно учитывать в DNS, firewall и маршрутизации; OpenWrt прямо отдельно предупреждает про отключение ISP prefix delegation, чтобы не ловить IPv6 leaks на VPN-клиенте. Я поэтому и упростил схему, отключив IPv6, а не потому что он “плохой” сам по себе.

По geoip/geosite: geosite - это список доменных наборов из репозитория domain-list-community, где каждый файл в data/ превращается в правило вида geosite:filename, а внутри используются include:, domain:, full:, keyword:, regexp: и атрибуты вроде @ads / @cn; geoip - отдельный проект с месячными релизами и CLI для сборки своих баз. Практически проще всего смотреть исходные списки и plain-экспорт (dlc.dat_plain.yml, текстовый вывод geoip CLI), а свою категорию делать либо отдельным файлом в data/, либо через CLI-сборку своих geoip-файлов.

ну и после всех настроек роутера надо запустить в локальную сеть маха чтобы он разобрался куда роутер валит трафик к заблокированному контенту.

Впрочем теперь этим будет заниматься не только мах но и валберисы с озонами и т.д. Хотя никто не мешает в js наших маркетплейсов внести небольшой код который будет пробивать внешний (зарубежный) ip и на компьютере при открытии сайта в браузере.

те кто считает что раздельное маршрутизирование спасает могут поэкспериментировать - https://api.ipify.org или https://ipinfo.io/json

Очень круто и многое уже продумано, респект :) На гитлаб или около того планируете выкладывать? У вас сейчас изложено в порядке как думали и проблемы решали - это познавательно, погружает в контекст и будет здорово итоговый вариант для развертывания ) И да, про ipv6 имхо все-таки стоит проработать, через него обходы зачастую эффективнее работают.

Спасибо! Да, сейчас хочу сначала довести всё до более-менее стабильного состояния, а потом уже, возможно, выложить в более удобном для развёртывания виде, пока продумываю, как будет лучше.

Про IPv6 согласен, тема важная - я отдельно это ещё добью, но в текущей схеме сознательно упростил и отключил его, чтобы не ловить утечки и лишние сюрпризы.

Насколько безопасно пропускать трафик банков и госуслуг через кастомные прошивки наподобие OpenWRT ?

скажу банальность, но самое безопасное сейчас не пользоваться вообще никакими vpn, openwrt и полностью погрузится в заботливые обьятия ркн. Все остальное в той или иной мере не безопасно.

а так из боле-менее безопасного - что-то "xray" в режиме прокси, firefox с расширением "firefox мульти-аккаунт контейнер" и настройка проксирования для разных контейнеров. Ну а затем нужные сайты закреплять за выбранными контейнерами.

Всё это красиво конечно но влес уже устаревший и его активно блочат.

Что есть из современного?

Если я не ошибаюсь, все же в каком-то отношении использование локальных средств обхода выигрывает по безопасности за счет возможности настройки раздельной маршрутизации для разных приложений, конечно, при условии отсутствия уязвимостей SOCKS5 без авторизации. Проблема может возникнуть, например, если у жены / ребенка / гостя на устройстве есть вредоносное ПО, которое может пингануть ресурсы из реестра РКН, обнаружить факт использования средств обхода и скомпрометировать ваш ВПН. Хотя эту проблему можно частично решить с помощью каскадного ВПН (так, по крайней мере, впн сервер не попадет под подозрение) и польностью - с помощью белого списка устройств, трафик с которых нужно проксировать

А как обстоят дела с поставщиками подписок, у которых требуется передача HWID клиента? В этом решении получится получить подписку или каким-то образом передать HWID? Понимаю, что из подписки можно выдернуть ключи для каждого сервера, а потом их добавить, но подписка все же удобнее, тк могут добавляться, убираться серверы.

Да, у меня подписка как раз тянется с передачей HWID - через заголовок x-hwid в скрипте обновления.

То есть если провайдеру нужен HWID, это уже поддержано на уровне fetch-скрипта; роутерная схема тут не мешает.

Насколько хорошим решением будет развернуть все это дело на NanoPi?

Да, если речь про R5S/R6S - это уже хороший вариант под такую схему. У R5S нормальный запас по CPU и 2/4 ГБ RAM, у R6S запас ещё больше.

Для моего стека критична именно память: Xray + geodata + AdGuard уже ощутимо едят RAM, так что 1-2 ГБ хватит спокойно.

Удивительно, как у вас Filogic 820 тянет с такой низкой загрузкой tproxy + pppoe. Xiaomi AX3000T с таким же процем и активным tproxy дает 350-400 мбит в лучшем случае с маской распределения нагрузки на все ядра (правда mihomo, не xray, но суть одна). Поэтому 2.5 гбит wan с таким userspace-проксированием невозможно, да даже гигабит нереально. А под торрентами этот проц ложится даже на 300 мбитах. С таким конфигом лучше перейти на x86.

Да, тут всё очень зависит от конкретной схемы и профиля нагрузки. У меня не “просто tproxy”, а TCP-only стек с Xray+Reality, QUIC отдельно режется, и в статье я как раз показывал, что роутер живёт без заметной нагрузки в простое и без проблем тянет обычный домашний трафик.

Под торренты и сотни коротких соединений картина, конечно, хуже - это уже совсем другой сценарий. Но из этого не следует, что Filogic 820 “в принципе не тянет” такую схему: в моём случае узкое место сейчас скорее не CPU, а память/overlay и обвязка.

По моим тестам самый производительный впн на ax3000t это ядерный ipsec с шифром aes. Выдавал 900мбит и потреблял всего 40% проца если правильно помню. На втором месте openvpn с новым DCO (которого пока нет в репе openwrt), выдаёт около 600мбит. На 3 месте wireguard, выдаёт около 300мбит. (Возможно немного ошибся, точно не помню)

Ниче у автора не тянет там и близко, у меня такой же тр3000, он конечно крутой, но если вешать на него аналог пакетов для RR типо зероблока + запрет он около 250-300 выдает в вг тунельчик, проц как бы физически не выжмет выше, тем более с роутингами, физика она такая.

Сравнение некорректно из-за различной нагрузки на процессор. WireGuard шифрует весь трафик, тогда как XTLS-Vision оптимизирует работу с TLS, исключая двойное шифрование. Моя конфигурация также ограничивает QUIC, торренты и UDP, снижая общую нагрузку.

При обычном домашнем использовании TR3000 загружен на 5-8% ЦПУ, обеспечивая скорость выше 300 Мбит/с. При полноценном туннелировании всего трафика, включая торренты, показатели меняются.

Конфигурации с полным туннелем, как Зероблок, имеют иные задачи и быстрее упираются в ограничения ЦПУ.

ТС, у меня один вопрос! А зачем так усложнять? Есть же пакет V2RayA и все можно сделать без отдельных скриптов и прочего и главное - в 10 раз легче

Можно и через V2RayA, если нужен простой рабочий вариант.

Я же специально пошёл в более сложную схему: чтобы был контроль над роутингом, DNS, QUIC, автоперезапуском, обновлением подписок и чтобы было понятно, что где ломается. Для домашнего роутера это уже не только “включить прокси”, а отдельная система.

Так это все настраивается в v2RayA)

> Flash: 128 МБ NAND (overlay ~44 МБ)

В сети есть мануалы прошивки c u-boot, после чего доступно около 95 Мб, и хватит места для ADH, Podkop, ещё и останется с запасом.

Кстати, этот роутер есть с флешем 256 Мб(китайская версия, либо перепаивают память), есть ещё Cudy TR30 - это то-же самое что и TR 3000 (вроде как коллаборация Cudy и Wildberries)

Да, вариант с 256 МБ и расширением overlay встречается, но это уже не базовая TR3000 из коробки, а отдельная ревизия/модификация. У Cudy для TR3000 официально указаны 128 МБ flash, а в OpenWrt Wiki есть отдельные techdata и для 128 МБ, и для 256 МБ версии.

Поэтому в статье я бы оставил цифры для обычной ревизии, а про 256 МБ и U-Boot-правки упомянул бы как про отдельный вариант. TR30, кстати, у Cudy в каталоге идёт как отдельная модель, а не просто другое название TR3000.

Кстати, если уж упоминули подкоп, почему не подкоп?

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

Ниже уже отвечал на этот вопрос

потому что без u-boot прошивки для Podkop и AGH не хватит места на флеше

Agh не нужен

Хватает 44 метров там для всего, убут это если совсем смелый, зероблок аналог подкопа ест меньше него , все остальное решается флешкой в юсб 3.0

Не могу найти никакой инфы про зероблок, где скачать и т.п.

Обращу внимание, что бывают домены, например 17.doramalive.la, контент которых работает только из рф, либо блочится некоторыми странами, поэтому полезно иметь еще список исключений доменов и ip, которые отправлять напрямую в ру-сегнент. Список доменов нужен потому, что на одном серваке могут находиться разные сайты, какие-то работают только из ру сети, несмотря на то, что находятся на сервере вне ру сети, а какие-то размещены могут быть там же, но блочить уже клиентов из ру сети.

Да, это хороший аргумент, поэтому я как раз и добавлял исключения по доменам, а не только по IP.

На практике одного geoip:ru мало: сервис может жить на внешнем IP, но при этом нормально работать только из ру-сегмента, либо наоборот - блокировать клиентов из РФ. Так что доменные исключения тут реально нужны.

Приветствую. Я конечно не эксперт. Но чем это принципиально отличается от какого нибудь подкопа, который устанавливается и настраивается минут за 10?

Разница в контроле.

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

Простите, но у меня все еще нет ответа на вопрос комментатора выше. Потому что я уже 1.5 года сижу на podkop и все прекрасно контролирую там. Включая geosite, списки, конфиг и роутинг. В сочетании с VPS + autoXRAY - 10 минут и у тебя готовое решение.
Выглядит пока просто как попытка написать свой собственный альтернативный способ, потому что "было интересно".

Если коротко, то да, Podkop удобнее, но моя схема гибче.

Podkop - это готовое решение, и для большинства задач его более чем хватает.

У меня же цель была собрать всё руками, чтобы полностью контролировать роутинг, DNS и понимать, что происходит под капотом. Это сложнее, но даёт больше предсказуемости и гибкости.

А какой в этом смысл если ядро у вас не поддерживает альтернативные протоколы?

Кажется работа ради работы

Везде у этого роутера в описании и на фото только 1 wan и 1 lan порт. совсем не сходится с

  • Порты: 1× WAN 2.5GbE, 3× LAN 1GbE

Что-то как-то слишком скромно для его цены. вот у меня в моем два лан порта используется - это мне рядом с ним еще свич ставить?

Тут опечатка в тексте. Спасибо, что обратили внимание.

У него действительно 1 WAN + 1 LAN, так как данная модель - это по сути Travel-роутер, компактный для того, чтобы брать в путешествия. Если нужно больше портов, то без свича не обойтись, да.

Как я вижу все подобные статьи:

вот именно. Тут некоторые комментаторы наперегонки пытаются предоставить РКН варианты решения блокировки обхода трафика. Зачем? Понты? Типа, смотрите как я много знаю. Глупо. Никто так не помогает РКН, как пользователи Хабра.

Автор, не обижайтесь но покритикую. Без fakedns, который сейчас стандарт-дефакто, ваша схема выглядит как велосипед. Особенно с adguard, который нет-нет, да уже подставлял. Только на dot и doh полагаться нельзя, надо использовать оба, а еще лучше иметь failsafe на случай падения обоих. Убирать их схемы dnsmasq считаю неправильным, лучше понять его и полюбить, зато в случае чего у вас роутер не останется без dns. Качать чужие dat, тем более в /tmp - а если не скачается? А если битым скачается? А если авторы листов сойдут с ума и раздуют до размера не совместимого с жизнью? Не используйте чужие листы, да геморно, но составляйте свои. quic не страшный. udp тоже проксируется, нет в этом никакой проблемы. ipv6 точно так же легко добавляется в схему, для него только что надо тот же fakedns настроить. Под ipset можно написать собственные обработчики, тот же firewall позволяет вам использовать user скрипты. Ну и схема в кучей серверов - я не знаю, может у вас используется куча дохнущих серверов из подписки, но по-моему лучше использовать 1-2 своих. В идеале вообще каскад (я думаю вы сами в состоянии придумать)... Просто не рационально заводить 5-6 vps и по пингу решать какую использовать. Завтра может все заблочат, выбирать будет не из чего. Хорошо если роутер у вас один, но вы же небось друзьям и знакомым схему настроили.
Я не знаю в каком сообществе вы состоите, может сами через документацию всю схему придумывали (хотя есть паттерны, которые говорят что точно вдохновлялись), но таки поищите в тг...
Статья крутая для понимания xray, хотя документация на мой взгляд у xray хорошая. Для средней прокачености юзера обычно хватает подкопа. Кстати у xray есть свои неочевидные минусы, может еще столкнетесь. Желаю вам успехов.

Спасибо за развёрнутый фидбек, это правда полезно. По DNS согласен, fakedns и запасной вариант выглядят крепче, я тут сознательно упростил схему, чтобы не раздувать её и не тащить лишние состояния, но это действительно компромисс. С dat-файлами тоже согласен, это не идеальный путь, просто так пока было проще собрать рабочий вариант. QUIC, UDP и IPv6 тоже можно прикрутить, но тогда схема заметно усложняется в сопровождении, а с несколькими серверами у меня это скорее из практики с подписками. В общем, статья не про единственно правильное решение, а про мой рабочий вариант и то, что в нём пришлось допиливать руками :)

Здравствуйте! Видел комменты про подкоп, но ни одного не видел про passwall 2. Что скажете по поводу него? Там в целом же возможно настроить примерно тоже самое и поставить нужный dns (doh, adguard)...

И отдельно хотел бы поинтересоваться как вы ищете возможные утечки? Я в этом новичок

PassWall2 по возможностям реально близок к тому, что у меня собрано вручную: там уже есть transparent proxy, smart routing по доменам и geo, DNS control с DoH/DoT, load balancing, subscription support, node testing и failover, плюс он умеет работать с Xray и Sing-Box. То есть для многих задач это вполне готовый и более простой путь.

А утечки я обычно ищу просто: смотрю, какой IP видит внешний сервис, какой DNS уходит наружу, и сверяю это с логами роутера. У PassWall2 для этого прямо есть свои логи /tmp/log/passwall2.log и /tmp/log/passwall2_server.log, а у Xray есть access/error logging.

В нынешних реалиях такой подход обречен выдать IP вашего VPN, когда рандомное российское приложение на одном из устройств проверит доступность условного web.telegram.org

Решение - на выходной ноде ставим wg cloudflare warp (в базовой версии бесплатен) и заворачиваем direct outbound трафик через него, тогда рандомное российское приложение на выходе увидит ип-адрес клаудфлары, а не vps, удачи.

Когда эти богомерзкие ВПН на роутерах вымрут, даже если все идёт напрямую, кроме YouTube, шпионские приложение (в скором времени все, что разрабатывается внутри РФ) могут имитируя браузер "открыть" любое видео и получить токен с внешней ip адресом

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

Ну очень костыльно это всё. Актуальные версии Xray поддерживают создание Tun-интерфейса, куда либо правилами PBR либо статик-дефаулт-роутом можно смело отправлять весь трафик локалки (кроме BOGUS сетей и адреса VPS, разве что), затем geosite:ru и geoip:ru правилами роутинга отправлять в direct и прицепить для резолва доменов днс провайдера, а для всего остального fakedns и в прокси, смело включать quic в сниффинге и прокидывать udp в прокси.

Я с вами согласен, уже многое переработал и готовлю статью со всеми изменениями в работе роутера, на след неделе планирую выпустить ч2

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

| \\\n sort -u\n}\n\nsetup_network() {\n # Policy routing (очистка дублей + добавление)\n while ip rule del fwmark 1 table 100 2>\u002Fdev\u002Fnull; do :; done\n ip route flush table 100 2>\u002Fdev\u002Fnull\n ip rule add fwmark 1 table 100\n ip route add local 0.0.0.0\u002F0 dev lo table 100\n\n # Собираем bypass-список IP серверов из конфига\n local bypass_ips\n bypass_ips=$(extract_server_ips | tr '\\n' ',' | sed 's\u002F,$\u002F\u002F')\n\n # Удаляем старую таблицу\n nft delete table ip xray 2>\u002Fdev\u002Fnull\n\n # Генерируем nft-файл\n local nft_file=\"\u002Ftmp\u002Fxray.nft\"\n cat > \"$nft_file\" << NFT\ntable ip xray {\n chain prerouting {\n type filter hook prerouting priority mangle; policy accept;\n ip daddr { 127.0.0.0\u002F8, 10.0.0.0\u002F8, 172.16.0.0\u002F12, 192.168.0.0\u002F16 } return\n meta mark 0xff return\nNFT\n\n # Bypass IP серверов (только если есть IP-адреса в конфиге)\n [ -n \"$bypass_ips\" ] && \\\n echo \" ip daddr { $bypass_ips } return\" >> \"$nft_file\"\n\n cat >> \"$nft_file\" << 'NFT'\n udp dport { 67, 68 } return\n iifname \"br-lan\" udp dport 443 drop\n iifname \"br-lan\" meta l4proto tcp tproxy to 127.0.0.1:12345 meta mark set 1 accept\n }\n}\nNFT\n\n # Атомарная загрузка правил\n nft -f \"$nft_file\" || {\n logger -t xray-tproxy \"nftables apply failed\"\n rm -f \"$nft_file\"\n return 1\n }\n rm -f \"$nft_file\"\n logger -t xray-tproxy \"Network ready (bypass: ${bypass_ips:-none})\"\n}\n\nstart_service() {\n download_assets || {\n logger -t xray-tproxy \"Geo assets download failed\"\n return 1\n }\n\n setup_network || return 1\n\n procd_open_instance \"xray\"\n procd_set_param command \u002Fusr\u002Fbin\u002Fxray run -c \"$CONF\"\n procd_set_param env XRAY_LOCATION_ASSET=\"$ASSET_DIR\"\n procd_set_param stdout 1\n procd_set_param stderr 1\n procd_set_param respawn 3600 5 5\n procd_set_param limits core=\"unlimited\"\n procd_set_param limits nofile=\"1000000 1000000\"\n procd_set_param file \"$CONF\"\n procd_close_instance\n}\n\nstop_service() {\n nft delete table ip xray 2>\u002Fdev\u002Fnull\n while ip rule del fwmark 1 table 100 2>\u002Fdev\u002Fnull; do :; done\n ip route flush table 100 2>\u002Fdev\u002Fnull\n logger -t xray-tproxy \"Stopped, network cleaned\"\n}\n\nservice_triggers() {\n procd_add_reload_trigger \"xray\"\n}\n\u003C\u002Fcode\u003E\u003Cdiv class=\"code-explainer\"\u003E\u003Ca href=\"https:\u002F\u002Fsourcecraft.dev\u002F\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"\u003E\u003Cimg style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\u002F\u003E\u003C\u002Fa\u003E\u003C\u002Fdiv\u003E\u003C\u002Fpre\u003E\u003Cp\u003EРазберём ключевые решения:\u003C\u002Fp\u003E\u003Cp\u003E\u003Ccode\u003E\u003Cstrong\u003EUSE_PROCD=1\u003C\u002Fstrong\u003E\u003C\u002Fcode\u003E — вместо простого \u003Ccode\u003Estart()\u002Fstop()\u003C\u002Fcode\u003E используем procd API. Это даёт автоматический перезапуск при падении, мониторинг процесса и корректную обработку сигналов.\u003C\u002Fp\u003E\u003Cp\u003E\u003Ccode\u003E\u003Cstrong\u003Eprocd_set_param respawn 3600 5 5\u003C\u002Fstrong\u003E\u003C\u002Fcode\u003E — если Xray упадёт, procd перезапустит его. Параметры: порог (3600 секунд), задержка (5 секунд), максимум рестартов (5). Если за час Xray упал 5 раз — procd перестанет перезапускать (значит, проблема серьёзнее).\u003C\u002Fp\u003E\u003Cp\u003E\u003Ccode\u003E\u003Cstrong\u003Eprocd_set_param file \"$CONF\"\u003C\u002Fstrong\u003E\u003C\u002Fcode\u003E — procd следит за файлом конфига. Когда скрипт обновления подписки перезаписывает \u003Ccode\u003Econfig.json\u003C\u002Fcode\u003E, procd перезапустит Xray.\u003C\u002Fp\u003E\u003Cp\u003E\u003Ccode\u003E\u003Cstrong\u003Eextract_server_ips()\u003C\u002Fstrong\u003E\u003C\u002Fcode\u003E — парсит \u003Ccode\u003Econfig.json\u003C\u002Fcode\u003E, вытаскивает все IPv4-адреса из полей \u003Ccode\u003E\"address\"\u003C\u002Fcode\u003E и подставляет в bypass-список nftables. Никакого ручного хардкода IP — обновилась подписка, рестартнул сервис, bypass обновился.\u003C\u002Fp\u003E\u003Cp\u003E\u003Cstrong\u003EАтомарная загрузка nftables\u003C\u002Fstrong\u003E — правила записываются в файл и загружаются одной командой \u003Ccode\u003Enft -f\u003C\u002Fcode\u003E. Если файл содержит ошибку — ни одно правило не применится (атомарность). При поштучном \u003Ccode\u003Enft add rule\u003C\u002Fcode\u003E ошибка в середине оставит таблицу в полуприменённом состоянии.\u003C\u002Fp\u003E\u003Cp\u003E\u003Ccode\u003E\u003Cstrong\u003Esetup_network()\u003C\u002Fstrong\u003E\u003C\u002Fcode\u003E\u003Cstrong\u003E очищает дубли\u003C\u002Fstrong\u003E — \u003Ccode\u003Ewhile ip rule del ... ; do :; done\u003C\u002Fcode\u003E удаляет все накопившиеся правила перед добавлением нового. В ранней версии скрипта я этого не делал, и за 3 дня аптайма накопилось 14 дублирующих ip rule — теперь этого не происходит.\u003C\u002Fp\u003E\u003Cp\u003EАктивируем:\u003C\u002Fp\u003E\u003Cpre\u003E\u003Ccode class=\"bash\"\u003Echmod +x \u002Fetc\u002Finit.d\u002Fxray-tproxy\n\u002Fetc\u002Finit.d\u002Fxray-tproxy enable\n\u002Fetc\u002Finit.d\u002Fxray-tproxy start\n\u003C\u002Fcode\u003E\u003Cdiv class=\"code-explainer\"\u003E\u003Ca href=\"https:\u002F\u002Fsourcecraft.dev\u002F\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"\u003E\u003Cimg style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\u002F\u003E\u003C\u002Fa\u003E\u003C\u002Fdiv\u003E\u003C\u002Fpre\u003E\u003Cp\u003E\u003Cstrong\u003EВажно:\u003C\u002Fstrong\u003E если у вас стоит стоковый init-скрипт \u003Ccode\u003Exray\u003C\u002Fcode\u003E (из пакета xray-core) — отключите его, чтобы не было конфликта:\u003C\u002Fp\u003E\u003Cpre\u003E\u003Ccode class=\"bash\"\u003E\u002Fetc\u002Finit.d\u002Fxray disable\n\u003C\u002Fcode\u003E\u003Cdiv class=\"code-explainer\"\u003E\u003Ca href=\"https:\u002F\u002Fsourcecraft.dev\u002F\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"\u003E\u003Cimg style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\u002F\u003E\u003C\u002Fa\u003E\u003C\u002Fdiv\u003E\u003C\u002Fpre\u003E\u003Chr\u002F\u003E\u003Ch3\u003EАвтоматическое обновление подписки\u003C\u002Fh3\u003E\u003Cp\u003EМногие поставщики защищённых каналов с поддержкой VLESS предоставляют \u003Cstrong\u003Eподписку\u003C\u002Fstrong\u003E — URL, который возвращает base64-закодированный список серверов в формате \u003Ccode\u003Evless:\u002F\u002F...\u003C\u002Fcode\u003E. Список серверов может меняться: добавляются новые, удаляются устаревшие. Чтобы не обновлять конфиг вручную, я написал скрипт автообновления.\u003C\u002Fp\u003E\u003Cp\u003EУ меня подписок две — от разных поставщиков. Это и отказоустойчивость (один лёг — второй работает), и больше серверов для балансировки. Скрипт обрабатывает обе, и если одна недоступна — это не фатальная ошибка.\u003C\u002Fp\u003E\u003Ch4\u003EПроблема: на OpenWrt нет base64\u003C\u002Fh4\u003E\u003Cp\u003EBusyBox на OpenWrt — минимальная среда. Нет \u003Ccode\u003Ebase64\u003C\u002Fcode\u003E, нет \u003Ccode\u003Ejq\u003C\u002Fcode\u003E, нет \u003Ccode\u003Epython\u003C\u002Fcode\u003E. А подписка приходит в base64. Что делать?\u003C\u002Fp\u003E\u003Cp\u003EПисать base64-декодер на \u003Ccode\u003Eawk\u003C\u002Fcode\u003E. Да, это возможно, и это самый хакерский кусок всей системы:\u003C\u002Fp\u003E\u003Cpre\u003E\u003Ccode class=\"bash\"\u003Eawk '\nBEGIN {\n a=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+\u002F\"\n for(i=1;i<=length(a);i++) m[substr(a,i,1)]=i-1\n}\n{\n for(i=1;i<=length($0);i++){\n c=substr($0,i,1)\n if(c~\u002F[A-Za-z0-9+\\\u002F=]\u002F) s=s c\n }\n}\nEND {\n for(i=1;i<=length(s);i+=4){\n c1=substr(s,i,1); c2=substr(s,i+1,1)\n c3=substr(s,i+2,1); c4=substr(s,i+3,1)\n v1=m[c1]; v2=m[c2]\n printf \"%c\", int(v1*4+int(v2\u002F16))\n if(c3==\"=\") break\n v3=m[c3]\n printf \"%c\", int((v2%16)*16+int(v3\u002F4))\n if(c4==\"=\") continue\n v4=m[c4]\n printf \"%c\", int((v3%4)*64+v4)\n }\n}' input.b64 > output.txt\n\u003C\u002Fcode\u003E\u003Cdiv class=\"code-explainer\"\u003E\u003Ca href=\"https:\u002F\u002Fsourcecraft.dev\u002F\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"\u003E\u003Cimg style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\u002F\u003E\u003C\u002Fa\u003E\u003C\u002Fdiv\u003E\u003C\u002Fpre\u003E\u003Cp\u003E20 строк awk — полноценный base64-декодер, работающий на любом BusyBox.\u003C\u002Fp\u003E\u003Ch4\u003EАрхитектура скрипта\u003C\u002Fh4\u003E\u003Cp\u003EСкрипт вырос из простого «скачай-распарси-подставь» в полноценный инструмент на ~200 строк ash. Общий алгоритм:\u003C\u002Fp\u003E\u003Col\u003E\u003Cli\u003E\u003Cp\u003E\u003Cstrong\u003EFetch\u003C\u002Fstrong\u003E — скачиваем подписки по URL (две штуки, независимо)\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E\u003Cstrong\u003EDecode\u003C\u002Fstrong\u003E — base64 → текст (по одной VLESS-ссылке на строку)\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E\u003Cstrong\u003EFilter\u003C\u002Fstrong\u003E — отбрасываем специализированные ноды (выделенные для отдельных сервисов или типов сетей)\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E\u003Cstrong\u003EParse\u003C\u002Fstrong\u003E — из каждой ссылки извлекаем параметры и генерируем Xray JSON outbound\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E\u003Cstrong\u003EBuild\u003C\u002Fstrong\u003E — собираем конфиг из шаблона, подставляя список серверов\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E\u003Cstrong\u003EValidate\u003C\u002Fstrong\u003E — \u003Ccode\u003Exray run -test -c config.json\u003C\u002Fcode\u003E проверяет синтаксис\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E\u003Cstrong\u003EApply\u003C\u002Fstrong\u003E — бэкап старого конфига → замена → перезапуск\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003C\u002Fol\u003E\u003Cp\u003EКлючевое отличие от первой версии — \u003Cstrong\u003Eничего не захардкожено\u003C\u002Fstrong\u003E. Ни один сервер не вшит в скрипт. Оба провайдера парсятся динамически. Теги серверов — \u003Ccode\u003Eproxy-provider1-1..N\u003C\u002Fcode\u003E и \u003Ccode\u003Eproxy-provider2-1..N\u003C\u002Fcode\u003E — все матчатся селектором \u003Ccode\u003Eproxy-*\u003C\u002Fcode\u003E в балансировщике.\u003C\u002Fp\u003E\u003Ch4\u003EУниверсальный парсер vless_to_json()\u003C\u002Fh4\u003E\u003Cp\u003EСамая полезная часть скрипта — функция, которая принимает \u003Ccode\u003Evless:\u002F\u002F\u003C\u002Fcode\u003E URL и генерирует готовый Xray JSON outbound:\u003C\u002Fp\u003E\u003Cpre\u003E\u003Ccode class=\"bash\"\u003Evless_to_json() {\n local url=\"$1\" tag=\"$2\"\n\n # Извлекаем базовые параметры из URL\n local uuid host port\n uuid=$(echo \"$url\" | sed -n 's|vless:\u002F\u002F\\([^@]*\\)@.*|\\1|p')\n host=$(echo \"$url\" | sed -n 's|.*@\\([^:]*\\):.*|\\1|p')\n port=$(echo \"$url\" | sed -n 's|.*:\\([0-9]*\\).*|\\1|p')\n\n # Извлекаем параметры из query string\n local pbk sni sid tp flow fp\n pbk=$(echo \"$url\" | sed -n 's|.*pbk=\\([^&]*\\).*|\\1|p')\n sni=$(echo \"$url\" | sed -n 's|.*sni=\\([^&]*\\).*|\\1|p')\n sid=$(echo \"$url\" | sed -n 's|.*sid=\\([^&]*\\).*|\\1|p')\n tp=$(echo \"$url\" | sed -n 's|.*type=\\([^&]*\\).*|\\1|p')\n flow=$(echo \"$url\" | sed -n 's|.*flow=\\([^&]*\\).*|\\1|p')\n fp=$(echo \"$url\" | sed -n 's|.*fp=\\([^&]*\\).*|\\1|p')\n\n # Значения по умолчанию\n [ -z \"$sni\" ] && sni=\"$host\"\n [ -z \"$tp\" ] && tp=\"tcp\"\n [ -z \"$fp\" ] && fp=\"chrome\"\n\n # flow — только для TCP (XTLS-Vision не работает с XHTTP)\n local flow_line=\"\"\n if [ \"$tp\" = \"tcp\" ] && [ -n \"$flow\" ]; then\n flow_line=\"\\\"flow\\\": \\\"$flow\\\",\"\n fi\n\n # shortId — опционален\n local sid_line=\"\"\n [ -n \"$sid\" ] && sid_line=\"\\\"shortId\\\": \\\"$sid\\\",\"\n\n # Транспорт: TCP или XHTTP\n local network_block\n if [ \"$tp\" = \"xhttp\" ]; then\n local path\n path=$(echo \"$url\" | sed -n 's|.*path=\\([^&]*\\).*|\\1|p' | \\\n sed 's|%2F|\u002F|g')\n network_block=\"\\\"network\\\": \\\"xhttp\\\",\n \\\"xhttpSettings\\\": {\\\"path\\\": \\\"${path:-\u002F}\\\"}\"\n else\n network_block=\"\\\"network\\\": \\\"tcp\\\"\"\n fi\n\n cat <<EOJ\n{\n \"tag\": \"$tag\",\n \"protocol\": \"vless\",\n \"settings\": {\n \"vnext\": [{\n \"address\": \"$host\",\n \"port\": $port,\n \"users\": [{\n \"id\": \"$uuid\",\n $flow_line\n \"encryption\": \"none\"\n }]\n }]\n },\n \"streamSettings\": {\n $network_block,\n \"security\": \"reality\",\n \"realitySettings\": {\n \"serverName\": \"$sni\",\n \"publicKey\": \"$pbk\",\n $sid_line\n \"fingerprint\": \"$fp\"\n }\n }\n}\nEOJ\n}\n\u003C\u002Fcode\u003E\u003Cdiv class=\"code-explainer\"\u003E\u003Ca href=\"https:\u002F\u002Fsourcecraft.dev\u002F\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"\u003E\u003Cimg style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\u002F\u003E\u003C\u002Fa\u003E\u003C\u002Fdiv\u003E\u003C\u002Fpre\u003E\u003Cp\u003EФункция автоматически определяет:\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E\u003Cp\u003E\u003Cstrong\u003EТранспорт\u003C\u002Fstrong\u003E — TCP или XHTTP (из параметра \u003Ccode\u003Etype\u003C\u002Fcode\u003E). Некоторые поставщики дают конфигурации на XHTTP как альтернативный транспорт для случаев, когда TCP недоступен или работает нестабильно.\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E\u003Cstrong\u003Eflow\u003C\u002Fstrong\u003E — XTLS-Vision включается только для TCP (для XHTTP он не поддерживается и вызовет ошибку).\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E\u003Cstrong\u003EshortId\u003C\u002Fstrong\u003E — опционален, подставляется только если есть.\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E\u003Cstrong\u003ESNI\u003C\u002Fstrong\u003E — берётся из параметра \u003Ccode\u003Esni\u003C\u002Fcode\u003E, а если его нет — используется \u003Ccode\u003Ehost\u003C\u002Fcode\u003E.\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp\u003EОдин парсер для любых VLESS-ссылок, независимо от провайдера.\u003C\u002Fp\u003E\u003Ch4\u003EФильтрация нод: unicode-ловушка\u003C\u002Fh4\u003E\u003Cp\u003EПодписки содержат специализированные ноды: выделенные под отдельные сервисы, для AI-сервисов, для определённых типов мобильных сетей. Для роутера они не нужны — нам нужны только общие серверы.\u003C\u002Fp\u003E\u003Cp\u003EНаивный подход — \u003Ccode\u003Egrep -i\u003C\u002Fcode\u003E по ASCII-строкам — не всегда работает. Почему? Потому что некоторые поставщики подписок используют \u003Cstrong\u003Eюникодные small caps\u003C\u002Fstrong\u003E в именах нод: символы вида \u003Ccode\u003Eʏᴏᴜᴛᴜʙᴇ\u003C\u002Fcode\u003E, \u003Ccode\u003Eᴀɪ\u003C\u002Fcode\u003E, \u003Ccode\u003Eʀᴜ\u003C\u002Fcode\u003E. Обычный \u003Ccode\u003Egrep -i\u003C\u002Fcode\u003E не ловит эти символы — они находятся в другом диапазоне Unicode и не являются uppercase\u002Flowercase-парами латинских букв.\u003C\u002Fp\u003E\u003Cp\u003EРешение — отдельная функция с явными проверками:\u003C\u002Fp\u003E\u003Cpre\u003E\u003Ccode class=\"bash\"\u003Eshould_skip() {\n local name=\"$1\"\n # Обычные ASCII-паттерны\n echo \"$name\" | grep -Eiq \"youtube|russia|россия|special|mobile\" && return 0\n # Unicode small caps (в именах нод встречаются такие символы)\n echo \"$name\" | grep -q \"ʏᴏᴜᴛᴜʙᴇ\" && return 0\n echo \"$name\" | grep -q \"ᴀɪ\" && return 0\n echo \"$name\" | grep -q \"ᴩоᴄᴄия\" && return 0\n echo \"$name\" | grep -q \"ʀᴜ\" && return 0\n return 1\n}\n\u003C\u002Fcode\u003E\u003Cdiv class=\"code-explainer\"\u003E\u003Ca href=\"https:\u002F\u002Fsourcecraft.dev\u002F\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"\u003E\u003Cimg style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\u002F\u003E\u003C\u002Fa\u003E\u003C\u002Fdiv\u003E\u003C\u002Fpre\u003E\u003Cp\u003EПервая строка ловит стандартные паттерны. Остальные — побитовые проверки на конкретные юникодные строки. Неизящно, но надёжно.\u003C\u002Fp\u003E\u003Cp\u003EЕщё один нюанс: поставщик может включать в имя ноды разделитель \u003Ccode\u003E|\u003C\u002Fcode\u003E (например, \u003Ccode\u003E🛜 🇫🇮 Финляндия | HK\u003C\u002Fcode\u003E). Ранняя версия скрипта отбрасывала все такие ноды — а это были \u003Cstrong\u003Eвсе\u003C\u002Fstrong\u003E серверы одного из поставщиков. Баг, который тихо убивал половину серверов из пула. Сейчас \u003Ccode\u003E|\u003C\u002Fcode\u003E в имени не является критерием для пропуска.\u003C\u002Fp\u003E\u003Cp\u003EЗачем вообще нужен фильтр специализированных нод? Потому что подписки содержат серверы, предназначенные для конкретных задач и типов сетей. Такие ноды могут иметь неочевидные особенности маршрутизации (например, использовать российские IP и SNI) и могут нарушить правила раздельной маршрутизации для роутера.\u003C\u002Fp\u003E\u003Ch4\u003EДвойной fetch и отказоустойчивость\u003C\u002Fh4\u003E\u003Cp\u003EСкрипт обрабатывает обе подписки независимо:\u003C\u002Fp\u003E\u003Cpre\u003E\u003Ccode class=\"bash\"\u003E# Источник 1\nif fetch_and_decode \"$URL_PROVIDER1\" \"$TMP\u002Fprovider1.dec\"; then\n parse_nodes \"$TMP\u002Fprovider1.dec\" \"proxy-p1\" \"$TMP\u002Foutbounds.json\"\nfi\n\n# Источник 2\nif fetch_and_decode \"$URL_PROVIDER2\" \"$TMP\u002Fprovider2.dec\"; then\n parse_nodes \"$TMP\u002Fprovider2.dec\" \"proxy-p2\" \"$TMP\u002Foutbounds.json\"\nfi\n\n# Должен быть хотя бы один живой сервер\n[ \"$TOTAL_COUNT\" -gt 0 ] || { log \"FAIL: no nodes from any provider\"; exit 1; }\n\u003C\u002Fcode\u003E\u003Cdiv class=\"code-explainer\"\u003E\u003Ca href=\"https:\u002F\u002Fsourcecraft.dev\u002F\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"\u003E\u003Cimg style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\u002F\u003E\u003C\u002Fa\u003E\u003C\u002Fdiv\u003E\u003C\u002Fpre\u003E\u003Cp\u003EЕсли один источник недоступен — его серверы не попадают в конфиг, но серверы второго источника всё равно подтягиваются. Фатальная ошибка — только если оба источника пусты.\u003C\u002Fp\u003E\u003Cp\u003EТеги серверов — \u003Ccode\u003Eproxy-p1-1\u003C\u002Fcode\u003E, \u003Ccode\u003Eproxy-p1-2\u003C\u002Fcode\u003E, \u003Ccode\u003Eproxy-p2-1\u003C\u002Fcode\u003E, \u003Ccode\u003Eproxy-p2-2\u003C\u002Fcode\u003E и т.д. Все начинаются с \u003Ccode\u003Eproxy-\u003C\u002Fcode\u003E, что матчится селектором балансировщика \u003Ccode\u003Eproxy-*\u003C\u002Fcode\u003E. Xray не знает и не должен знать, от какого источника сервер — он просто выбирает самый быстрый.\u003C\u002Fp\u003E\u003Ch4\u003EШаблон конфига\u003C\u002Fh4\u003E\u003Cp\u003EСкрипт использует шаблон \u003Ccode\u003E\u002Fetc\u002Fxray\u002Fconfig.template.json\u003C\u002Fcode\u003E, в котором все секции статичны, кроме outbounds:\u003C\u002Fp\u003E\u003Cpre\u003E\u003Ccode class=\"json\"\u003E{\n \"log\": {\"loglevel\": \"warning\"},\n \"dns\": {\n \"queryStrategy\": \"UseIPv4\",\n \"servers\": [\n {\"address\": \"https:\u002F\u002F1.1.1.1\u002Fdns-query\", \"skipFallback\": false},\n {\"address\": \"https:\u002F\u002F8.8.8.8\u002Fdns-query\", \"skipFallback\": false}\n ]\n },\n \"observatory\": {\n \"subjectSelector\": [\"proxy-\"],\n \"probeURL\": \"http:\u002F\u002Fcp.cloudflare.com\",\n \"probeInterval\": \"120s\",\n \"enableConcurrency\": true\n },\n \"inbounds\": [\n {\n \"tag\": \"tproxy-in\",\n \"port\": 12345,\n \"protocol\": \"dokodemo-door\",\n \"settings\": {\"network\": \"tcp\", \"followRedirect\": true},\n \"sniffing\": {\n \"enabled\": true,\n \"destOverride\": [\"http\", \"tls\"],\n \"routeOnly\": true\n },\n \"streamSettings\": {\"sockopt\": {\"tproxy\": \"tproxy\"}}\n }\n ],\n \"outbounds\": [\n __OUTBOUNDS__,\n {\"tag\": \"direct\", \"protocol\": \"freedom\"},\n {\"tag\": \"block\", \"protocol\": \"blackhole\"}\n ],\n \"routing\": {\n \"domainStrategy\": \"IPIfNonMatch\",\n \"balancers\": [\n {\"tag\": \"proxy-auto\", \"selector\": [\"proxy-\"],\n \"strategy\": {\"type\": \"leastPing\"}}\n ],\n \"rules\": [\n {\"type\": \"field\", \"ip\": [\"geoip:private\"], \"outboundTag\": \"direct\"},\n {\"type\": \"field\", \"ip\": [\"geoip:ru\"], \"outboundTag\": \"direct\"},\n {\"type\": \"field\", \"domain\": [\"geosite:ru-available-only-inside\"],\n \"outboundTag\": \"direct\"},\n {\"type\": \"field\",\n \"domain\": [\"regexp:.*\\\\.ru$\", \"regexp:.*\\\\.su$\",\n \"regexp:.*\\\\.xn--p1ai$\"],\n \"outboundTag\": \"direct\"},\n {\"type\": \"field\", \"network\": \"tcp\", \"balancerTag\": \"proxy-auto\"}\n ]\n }\n}\n\u003C\u002Fcode\u003E\u003Cdiv class=\"code-explainer\"\u003E\u003Ca href=\"https:\u002F\u002Fsourcecraft.dev\u002F\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"\u003E\u003Cimg style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\u002F\u003E\u003C\u002Fa\u003E\u003C\u002Fdiv\u003E\u003C\u002Fpre\u003E\u003Cp\u003EПлейсхолдер \u003Ccode\u003E__OUTBOUNDS__\u003C\u002Fcode\u003E заменяется скриптом на JSON-массив серверов. Это позволяет обновлять список серверов, не трогая логику маршрутизации.\u003C\u002Fp\u003E\u003Ch4\u003ECron\u003C\u002Fh4\u003E\u003Cpre\u003E\u003Ccode class=\"bash\"\u003Ecrontab -e\n\u003C\u002Fcode\u003E\u003Cdiv class=\"code-explainer\"\u003E\u003Ca href=\"https:\u002F\u002Fsourcecraft.dev\u002F\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"\u003E\u003Cimg style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\u002F\u003E\u003C\u002Fa\u003E\u003C\u002Fdiv\u003E\u003C\u002Fpre\u003E\u003Cpre\u003E\u003Ccode\u003E# Обновление подписки каждые 30 минут (лог в файл)\n*\u002F30 * * * * \u002Fusr\u002Fbin\u002Fxray-update-safe \"https:\u002F\u002Fyour-subscription-url\" >> \u002Ftmp\u002Fxray-update.log 2>&1\n\n# Ротация лога обновлений каждые 6 часов\n0 *\u002F6 * * * : > \u002Ftmp\u002Fxray-update.log\n\n# Watchdog: если Xray мёртв — чистим nftables и перезапускаем\n* * * * * pidof xray >\u002Fdev\u002Fnull || { nft delete table ip xray 2>\u002Fdev\u002Fnull; \u002Fetc\u002Finit.d\u002Fxray-tproxy start; logger -t xray-watchdog \"Xray was dead, restarted\"; }\n\u003C\u002Fcode\u003E\u003Cdiv class=\"code-explainer\"\u003E\u003Ca href=\"https:\u002F\u002Fsourcecraft.dev\u002F\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"\u003E\u003Cimg style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\u002F\u003E\u003C\u002Fa\u003E\u003C\u002Fdiv\u003E\u003C\u002Fpre\u003E\u003Cp\u003EЛог обновлений пишется в отдельный файл \u003Ccode\u003E\u002Ftmp\u002Fxray-update.log\u003C\u002Fcode\u003E — удобно для отладки (\u003Ccode\u003Ecat \u002Ftmp\u002Fxray-update.log\u003C\u002Fcode\u003E), и не смешивается с основным логом Xray.\u003C\u002Fp\u003E\u003Cp\u003E\u003Cstrong\u003EWatchdog-строка\u003C\u002Fstrong\u003E — страховка от ситуации, когда procd сдался. \u003Ccode\u003Eprocd_set_param respawn 3600 5 5\u003C\u002Fcode\u003E перезапускает Xray максимум 5 раз за час, после чего сдаётся. Если Xray упал 6-й раз — procd молчит, а nftables-правила остаются: пакеты маркируются, уходят в TPROXY, но Xray их не принимает → чёрная дыра, интернет мёртв. Watchdog в cron проверяет каждую минуту: Xray жив? Если нет — \u003Cstrong\u003Eсначала\u003C\u002Fstrong\u003E удаляет таблицу nftables (восстанавливая прямой доступ), \u003Cstrong\u003Eпотом\u003C\u002Fstrong\u003E перезапускает сервис.\u003C\u002Fp\u003E\u003Ch4\u003EHotplug: восстановление после network restart\u003C\u002Fh4\u003E\u003Cp\u003EЕсть неочевидная проблема: \u003Ccode\u003E\u002Fetc\u002Finit.d\u002Fnetwork restart\u003C\u002Fcode\u003E сбрасывает policy routing (ip rule, ip route). При этом nftables-правила TPROXY остаются. Результат: пакеты маркируются fwmark 0x1, но маршрут для этой метки не существует — пакеты дропаются. Интернет мёртв, и без ручного \u003Ccode\u003Exray-tproxy restart\u003C\u002Fcode\u003E не починится.\u003C\u002Fp\u003E\u003Cp\u003EРешение — hotplug-скрипт, который автоматически восстанавливает Xray при поднятии WAN:\u003C\u002Fp\u003E\u003Cpre\u003E\u003Ccode class=\"bash\"\u003Ecat > \u002Fetc\u002Fhotplug.d\u002Fiface\u002F99-xray-fix << 'EOF'\n#!\u002Fbin\u002Fsh\n[ \"$ACTION\" = \"ifup\" ] && [ \"$INTERFACE\" = \"wan\" ] && {\n ip rule show | grep -q \"fwmark 0x1\" || \u002Fetc\u002Finit.d\u002Fxray-tproxy restart\n}\nEOF\nchmod +x \u002Fetc\u002Fhotplug.d\u002Fiface\u002F99-xray-fix\n\u003C\u002Fcode\u003E\u003Cdiv class=\"code-explainer\"\u003E\u003Ca href=\"https:\u002F\u002Fsourcecraft.dev\u002F\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"\u003E\u003Cimg style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\u002F\u003E\u003C\u002Fa\u003E\u003C\u002Fdiv\u003E\u003C\u002Fpre\u003E\u003Cp\u003EЛогика: когда WAN поднимается (\u003Ccode\u003Eifup\u003C\u002Fcode\u003E), скрипт проверяет, есть ли ip rule для fwmark. Если нет — policy routing потерялся, нужен рестарт xray-tproxy. Если правило на месте — ничего не делаем (обычный переподключение PPPoE не трогает ip rule).\u003C\u002Fp\u003E\u003Chr\u002F\u003E\u003Ch3\u003EМониторинг и отладка\u003C\u002Fh3\u003E\u003Ch4\u003EПроверка что всё работает\u003C\u002Fh4\u003E\u003Cpre\u003E\u003Ccode class=\"bash\"\u003E# Xray запущен?\nps | grep xray\n\n# TPROXY правила на месте?\nnft list table ip xray\n\n# Policy routing настроен?\nip rule show | grep fwmark\nip route show table 100\n\n# Тест: соединение идёт через прокси?\ncurl -x socks5:\u002F\u002F127.0.0.1:12345 https:\u002F\u002Fifconfig.me\n# Или с клиентского устройства:\n# curl https:\u002F\u002Fifconfig.me — должен показать IP удалённого сервера\n\u003C\u002Fcode\u003E\u003Cdiv class=\"code-explainer\"\u003E\u003Ca href=\"https:\u002F\u002Fsourcecraft.dev\u002F\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"\u003E\u003Cimg style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\u002F\u003E\u003C\u002Fa\u003E\u003C\u002Fdiv\u003E\u003C\u002Fpre\u003E\u003Ch4\u003EЛоги Xray\u003C\u002Fh4\u003E\u003Cp\u003EXray пишет лог в stdout\u002Fstderr, который procd перенаправляет в системный лог. Смотрим через logread:\u003C\u002Fp\u003E\u003Cpre\u003E\u003Ccode class=\"bash\"\u003Elogread -e xray\n\u003C\u002Fcode\u003E\u003Cdiv class=\"code-explainer\"\u003E\u003Ca href=\"https:\u002F\u002Fsourcecraft.dev\u002F\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"\u003E\u003Cimg style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\u002F\u003E\u003C\u002Fa\u003E\u003C\u002Fdiv\u003E\u003C\u002Fpre\u003E\u003Cp\u003EЛог обновлений подписки — отдельно:\u003C\u002Fp\u003E\u003Cpre\u003E\u003Ccode class=\"bash\"\u003Ecat \u002Ftmp\u002Fxray-update.log\n\u003C\u002Fcode\u003E\u003Cdiv class=\"code-explainer\"\u003E\u003Ca href=\"https:\u002F\u002Fsourcecraft.dev\u002F\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"\u003E\u003Cimg style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\u002F\u003E\u003C\u002Fa\u003E\u003C\u002Fdiv\u003E\u003C\u002Fpre\u003E\u003Cp\u003EТипичные сообщения:\u003C\u002Fp\u003E\u003Cpre\u003E\u003Ccode\u003E# Сервер жив\napp\u002Fobservatory: probe proxy-1 succeeded\n\n# Сервер мёртв\napp\u002Fobservatory: the outbound proxy-3 is dead\n\n# Sniffing извлёк домен\ntransport\u002Finternet\u002Ftcp: dialing TCP to tcp:example.com:443\n\n# Маршрут → direct\napp\u002Frouter: taking detour [direct] for [tcp:yandex.ru:443]\n\n# Маршрут → proxy\napp\u002Frouter: taking detour [proxy-auto] for [tcp:example.com:443]\n\u003C\u002Fcode\u003E\u003Cdiv class=\"code-explainer\"\u003E\u003Ca href=\"https:\u002F\u002Fsourcecraft.dev\u002F\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"\u003E\u003Cimg style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\u002F\u003E\u003C\u002Fa\u003E\u003C\u002Fdiv\u003E\u003C\u002Fpre\u003E\u003Ch4\u003EТипичные проблемы\u003C\u002Fh4\u003E\u003Cp\u003E\u003Cstrong\u003E«Нет интернета после включения TPROXY»\u003C\u002Fstrong\u003E — скорее всего Xray не запущен или упал. Проверьте \u003Ccode\u003Eps | grep xray\u003C\u002Fcode\u003E. Без Xray пакеты уходят в TPROXY и пропадают — никто их не обрабатывает.\u003C\u002Fp\u003E\u003Cp\u003E\u003Cstrong\u003E«Локальная сеть недоступна»\u003C\u002Fstrong\u003E — забыли bypass для приватных подсетей в nftables. Трафик к 192.168.1.1 уходит в Xray вместо локального стека.\u003C\u002Fp\u003E\u003Cp\u003E\u003Cstrong\u003E«Удалённые серверы не подключаются, петля»\u003C\u002Fstrong\u003E — IP удалённого сервера не добавлен в bypass. Трафик к серверу перехватывается → Xray пытается подключиться → перехватывается → бесконечный цикл.\u003C\u002Fp\u003E\u003Cp\u003E\u003Cstrong\u003E«Некоторые внутренние российские сервисы не работают»\u003C\u002Fstrong\u003E — проверьте, что geosite.dat — кастомная (с \u003Ccode\u003Eru-available-only-inside\u003C\u002Fcode\u003E), а не стандартная. Стандартная не содержит эту категорию.\u003C\u002Fp\u003E\u003Cp\u003E\u003Cstrong\u003E«Стриминговые сервисы нестабильны»\u003C\u002Fstrong\u003E — возможно, браузер использует QUIC (UDP 443), который не проходит через TPROXY и идёт напрямую. Проверьте \u003Ccode\u003Enft list table ip xray | grep \"udp dport 443\"\u003C\u002Fcode\u003E.\u003C\u002Fp\u003E\u003Chr\u002F\u003E\u003Ch3\u003EПотребление ресурсов\u003C\u002Fh3\u003E\u003Cp\u003EНа моём Cudy TR3000 (2× Cortex-A53, 496 МБ RAM):\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E\u003Cp\u003E\u003Cstrong\u003ECPU:\u003C\u002Fstrong\u003E ~0.08 load average в простое. Xray нагружает CPU только при активном трафике, и даже при стриминге 4K-видео нагрузка не превышает 30–40% одного ядра (благодаря XTLS-Vision — нет двойного шифрования).\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E\u003Cstrong\u003ERAM:\u003C\u002Fstrong\u003E ~108 МБ используется. Xray Go runtime резервирует ~1.3 ГБ виртуальной памяти, но физически потребляет ~100 МБ.\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E\u003Cstrong\u003Etmpfs:\u003C\u002Fstrong\u003E ~165 МБ из 242 МБ (geoip.dat ~20 МБ, geosite.dat ~65 МБ — основные потребители).\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E\u003Cstrong\u003EFlash overlay:\u003C\u002Fstrong\u003E 26 МБ из 44 МБ.\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E\u003Cstrong\u003EUptime:\u003C\u002Fstrong\u003E стабильная работа неделями без перезагрузок.\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Chr\u002F\u003E\u003Ch3\u003EИзвестные проблемы и пути решения\u003C\u002Fh3\u003E\u003Cp\u003EНе буду притворяться, что система идеальна. Вот оставшиеся несовершенства:\u003C\u002Fp\u003E\u003Ch4\u003E1. Observatory не работает с Reality (IP-based SNI)\u003C\u002Fh4\u003E\u003Cp\u003EСерверы, где SNI = IP-адрес, определяются как dead. Балансировка \u003Ccode\u003EleastPing\u003C\u002Fcode\u003E фактически не работает для них.\u003C\u002Fp\u003E\u003Cp\u003E\u003Cstrong\u003EРешение:\u003C\u002Fstrong\u003E использовать серверы с доменным SNI. Или смириться и использовать один надёжный сервер с доменным SNI как «якорь» балансировки.\u003C\u002Fp\u003E\u003Ch4\u003E2. Geodata в tmpfs\u003C\u002Fh4\u003E\u003Cp\u003E~85 МБ geodata загружаются в tmpfs при каждом запуске. Если роутер перезагрузится без интернета (WAN не поднялся) — geodata не скачаются, Xray не запустится.\u003C\u002Fp\u003E\u003Cp\u003E\u003Cstrong\u003EРешение:\u003C\u002Fstrong\u003E хранить копию geodata на overlay (Flash), обновлять периодически через cron, использовать как fallback если скачать не удалось:\u003C\u002Fp\u003E\u003Cpre\u003E\u003Ccode class=\"bash\"\u003E# В download_assets()\nif ! curl ... -o \"$ASSET_DIR\u002Fgeoip.dat\" ...; then\n cp \u002Fetc\u002Fxray\u002Fgeoip.dat.bak \"$ASSET_DIR\u002Fgeoip.dat\" 2>\u002Fdev\u002Fnull\nfi\n\u003C\u002Fcode\u003E\u003Cdiv class=\"code-explainer\"\u003E\u003Ca href=\"https:\u002F\u002Fsourcecraft.dev\u002F\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"\u003E\u003Cimg style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\u002F\u003E\u003C\u002Fa\u003E\u003C\u002Fdiv\u003E\u003C\u002Fpre\u003E\u003Ch4\u003EЧто уже починено\u003C\u002Fh4\u003E\u003Cp\u003EСистема прошла через несколько итераций. Вот проблемы, которые были найдены и решены:\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E\u003Cp\u003E\u003Cstrong\u003EDNS-утечка (UDP)\u003C\u002Fstrong\u003E — самый коварный баг. dnsmasq форвардил DNS на 1.1.1.1 по UDP, а TPROXY перехватывает только TCP. Plaintext UDP-запросы уходили напрямую в незашифрованном виде — утечка DNS. Промежуточно решено через \u003Ccode\u003Ehttps-dns-proxy\u003C\u002Fcode\u003E, финально — заменой на AdGuard Home с DoH upstream. Теперь DNS идёт только через HTTPS, который проксируется TPROXY.\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E\u003Cstrong\u003EIPv6-утечка\u003C\u002Fstrong\u003E — ULA-префикс был активен, wan6 поднят, dnsmasq возвращал AAAA-записи. Современные устройства предпочитают IPv6, и весь этот трафик шёл мимо прокси-сервера. IPv6 даёт больше нюансов и требует отдельной проверки на утечки. В текущей схеме проще отключить IPv6 полностью, чем добавлять отдельные правила перехвата для него:\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cpre\u003E\u003Ccode class=\"bash\"\u003Euci set network.globals.ula_prefix=''\nuci set network.wan6.auto='0'\nuci set dhcp.@dnsmasq[0].filter_aaaa='1'\nuci commit network && uci commit dhcp\n\u002Fetc\u002Finit.d\u002Fnetwork restart && \u002Fetc\u002Finit.d\u002Fdnsmasq restart\n\u003C\u002Fcode\u003E\u003Cdiv class=\"code-explainer\"\u003E\u003Ca href=\"https:\u002F\u002Fsourcecraft.dev\u002F\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"\u003E\u003Cimg style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\u002F\u003E\u003C\u002Fa\u003E\u003C\u002Fdiv\u003E\u003C\u002Fpre\u003E\u003Cul\u003E\u003Cli\u003E\u003Cp\u003E\u003Cstrong\u003EПотеря ip rule после network restart\u003C\u002Fstrong\u003E — \u003Ccode\u003Enetwork restart\u003C\u002Fcode\u003E сбрасывает policy routing, но nftables остаётся → чёрная дыра. Решено hotplug-скриптом \u003Ccode\u003E\u002Fetc\u002Fhotplug.d\u002Fiface\u002F99-xray-fix\u003C\u002Fcode\u003E, который восстанавливает Xray при поднятии WAN.\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E\u003Cstrong\u003Eprocd сдаётся после 5 падений\u003C\u002Fstrong\u003E — \u003Ccode\u003Erespawn 3600 5 5\u003C\u002Fcode\u003E перестаёт перезапускать Xray, nftables остаётся, интернет мёртв. Решено watchdog в cron, который каждую минуту проверяет \u003Ccode\u003Epidof xray\u003C\u002Fcode\u003E и при необходимости чистит nftables + перезапускает.\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E\u003Cstrong\u003EНет автоперезапуска\u003C\u002Fstrong\u003E — Xray запускался через \u003Ccode\u003E&\u003C\u002Fcode\u003E (фоновый процесс) без мониторинга. Упал — лежит. Решено переходом на procd с \u003Ccode\u003Erespawn\u003C\u002Fcode\u003E.\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E\u003Cstrong\u003EДубли ip rule\u003C\u002Fstrong\u003E — при каждом рестарте добавлялось новое правило, старые не удалялись. За 3 дня — 14 дублей. Решено циклом \u003Ccode\u003Ewhile ip rule del ... ; do :; done\u003C\u002Fcode\u003E перед добавлением.\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E\u003Cstrong\u003EХардкод IP серверов в bypass\u003C\u002Fstrong\u003E — при обновлении подписки нужно было вручную обновлять IP в nftables. Решено автоизвлечением IP из config.json через \u003Ccode\u003Eextract_server_ips()\u003C\u002Fcode\u003E.\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E\u003Cstrong\u003EРасхождение nftables-конфигов\u003C\u002Fstrong\u003E — файл \u003Ccode\u003Etproxy.nft\u003C\u002Fcode\u003E содержал правильные правила, но init-скрипт добавлял правила вручную с другой логикой. Решено переходом на единый nft-файл, генерируемый скриптом.\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Ch4\u003EЗаметка о безопасности: User-Agent скрипта обновления\u003C\u002Fh4\u003E\u003Cp\u003EВ апреле 2026 года вышло исследование, показавшее уязвимость в ряде мобильных клиентов для работы с прокси-протоколами: открытый SOCKS5 без авторизации на localhost позволяет сторонним модулям в других приложениях обнаружить выходной IP, а в отдельных клиентах — получить доступ к конфигурациям через Xray API.\u003C\u002Fp\u003E\u003Cp\u003EДля роутерного решения эта уязвимость \u003Cstrong\u003Eне актуальна\u003C\u002Fstrong\u003E: на роутере нет сторонних приложений, нет SOCKS5 на localhost для сканирования, нет других приложений вообще. Но есть нюанс: некоторые поставщики подписок начали фильтровать запросы с User-Agent уязвимых клиентов. Если ваш скрипт обновления использует User-Agent конкретного мобильного клиента — смените его на нейтральный (\u003Ccode\u003EXrayRouter\u002F1.0\u003C\u002Fcode\u003E, \u003Ccode\u003Ecurl\u002F8.0\u003C\u002Fcode\u003E и т.д.), чтобы не попасть под фильтр.\u003C\u002Fp\u003E\u003Chr\u002F\u003E\u003Ch3\u003EИтог: что получилось\u003C\u002Fh3\u003E\u003Cp\u003EВсе устройства в домашней сети — от ноутбука до телевизора — автоматически получают прозрачную маршрутизацию трафика через защищённый канал. Российские сайты работают напрямую, без дополнительной задержки. DNS-запросы защищены через DoH и фильтруются от рекламы через AdGuard Home. IPv6 отключён для исключения утечек трафика. Список серверов обновляется из двух подписок каждые 30 минут. Watchdog и hotplug-хук гарантируют, что система восстановится после любого сбоя.\u003C\u002Fp\u003E\u003Cp\u003EНа всё ушло несколько вечеров: прошивка, конфиг Xray и nftables, скрипт автообновления, затем итерации по закрытию утечек DNS и IPv6, добавление AdGuard Home, hotplug и watchdog. Каждая итерация — реакция на реальную проблему, обнаруженную в продакшене.\u003C\u002Fp\u003E\u003Cp\u003EСамое сложное во всей настройке — не конфиги (их можно скопировать), а \u003Cstrong\u003Eпонимание, почему каждый элемент нужен\u003C\u002Fstrong\u003E. Без этого любая нештатная ситуация (новый сервер, смена провайдера связи, падение Xray) превратится в чёрную коробку. Надеюсь, эта статья объяснила не только «как», но и «почему».\u003C\u002Fp\u003E\u003Cp\u003EЕсли что-то не заработало или есть вопросы по конкретным нюансам — спрашивайте в комментариях. Особенно если у вас другое железо или специфический профиль сети.\u003C\u002Fp\u003E\u003Cp\u003EЧасть 2: \u003Ca href=\"https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F1028954\u002F\" rel=\"noopener noreferrer nofollow\"\u003Ehttps:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F1028954\u002F\u003C\u002Fa\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E","tags":[{"titleHtml":"OpenWrt"},{"titleHtml":"VLESS"},{"titleHtml":"Reality"},{"titleHtml":"TPROXY"},{"titleHtml":"Xray"},{"titleHtml":"nftables"},{"titleHtml":"VPN"},{"titleHtml":"роутер"},{"titleHtml":"split routing"},{"titleHtml":"GeoIP"}],"metadata":{"stylesUrls":[],"scriptUrls":[],"shareImageUrl":"https:\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fupload_files\u002F155\u002F3be\u002F2f1\u002F1553be2f1274313443b8c7ee625bd90c.png","shareImageWidth":1200,"shareImageHeight":630,"vkShareImageUrl":"https:\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fupload_files\u002F155\u002F3be\u002F2f1\u002F1553be2f1274313443b8c7ee625bd90c.png","schemaJsonLd":"{\"@context\":\"http:\\\u002F\\\u002Fschema.org\",\"@type\":\"Article\",\"mainEntityOfPage\":{\"@type\":\"WebPage\",\"@id\":\"https:\\\u002F\\\u002Fhabr.com\\\u002Fru\\\u002Farticles\\\u002F1020866\\\u002F\"},\"headline\":\"Прозрачный прокси-шлюз на роутере: VLESS + Reality + TPROXY на OpenWrt от А до Я\",\"datePublished\":\"2026-04-10T12:00:24+03:00\",\"dateModified\":\"2026-05-08T13:42:30+03:00\",\"author\":{\"@type\":\"Person\",\"name\":\"Шубин Данила\"},\"publisher\":{\"@type\":\"Organization\",\"name\":\"Habr\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\u002F\\\u002Fhabrastorage.org\\\u002Fwebt\\\u002Fa_\\\u002Flk\\\u002F9m\\\u002Fa_lk9mjkccjox-zccjrpfolmkmq.png\"}},\"description\":\"Дисклеймер. Материал представляет собой научно-техническое описание настройки защищённого канала связи с собственной удалённой инфраструктурой на базе OpenWrt. С...\",\"url\":\"https:\\\u002F\\\u002Fhabr.com\\\u002Fru\\\u002Farticles\\\u002F1020866\\\u002F#post-content-body\",\"about\":[\"h_network_technologies\",\"h_linux\",\"h_infosecurity\",\"h_DIY\",\"h_it-infrastructure\",\"f_develop\",\"f_admin\",\"f_popsci\"],\"image\":[\"https:\\\u002F\\\u002Fhabr.com\\\u002Fshare\\\u002Fpublication\\\u002F1020866\\\u002F8933ead5e99084c236ce8d4cd937b1ca\\\u002F\",\"https:\\\u002F\\\u002Fhabrastorage.org\\\u002Fgetpro\\\u002Fhabr\\\u002Fupload_files\\\u002F155\\\u002F3be\\\u002F2f1\\\u002F1553be2f1274313443b8c7ee625bd90c.png\"]}","metaDescription":"Дисклеймер. Материал представляет собой научно-техническое описание настройки защищённого канала связи с собственной удалённой инфраструктурой на базе OpenWrt. Статья освещает технические аспекты...","mainImageUrl":null,"amp":false,"customTrackerLinks":[]},"polls":[],"commentsEnabled":{"status":true,"reason":null},"rulesRemindEnabled":false,"votesEnabled":true,"status":"published","plannedPublishTime":null,"checked":null,"hasPinnedComments":false,"format":"tutorial","banner":null,"multiwidget":null,"multiwidgetUuid":null,"readingTime":29,"complexity":"high","isEditorial":false,"flowNew":{"id":"8","title":"Системное администрирование","alias":"admin"},"linkedPostTranslation":null,"hasRegionalRestrictions":false}},"articlesIds":{},"isLoading":false,"pagesCount":{},"route":{},"reasonsList":null,"postReasonsList":null,"view":"cards","oldEditorForm":null,"lastVisitedRoute":{},"ssrCommentsArticleIds":[],"viewedPosts":[],"myFeedFilter":{"complexity":"all","score":"all","types":["articles","posts","news"]},"myFeedIsApplyFilters":false,"myFeedIsForce":false},"me":{"user":null,"uuid":null,"ppgDemanded":false,"karmaResetInfo":{"canReincarnate":null,"wasReincarnated":null,"currentScore":null},"notes":null,"userUpdates":{"feeds":{"newCount":null},"conversationUnreadCount":0,"trackerUnreadCount":0},"features":null},"flowsMenu":{"flowsMenuData":{"whatsNew":{"newAuthors":{"order":7,"items":[{"alias":"sogonov","fullname":"sogonov","avatarUrl":null},{"alias":"forc3meat","fullname":"Tony","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F013\u002Fde9\u002F28e\u002F013de928e7abd48b8e20b157652f4b9e.png"},{"alias":"Vlad441","fullname":"Vlad441","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F5cc\u002F6a7\u002Ff11\u002F5cc6a7f111ccbb1cbed5b98a9a99e028.jpeg"},{"alias":"c3ph3us","fullname":"Сергей","avatarUrl":null},{"alias":"russianmagellan","fullname":"Агаев Мурад","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fa88\u002Fd0e\u002F87d\u002Fa88d0e87d9e0023b2263d0b4d80621da.png"},{"alias":"vibecodingai","fullname":"Виктор Сарин","avatarUrl":null},{"alias":"johnick1234","fullname":"johnick1234","avatarUrl":null},{"alias":"KarimAbushaev","fullname":"Карим Абушаев","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F83e\u002F35a\u002Fd60\u002F83e35ad6005a066d358036e335acbca7.jpeg"}]},"updates":{"order":8,"items":[{"title":"Список изменений на сайте","url":"https:\u002F\u002Fhabr.com\u002Fru\u002Fdocs\u002Fchangelog\u002F2025\u002F","imageUrl":null},{"title":"Кодекс авторов Хабра","url":"https:\u002F\u002Fhabr.com\u002Fru\u002Fdocs\u002Fauthors\u002Fcodex\u002F","imageUrl":null},{"title":"Устройство сайта","url":"https:\u002F\u002Fhabr.com\u002Fru\u002Fdocs\u002Fhelp\u002Frules\u002F","imageUrl":null},{"title":"Корпоративные блоги","url":"https:\u002F\u002Fhabr.com\u002Fru\u002Fdocs\u002Fcompanies\u002Fcorpblogs\u002F","imageUrl":null}]},"socialNetwork":{"order":1},"thematicChannels":{"order":3},"ourActivities":{"order":4},"partnersActivities":{"order":5},"banner":{"order":6},"ourBlogs":{"order":2}},"flows":{"backend":{"technologies":{"order":1,"items":[{"alias":"java","title":"Java","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F4c9\u002F821\u002Fd2a\u002F4c9821d2ad5a9844eb6d0f8c77991772.png"},{"alias":"rust","title":"Rust","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F6e4\u002Ffe1\u002Fa69\u002F6e4fe1a69ca6d3f307eac6ec5025587d.png"},{"alias":"go","title":"Go","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fa10\u002Fc5c\u002F626\u002Fa10c5c62685d9a7d2964993daf6958c3.png"},{"alias":"cpp","title":"C++","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F89a\u002Fc44\u002F09e\u002F89ac4409ea406d835a82383fa53fcda7.png"},{"alias":"python","title":"Python","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F1c6\u002F724\u002F437\u002F1c6724437b83f3d71abd08e5c2877a7a.png"},{"alias":"postgresql","title":"PostgreSQL","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F391\u002F633\u002F8e2\u002F3916338e24104572809b971807686a8f.png"},{"alias":"kotlin","title":"Kotlin","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F041\u002F637\u002F60f\u002F04163760f28104a45ad9ca39cb25f194.png"},{"alias":"net","title":".NET","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F050\u002F99b\u002Fe5b\u002F05099be5bd60ad6dffaba80928f832f2.png"}]},"topics":{"order":2,"items":[{"alias":"artificial_intelligence","title":"Искусственный интеллект","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Ff01\u002F3a4\u002F009\u002Ff013a40094ae05299b2b05ef05e7f981.png"},{"alias":"career","title":"Карьера в IT-индустрии","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fcab\u002Ff82\u002F067\u002Fcabf82067c7be08c90a5903f860c9abf.png"},{"alias":"open_source","title":"Open source","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fdc9\u002Fdbe\u002Fe1d\u002Fdc9dbee1d24188b925e86946bafb15c7.png"},{"alias":"infosecurity","title":"Информационная безопасность","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F135\u002F2db\u002F187\u002F1352db18765addaa6e0b2ac013d386d8.png"},{"alias":"webdev","title":"Веб-разработка","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F2a2\u002Fac7\u002F3dd\u002F2a2ac73dd5cddc6e05b47a3d502b4c0d.png"},{"alias":"business-laws","title":"Законодательство в IT","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F7e3\u002Ffbd\u002F404\u002F7e3fbd40404e7a51fafad53018d606c8.png"},{"alias":"algorithms","title":"Алгоритмы","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F61e\u002Fbf9\u002F7b0\u002F61ebf97b08494e41ad7b7cad1e0aacc7.png"},{"alias":"hi","title":"Высоконагруженные системы","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fd4c\u002F97c\u002Fde3\u002Fd4c97cde31f59169b6159e7fc7020503.png"}]},"topPosts":{"order":3,"items":[{"id":"1026258","isCorporative":true,"lang":"ru","titleHtml":"Bad Apple через CSS: как заставить браузер страдать без единой строчки JavaScript","postType":"article","hubs":[{"id":"17357","alias":"timeweb","type":"corporative","title":"Блог компании Timeweb Cloud","titleHtml":"Блог компании Timeweb Cloud","isProfiled":false},{"id":"84","alias":"crazydev","type":"collective","title":"Ненормальное программирование","titleHtml":"Ненормальное программирование","isProfiled":true},{"id":"559","alias":"cpp","type":"collective","title":"C++","titleHtml":"C++","isProfiled":true},{"id":"359","alias":"programming","type":"collective","title":"Программирование","titleHtml":"Программирование","isProfiled":true},{"id":"91","alias":"webdev","type":"collective","title":"Веб-разработка","titleHtml":"Веб-разработка","isProfiled":true}],"author":{"alias":"j4niwzis","fullname":"j4niwzis","avatarUrl":null}},{"id":"1030626","isCorporative":false,"lang":"ru","titleHtml":"Структуры данных на практике. Глава 15: Графы и их обход с эффективным использованием кэша","postType":"article","hubs":[{"id":"19737","alias":"controllers","type":"collective","title":"Программирование микроконтроллеров","titleHtml":"Программирование микроконтроллеров","isProfiled":true},{"id":"17717","alias":"c","type":"collective","title":"C","titleHtml":"C","isProfiled":true},{"id":"17716","alias":"debug","type":"collective","title":"Отладка","titleHtml":"Отладка","isProfiled":true},{"id":"359","alias":"programming","type":"collective","title":"Программирование","titleHtml":"Программирование","isProfiled":true},{"id":"530","alias":"client_side_optimization","type":"collective","title":"Клиентская оптимизация","titleHtml":"Клиентская оптимизация","isProfiled":true}],"author":{"alias":"PatientZero","fullname":"PatientZero","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F8de\u002F9c5\u002F34a\u002F8de9c534a18a6cb8693270a2b528d4c0.png"}},{"id":"1031438","isCorporative":true,"lang":"ru","titleHtml":"Почему ваш Go‑сервис ломается под 1000 RPS и как найти узкое место за полчаса","postType":"article","hubs":[{"id":"21052","alias":"otus","type":"corporative","title":"Блог компании OTUS","titleHtml":"Блог компании OTUS","isProfiled":false},{"id":"17748","alias":"go","type":"collective","title":"Go","titleHtml":"Go","isProfiled":true},{"id":"359","alias":"programming","type":"collective","title":"Программирование","titleHtml":"Программирование","isProfiled":true}],"author":{"alias":"badcasedaily1","fullname":"artem","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F206\u002F581\u002Fb2f\u002F206581b2ffb082e2150bed36b72e71d9.jpeg"}},{"id":"979862","isCorporative":false,"lang":"ru","titleHtml":"AI Review не делает код лучше. И вот почему","postType":"article","hubs":[{"id":"21922","alias":"artificial_intelligence","type":"collective","title":"Искусственный интеллект","titleHtml":"Искусственный интеллект","isProfiled":false},{"id":"340","alias":"python","type":"collective","title":"Python","titleHtml":"Python","isProfiled":true},{"id":"144","alias":"open_source","type":"collective","title":"Open source","titleHtml":"Open source","isProfiled":true},{"id":"20788","alias":"devops","type":"collective","title":"DevOps","titleHtml":"DevOps","isProfiled":true},{"id":"210","alias":"it_testing","type":"collective","title":"Тестирование IT-систем","titleHtml":"Тестирование IT-систем","isProfiled":true}],"author":{"alias":"sound_right","fullname":"Никита Филонов","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Face\u002F83b\u002Fca8\u002Face83bca837fb4ab28ae8b817b49c511.jpg"}}],"period":"day"},"topAuthors":{"order":4,"items":[{"alias":"gtosss","fullname":"Гончаров Тимофей","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fab0\u002Ffac\u002F22c\u002Fab0fac22ce6264f37ad433d6460714cb.png"},{"alias":"samako","fullname":"samako","avatarUrl":null},{"alias":"YuriPanchul","fullname":"Юрий Панчул \u002F Yuri Panchul","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F0a9\u002F21b\u002F7c1\u002F0a921b7c13a624616c9da17b980b69a9.jpg"},{"alias":"Andrey2008","fullname":"Андрей Карпов","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F71b\u002F4ac\u002Ff13\u002F71b4acf131d3d675b999b4a47f573b0a.jpg"},{"alias":"morett1m","fullname":"Morettom","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F108\u002Fb91\u002F44f\u002F108b9144fdc3d94e80b58671cc96a4e3.jpeg"},{"alias":"enamored_poc","fullname":"Коммунист Этичный Хакер","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F77e\u002F43e\u002F267\u002F77e43e26750cc732462cfd657afc94dd.jpeg"},{"alias":"interpres","fullname":"Евгений","avatarUrl":null},{"alias":"vibecodingai","fullname":"Виктор Сарин","avatarUrl":null}]},"topCompanies":{"order":5,"items":[{"alias":"otus","title":"OTUS","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002Fa65\u002F525\u002F4fe\u002Fa655254feebb0b25a027b5e276ea6489.png"},{"alias":"beget","title":"Beget","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F077\u002F521\u002Fe04\u002F077521e04dc7bedc96dc729529e31ea8.png"},{"alias":"yandex","title":"Яндекс","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002Fb02\u002Fd9b\u002F1d4\u002Fb02d9b1d4a6e64ff069e2ab32fdedae2.png"},{"alias":"pvs-studio","title":"PVS-Studio","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F246\u002F679\u002F3f1\u002F2466793f1386f528a9feae21524891ba.png"},{"alias":"bitrix","title":"Битрикс24","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002Ff86\u002Fe5b\u002F908\u002Ff86e5b908b36c321d5ab60173473f00c.png"},{"alias":"selectel","title":"Selectel","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F4b4\u002F652\u002F7f5\u002F4b46527f577e69b1f32a84700b2fed33.png"},{"alias":"vk","title":"VK","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F0bd\u002F57b\u002F803\u002F0bd57b803e087ee52c55f8ec5b6d4ffc.png"},{"alias":"avito","title":"AvitoTech","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F7ba\u002F74f\u002Fb37\u002F7ba74fb3764caa1fb6865aaa6b6aa4bf.png"}]},"banner":{"order":6}},"frontend":{"technologies":{"order":1,"items":[{"alias":"javascript","title":"JavaScript","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F2b3\u002F99b\u002F964\u002F2b399b964d456f3ad1bfddc0346b60d4.png"},{"alias":"css","title":"CSS","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F20a\u002Ffaf\u002Fe86\u002F20afafe861e9814e46e8a20c8527bd80.png"},{"alias":"html5","title":"HTML","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F804\u002Fca1\u002Fe33\u002F804ca1e33abfd14dcb27b72bbc90e3a1.png"},{"alias":"typescript","title":"TypeScript","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fcab\u002F7bb\u002F7b8\u002Fcab7bb7b8a279ee584926ced8e87cb15.png"},{"alias":"reactjs","title":"ReactJS","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fe77\u002F27d\u002F25b\u002Fe7727d25b433a67f0e69acc74d2ba785.png"},{"alias":"haskell","title":"Haskell","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F138\u002Fce5\u002F098\u002F138ce5098d4a2e04ee975ef25a911ddc.png"},{"alias":"scala","title":"Scala","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F1c4\u002F6dd\u002Fda7\u002F1c46ddda78b79073229c13dba60ebdd9.png"},{"alias":"net","title":".NET","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F050\u002F99b\u002Fe5b\u002F05099be5bd60ad6dffaba80928f832f2.png"}]},"topics":{"order":2,"items":[{"alias":"webdev","title":"Веб-разработка","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F2a2\u002Fac7\u002F3dd\u002F2a2ac73dd5cddc6e05b47a3d502b4c0d.png"},{"alias":"artificial_intelligence","title":"Искусственный интеллект","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Ff01\u002F3a4\u002F009\u002Ff013a40094ae05299b2b05ef05e7f981.png"},{"alias":"web_design","title":"Веб-дизайн","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fbdf\u002Fda7\u002F7f5\u002Fbdfda77f5ca4e7ef826d77683628b313.png"},{"alias":"crazydev","title":"Ненормальное программирование","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F32f\u002F8aa\u002Fa67\u002F32f8aaa676ea4746ee4cc3acaaac6d9a.png"},{"alias":"browsers","title":"Браузеры","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fb13\u002F8a7\u002F176\u002Fb138a7176c8cbb20de86d55b43d2ce8f.png"},{"alias":"ui","title":"Интерфейсы","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F21d\u002F1b4\u002Ffef\u002F21d1b4fefab1e346e0e048651950e430.png"},{"alias":"career","title":"Карьера в IT-индустрии","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fcab\u002Ff82\u002F067\u002Fcabf82067c7be08c90a5903f860c9abf.png"},{"alias":"ecommerce_development","title":"Разработка под e-commerce","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F2a1\u002F7c5\u002Fce5\u002F2a17c5ce59f4e6449c42b34d76235c17.png"}]},"topPosts":{"order":3,"items":[{"id":"1033088","isCorporative":false,"lang":"ru","titleHtml":"Что такое Реактивное Программирование","postType":"article","hubs":[{"id":"23108","alias":"smol","type":"collective","title":"$mol","titleHtml":"$mol","isProfiled":true},{"id":"91","alias":"webdev","type":"collective","title":"Веб-разработка","titleHtml":"Веб-разработка","isProfiled":true},{"id":"359","alias":"programming","type":"collective","title":"Программирование","titleHtml":"Программирование","isProfiled":true}],"author":{"alias":"nin-jin","fullname":"Дмитрий Карловский","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F20a\u002F0ad\u002Fd8c\u002F20a0add8ce3ddddec0e521f86e694f40.jpg"}},{"id":"1033686","isCorporative":false,"lang":"ru","titleHtml":"Вопросы на собеседование: Рефакторинг TypeScript","postType":"article","hubs":[{"id":"21370","alias":"typescript","type":"collective","title":"TypeScript","titleHtml":"TypeScript","isProfiled":true},{"id":"357","alias":"javascript","type":"collective","title":"JavaScript","titleHtml":"JavaScript","isProfiled":true},{"id":"19327","alias":"reactjs","type":"collective","title":"ReactJS","titleHtml":"ReactJS","isProfiled":true},{"id":"21296","alias":"vuejs","type":"collective","title":"VueJS","titleHtml":"VueJS","isProfiled":true}],"author":{"alias":"Pnym","fullname":"Басов Алексей","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F4a9\u002Fbe6\u002F176\u002F4a9be6176d0d32517e241dfda191b474.jpeg"}}],"period":"day"},"topAuthors":{"order":4,"items":[{"alias":"melnik909","fullname":"Стас Мельников","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F420\u002Fe9b\u002Fe8d\u002F420e9be8df5187d293139c622af2dd00.jpg"},{"alias":"JuxaDan","fullname":"Данил","avatarUrl":null},{"alias":"divideme","fullname":"Иван Курчин","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F509\u002F3d8\u002F673\u002F5093d8673c4386feb2b27f4a2793c0c5.png"},{"alias":"Bright_Translate","fullname":"Дмитрий Брайт","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Ff9c\u002Fff9\u002F7d9\u002Ff9cff97d9c0677af28dab451897f88e4.jpg"},{"alias":"varvaratikh","fullname":"Варвара","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fc8c\u002Fd25\u002Fec1\u002Fc8cd25ec14c31c7fb0c5a90697f5c1e0.jpeg"},{"alias":"Sedm1","fullname":"Николай","avatarUrl":null},{"alias":"Flampanzer","fullname":"Антон","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F906\u002Fb47\u002Fb5c\u002F906b47b5c8d88d34966303e77349d82f.jpeg"},{"alias":"aio350","fullname":"Igor Agapov","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F4d3\u002F879\u002Fa5a\u002F4d3879a5a72249d5267d1f152ac59d40.jpg"}]},"topCompanies":{"order":5,"items":[{"alias":"ruvds","title":"RUVDS.com","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F608\u002Ff02\u002F206\u002F608f0220675e20da793aa1974a1a0a2e.png"},{"alias":"selectel","title":"Selectel","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F4b4\u002F652\u002F7f5\u002F4b46527f577e69b1f32a84700b2fed33.png"},{"alias":"yandex","title":"Яндекс","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002Fb02\u002Fd9b\u002F1d4\u002Fb02d9b1d4a6e64ff069e2ab32fdedae2.png"},{"alias":"yandex_cloud_and_infra","title":"Yandex Cloud & Yandex Infrastructure","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002Fa68\u002F70f\u002Fc0e\u002Fa6870fc0ee3c00173a97dc6abdb8cb9b.png"},{"alias":"sberbank","title":"Сбер","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F9db\u002F3c1\u002Fec0\u002F9db3c1ec02265b8bcbfdfb0d23d8b9f2.jpg"},{"alias":"psb","title":"ПСБ","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002Fddb\u002F3cc\u002F5fb\u002Fddb3cc5fbfb40eda2a0cca11dc70af71.png"},{"alias":"vk","title":"VK","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F0bd\u002F57b\u002F803\u002F0bd57b803e087ee52c55f8ec5b6d4ffc.png"},{"alias":"alfastrah","title":"АльфаСтрахование","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F536\u002Fcb4\u002Fb83\u002F536cb4b838bb7464f3f6403b7184e44a.png"}]},"banner":{"order":6}},"design":{"technologies":{"order":1,"items":[]},"topics":{"order":2,"items":[{"alias":"design","title":"Дизайн","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fgeektimes\u002Fhub\u002F579\u002Fffa\u002Febd\u002F579ffaebd7870d2c87f88ae2d35694e3.png"},{"alias":"ui","title":"Интерфейсы","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F21d\u002F1b4\u002Ffef\u002F21d1b4fefab1e346e0e048651950e430.png"},{"alias":"usability","title":"Usability","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F03c\u002F8f4\u002F410\u002F03c8f441004dbc3c3b7560e34b6e5108.png"},{"alias":"apps_design","title":"Дизайн мобильных приложений","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fc04\u002F4de\u002Fa64\u002Fc044dea649d5fac76a46799cc12766b7.png"},{"alias":"web_design","title":"Веб-дизайн","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fbdf\u002Fda7\u002F7f5\u002Fbdfda77f5ca4e7ef826d77683628b313.png"},{"alias":"mobile_dev","title":"Разработка мобильных приложений","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F94d\u002Fb18\u002Fbf9\u002F94db18bf9b8a7fc678b5be14f0f0e296.png"},{"alias":"graph_design","title":"Графический дизайн","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fdc3\u002F25e\u002F9fe\u002Fdc325e9fefa798d290d29eb06820bb80.png"},{"alias":"artificial_intelligence","title":"Искусственный интеллект","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Ff01\u002F3a4\u002F009\u002Ff013a40094ae05299b2b05ef05e7f981.png"}]},"topPosts":{"order":3,"items":[{"id":"1033694","isCorporative":false,"lang":"ru","titleHtml":"Как чтение книг с сыном превратилось в идею стартапа Flummio. Часть 1","postType":"article","hubs":[{"id":"21934","alias":"tablets","type":"collective","title":"Планшеты","titleHtml":"Планшеты","isProfiled":false}],"author":{"alias":"sasha_solntsev101","fullname":"Саша Солнцев","avatarUrl":null}},{"id":"1033724","isCorporative":false,"lang":"ru","titleHtml":"NF интерфейсы — новый слой поверх классического UI","postType":"article","hubs":[{"id":"9188","alias":"ui","type":"collective","title":"Интерфейсы","titleHtml":"Интерфейсы","isProfiled":true},{"id":"21922","alias":"artificial_intelligence","type":"collective","title":"Искусственный интеллект","titleHtml":"Искусственный интеллект","isProfiled":false}],"author":{"alias":"Googlonator","fullname":"Denis Bespalov","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F4aa\u002F6ea\u002F495\u002F4aa6ea4954cceb31cdeb0428d02cdb77.png"}}],"period":"day"},"topAuthors":{"order":4,"items":[{"alias":"TatianaLeskova","fullname":"Татьяна Лескова","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fa82\u002Fc46\u002Fee1\u002Fa82c46ee1632771eaa9545a36e987a5b.png"},{"alias":"bovrst","fullname":"Ольга Петроченко","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fdcf\u002Fb3b\u002Fcd5\u002Fdcfb3bcd5cef7b40a62b7bd097450781.png"},{"alias":"Elikov","fullname":"Евгений Еликов","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Ff7f\u002F249\u002Fbf2\u002Ff7f249bf2ed55a6f46eb2ebe531adc03.png"},{"alias":"FradkovV","fullname":"Владимир Фрадков","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fc57\u002F20e\u002Ffd1\u002Fc5720efd1cd0118e376e93ac22d40cce.jpg"},{"alias":"VitTurov","fullname":"Виталий Туров","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Ff72\u002F320\u002F932\u002Ff72320932fde4b0942b36a0a9d8b1a9f.jpg"},{"alias":"Tanyen","fullname":"Илья Макаренко","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F2e3\u002Fa2b\u002Fa29\u002F2e3a2ba29b63f0f9ff3b7ebcac451ad1.png"},{"alias":"Burlakin-Ka","fullname":"Екатерина Бурлакина","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F118\u002F6f1\u002Fb39\u002F1186f1b398f0af896c9b48c2f93cc909.png"},{"alias":"SKaban511","fullname":"Станислава Кабанова","avatarUrl":null}]},"topCompanies":{"order":5,"items":[{"alias":"alfa","title":"Альфа-Банк","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F623\u002F4a7\u002F52a\u002F6234a752af61e1eb6b220f90db54aadc.png"},{"alias":"vk","title":"VK","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F0bd\u002F57b\u002F803\u002F0bd57b803e087ee52c55f8ec5b6d4ffc.png"},{"alias":"ozontech","title":"Ozon Tech","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F4c8\u002F542\u002F883\u002F4c8542883ef14a62b065425db4a6e6cf.jpg"},{"alias":"vktech","title":"VK Tech","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F00f\u002F709\u002Fa96\u002F00f709a965afbd56e9753ab8f3db046f.png"},{"alias":"ncloudtech","title":"МойОфис","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002Ff39\u002F465\u002F714\u002Ff3946571428c1163931a9f6bd797a645.jpg"},{"alias":"lemana_tech","title":"Лемана Тех","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002Fd5f\u002F886\u002F6b2\u002Fd5f8866b2788ee34df8bfb1277883db7.jpeg"},{"alias":"garage8","title":"Garage Eight","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F89a\u002Ff0d\u002Ff32\u002F89af0df329551a2076f9843930faa15e.jpg"},{"alias":"delimobil_career","title":"Делимобиль","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002Ff43\u002F347\u002F50f\u002Ff4334750f0f2db137b6c45bd5669c3ab.jpeg"}]},"banner":{"order":6}},"management":{"technologies":{"order":1,"items":[]},"topics":{"order":2,"items":[{"alias":"hr_management","title":"Управление персоналом","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F2c0\u002Fc6b\u002F86a\u002F2c0c6b86a9011cf811ce4b6820865115.png"},{"alias":"pm","title":"Управление проектами","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F94a\u002Fb35\u002F1ad\u002F94ab351adac61ac363e9de79c1382a67.png"},{"alias":"productpm","title":"Управление продуктом","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fb7e\u002F34b\u002F715\u002Fb7e34b7155812c7fd2aa5288b620ce25.png"},{"alias":"business-laws","title":"Законодательство в IT","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F7e3\u002Ffbd\u002F404\u002F7e3fbd40404e7a51fafad53018d606c8.png"},{"alias":"career","title":"Карьера в IT-индустрии","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fcab\u002Ff82\u002F067\u002Fcabf82067c7be08c90a5903f860c9abf.png"},{"alias":"artificial_intelligence","title":"Искусственный интеллект","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Ff01\u002F3a4\u002F009\u002Ff013a40094ae05299b2b05ef05e7f981.png"},{"alias":"sales","title":"Управление продажами","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F7ca\u002F18c\u002F6de\u002F7ca18c6de900c26e33f5eb8fda46ece1.png"},{"alias":"agile","title":"Agile","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F5da\u002F7c2\u002F219\u002F5da7c2219e8905a217c0430e405b768a.png"}]},"topPosts":{"order":3,"items":[{"id":"1033612","isCorporative":false,"lang":"ru","titleHtml":"Как руководители используют Obsidian","postType":"article","hubs":[{"id":"20690","alias":"gtd","type":"collective","title":"GTD","titleHtml":"GTD","isProfiled":true},{"id":"19583","alias":"dev_management","type":"collective","title":"Управление разработкой","titleHtml":"Управление разработкой","isProfiled":true},{"id":"20682","alias":"pm","type":"collective","title":"Управление проектами","titleHtml":"Управление проектами","isProfiled":true}],"author":{"alias":"razetdinov","fullname":"Азат Разетдинов","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fe06\u002F251\u002Fec5\u002Fe06251ec524c95abec9867a7b6eeb90b.jpg"}},{"id":"1033378","isCorporative":false,"lang":"ru","titleHtml":"Почему мозг избегает именно того, что его развивает?","postType":"article","hubs":[{"id":"21910","alias":"popular_science","type":"collective","title":"Научно-популярное","titleHtml":"Научно-популярное","isProfiled":false},{"id":"20740","alias":"career","type":"collective","title":"Карьера в IT-индустрии","titleHtml":"Карьера в IT-индустрии","isProfiled":false},{"id":"21996","alias":"health","type":"collective","title":"Здоровье","titleHtml":"Здоровье","isProfiled":false},{"id":"20742","alias":"read","type":"collective","title":"Читальный зал","titleHtml":"Читальный зал","isProfiled":false}],"author":{"alias":"ASabramova","fullname":"Анна Абрамова","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F63b\u002F0e1\u002F5cc\u002F63b0e15cc22c0301b69ac67341a9df88.jpeg"}},{"id":"1033906","isCorporative":false,"lang":"ru","titleHtml":"Синтетические интервью работают или как говорить с призраками","postType":"article","hubs":[{"id":"20726","alias":"productpm","type":"collective","title":"Управление продуктом","titleHtml":"Управление продуктом","isProfiled":true},{"id":"21922","alias":"artificial_intelligence","type":"collective","title":"Искусственный интеллект","titleHtml":"Искусственный интеллект","isProfiled":false},{"id":"20688","alias":"research","type":"collective","title":"Исследования и прогнозы в IT","titleHtml":"Исследования и прогнозы в IT","isProfiled":true}],"author":{"alias":"Dingzhibo","fullname":"Михаил Тринога","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F58c\u002F2e0\u002Ff70\u002F58c2e0f702fbb1dcbd960c90b1bd6038.jpeg"}},{"id":"1033346","isCorporative":false,"lang":"ru","titleHtml":"Tribute, Wallet и ФНС: почему вывод в крипту не убережет от налогов","postType":"article","hubs":[{"id":"21986","alias":"cryptocurrency","type":"collective","title":"Криптовалюты","titleHtml":"Криптовалюты","isProfiled":false},{"id":"20738","alias":"business-laws","type":"collective","title":"Законодательство в IT","titleHtml":"Законодательство в IT","isProfiled":false},{"id":"21904","alias":"office","type":"collective","title":"Офисы IT-компаний","titleHtml":"Офисы IT-компаний","isProfiled":false},{"id":"20752","alias":"business_models","type":"collective","title":"Бизнес-модели","titleHtml":"Бизнес-модели","isProfiled":true},{"id":"21928","alias":"finance","type":"collective","title":"Финансы в IT","titleHtml":"Финансы в IT","isProfiled":false}],"author":{"alias":"strannik96","fullname":"Дмитрий Кудряшов","avatarUrl":null}}],"period":"day"},"topAuthors":{"order":4,"items":[{"alias":"gtosss","fullname":"Гончаров Тимофей","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fab0\u002Ffac\u002F22c\u002Fab0fac22ce6264f37ad433d6460714cb.png"},{"alias":"strannik96","fullname":"Дмитрий Кудряшов","avatarUrl":null},{"alias":"kirill-93","fullname":"Кирилл Комиссаров","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F8f1\u002F743\u002F0ba\u002F8f17430bad9df2501a15a34c8ec7baaa.png"},{"alias":"DragorWW","fullname":"Сергей Андреев","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fef7\u002F471\u002Fd7b\u002Fef7471d7beeedeb0975345bdb1d4a071.jpg"},{"alias":"albonemo","fullname":"Алексей Бобок","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F1d9\u002F541\u002Fb38\u002F1d9541b38cfd460025ed1e711cae6813.jpg"},{"alias":"aimfirst","fullname":"Александр Савин","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fce2\u002F997\u002Fab1\u002Fce2997ab15709dc3d3427b49343faa1f.jpg"},{"alias":"ksalnikova","fullname":"Ксения Сальникова","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F4d7\u002F2d5\u002F998\u002F4d72d5998dfc885e64a2af216dfd3104.jpeg"},{"alias":"SimpleOne_it","fullname":"SimpleOne_it","avatarUrl":null}]},"topCompanies":{"order":5,"items":[{"alias":"raft","title":"Raft","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F218\u002F7dd\u002F2f7\u002F2187dd2f7726a2c334e4a7625cd0cf45.png"},{"alias":"vk","title":"VK","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F0bd\u002F57b\u002F803\u002F0bd57b803e087ee52c55f8ec5b6d4ffc.png"},{"alias":"avito","title":"AvitoTech","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F7ba\u002F74f\u002Fb37\u002F7ba74fb3764caa1fb6865aaa6b6aa4bf.png"},{"alias":"viju","title":"Виасат Тех","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002Fa5b\u002F116\u002F5a6\u002Fa5b1165a63f0feb4803a01df8566fc56.png"},{"alias":"directum","title":"Directum","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F896\u002F94a\u002Fdf9\u002F89694adf9131ac7b8f0e797beb5bde28.png"},{"alias":"lanit","title":"ГК ЛАНИТ","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F933\u002Fcc3\u002Fd68\u002F933cc3d68881b38696957eead6f4de36.jpg"},{"alias":"infostart","title":"INFOSTART.RU","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002Ffa9\u002Fb49\u002Ff4b\u002Ffa9b49f4b4b06786760e500e02593912.png"},{"alias":"otus","title":"OTUS","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002Fa65\u002F525\u002F4fe\u002Fa655254feebb0b25a027b5e276ea6489.png"}]},"banner":{"order":6}},"marketing":{"technologies":{"order":1,"items":[]},"topics":{"order":2,"items":[{"alias":"contentmarketing","title":"Контент и копирайтинг","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F575\u002F287\u002F194\u002F5752871941f74139354ce4076db940e0.png"},{"alias":"media_management","title":"Управление медиа","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fa5a\u002F239\u002F96c\u002Fa5a23996cdde59045f2c735f0ffa9f29.png"},{"alias":"business_models","title":"Бизнес-модели","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fd55\u002Fcd6\u002F78d\u002Fd55cd678d30171ab077b4980ce15202f.png"},{"alias":"business-laws","title":"Законодательство в IT","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F7e3\u002Ffbd\u002F404\u002F7e3fbd40404e7a51fafad53018d606c8.png"},{"alias":"seo","title":"Поисковая оптимизация","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F710\u002F62d\u002Fccf\u002F71062dccf4bb1a49459d5a6887c8ec86.png"},{"alias":"display_adv","title":"Медийная реклама","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fdc3\u002F3ff\u002F2a1\u002Fdc33ff2a1aeb30da56be00c4bd3dd17f.png"},{"alias":"career","title":"Карьера в IT-индустрии","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fcab\u002Ff82\u002F067\u002Fcabf82067c7be08c90a5903f860c9abf.png"},{"alias":"artificial_intelligence","title":"Искусственный интеллект","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Ff01\u002F3a4\u002F009\u002Ff013a40094ae05299b2b05ef05e7f981.png"}]},"topPosts":{"order":3,"items":[{"id":"1033696","isCorporative":false,"lang":"ru","titleHtml":"Государство и бизнес тратят 1,5 миллиарда в год на слепой антиплагиат — и это проблема","postType":"article","hubs":[{"id":"20720","alias":"contentmarketing","type":"collective","title":"Контент и копирайтинг","titleHtml":"Контент и копирайтинг","isProfiled":true},{"id":"21922","alias":"artificial_intelligence","type":"collective","title":"Искусственный интеллект","titleHtml":"Искусственный интеллект","isProfiled":false},{"id":"19439","alias":"machine_learning","type":"collective","title":"Машинное обучение","titleHtml":"Машинное обучение","isProfiled":true},{"id":"20696","alias":"study","type":"collective","title":"Учебный процесс в IT","titleHtml":"Учебный процесс в IT","isProfiled":false},{"id":"21896","alias":"copyright","type":"collective","title":"Копирайт","titleHtml":"Копирайт","isProfiled":false}],"author":{"alias":"Albert_Wesker","fullname":"Александр","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fc9b\u002F95e\u002F0c0\u002Fc9b95e0c0d0257fc93ee8840ac6c3ad5.png"}},{"id":"1033816","isCorporative":false,"lang":"ru","titleHtml":"Сайт упал под Core Update — что делаем дальше?","postType":"article","hubs":[{"id":"20748","alias":"seo","type":"collective","title":"Поисковая оптимизация","titleHtml":"Поисковая оптимизация","isProfiled":true},{"id":"20720","alias":"contentmarketing","type":"collective","title":"Контент и копирайтинг","titleHtml":"Контент и копирайтинг","isProfiled":true},{"id":"20726","alias":"productpm","type":"collective","title":"Управление продуктом","titleHtml":"Управление продуктом","isProfiled":true},{"id":"19439","alias":"machine_learning","type":"collective","title":"Машинное обучение","titleHtml":"Машинное обучение","isProfiled":true},{"id":"20698","alias":"weban","type":"collective","title":"Веб-аналитика","titleHtml":"Веб-аналитика","isProfiled":true}],"author":{"alias":"Wieppir","fullname":"Олег Артемов","avatarUrl":null}}],"period":"day"},"topAuthors":{"order":4,"items":[{"alias":"gtosss","fullname":"Гончаров Тимофей","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fab0\u002Ffac\u002F22c\u002Fab0fac22ce6264f37ad433d6460714cb.png"},{"alias":"AlexeyMarketing","fullname":"Алексей","avatarUrl":null},{"alias":"nick_dyuba","fullname":"Николай Дюба","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fffc\u002Face\u002Ffc6\u002Fffcacefc643e6cdf7c68912cb9ec5b8f.png"},{"alias":"Andvecher","fullname":"Андрей Вечерний","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F26b\u002F446\u002Fa36\u002F26b446a36886936a9c4e6c2560c6cbb5.png"},{"alias":"BHV_publishing","fullname":"Издательство БХВ (BHV)","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F153\u002Fa51\u002F1f6\u002F153a511f65c120c8961e52af8c0b8fdb.jpeg"},{"alias":"strannik96","fullname":"Дмитрий Кудряшов","avatarUrl":null},{"alias":"Alice_NavierStokes","fullname":"Alice_NavierStokes","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F67d\u002Fb9c\u002F1f5\u002F67db9c1f5479dd668b77529f3e8051d5.jpeg"},{"alias":"WEBVESTA","fullname":"Надежда Емельянова","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fdfe\u002Fe18\u002F6a8\u002Fdfee186a80c1351f2a7ebc076daea7bc.png"}]},"topCompanies":{"order":5,"items":[{"alias":"habr","title":"Хабр","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F7e4\u002F7b8\u002Fe31\u002F7e47b8e31d0efe9f398461278a16a357.png"},{"alias":"ru_mts","title":"МТС","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F70c\u002Fa67\u002Fcc7\u002F70ca67cc7ecfa889ded9b51efa3e70d3.png"},{"alias":"bhv_publishing","title":"Издательство БХВ","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F608\u002Fa14\u002F224\u002F608a14224575ca21ca07d60a5b2adac7.jpeg"},{"alias":"click","title":"Click.ru","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002Fa16\u002F265\u002F531\u002Fa162655312438dec3124e87b40a77de2.png"},{"alias":"cloud_ru","title":"Cloud.ru","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F81a\u002F196\u002F612\u002F81a19661280e889ac5201477df435d64.png"},{"alias":"otus","title":"OTUS","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002Fa65\u002F525\u002F4fe\u002Fa655254feebb0b25a027b5e276ea6489.png"},{"alias":"just_ai","title":"Just AI","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002Fe5a\u002F2bc\u002Fc49\u002Fe5a2bcc4912f6936f95979f76597eb52.png"},{"alias":"context_lab","title":"КонтекстЛаб","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F084\u002Fbe5\u002F096\u002F084be5096c4003a4408209d2dcb9a377.png"}]},"banner":{"order":6}},"admin":{"technologies":{"order":1,"items":[{"alias":"linux_dev","title":"Linux","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fe35\u002F838\u002Fe14\u002Fe35838e1411346ef268e92bdf57603e7.png"},{"alias":"win_dev","title":"Windows","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F303\u002F8bf\u002F46a\u002F3038bf46a77eed6f51b84c8a9cf87076.png"},{"alias":"python","title":"Python","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F1c6\u002F724\u002F437\u002F1c6724437b83f3d71abd08e5c2877a7a.png"},{"alias":"osx_dev","title":"macOS","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fa09\u002Ffe1\u002Ff00\u002Fa09fe1f00511e7c8838ef0cdd8da5598.png"},{"alias":"kubernetes","title":"Kubernetes","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fc06\u002Fb75\u002Fa6b\u002Fc06b75a6be1550b0493024ec1507280c.png"},{"alias":"cpp","title":"C++","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F89a\u002Fc44\u002F09e\u002F89ac4409ea406d835a82383fa53fcda7.png"},{"alias":"github","title":"GitHub","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F00d\u002F0d3\u002F45f\u002F00d0d345f42e5c0723e1de1e3df9c68a.png"},{"alias":"nginx","title":"Nginx","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fafc\u002Fa58\u002F648\u002Fafca5864858b98779e6967761e7c8826.png"}]},"topics":{"order":2,"items":[{"alias":"sys_admin","title":"Системное администрирование","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F6c5\u002Fdb3\u002F8c2\u002F6c5db38c23972b6c0916e91e408edff8.png"},{"alias":"network_technologies","title":"Сетевые технологии","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fb2e\u002F13f\u002F8fc\u002Fb2e13f8fcaf2711677c87418b98e85fe.png"},{"alias":"open_source","title":"Open source","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fdc9\u002Fdbe\u002Fe1d\u002Fdc9dbee1d24188b925e86946bafb15c7.png"},{"alias":"devops","title":"DevOps","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F57d\u002F092\u002F3fc\u002F57d0923fc4dbf24622761210161f5b47.jpg"},{"alias":"it-infrastructure","title":"IT-инфраструктура","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F594\u002F546\u002F45b\u002F59454645b38d9a58a92e6870133ae8e6.png"},{"alias":"infosecurity","title":"Информационная безопасность","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F135\u002F2db\u002F187\u002F1352db18765addaa6e0b2ac013d386d8.png"},{"alias":"s_admin","title":"Серверное администрирование","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F1b7\u002F37e\u002F2d9\u002F1b737e2d9b2f7b60a2f5700eb5f93f1e.png"},{"alias":"os","title":"Операционные системы","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fc6b\u002F908\u002F8fc\u002Fc6b9088fcbab2ae7a0b3700b1960449d.png"}]},"topPosts":{"order":3,"items":[{"id":"1033216","isCorporative":false,"lang":"ru","titleHtml":"Дорожная карта домашнего мини-ПК в 2026: что развернуть, в каком порядке, и зачем — план апгрейда от инфраструктурщика","postType":"article","hubs":[{"id":"20788","alias":"devops","type":"collective","title":"DevOps","titleHtml":"DevOps","isProfiled":true},{"id":"221","alias":"sys_admin","type":"collective","title":"Системное администрирование","titleHtml":"Системное администрирование","isProfiled":true},{"id":"144","alias":"open_source","type":"collective","title":"Open source","titleHtml":"Open source","isProfiled":true},{"id":"5767","alias":"system_programming","type":"collective","title":"Системное программирование","titleHtml":"Системное программирование","isProfiled":true},{"id":"21966","alias":"home_automation","type":"collective","title":"Умный дом","titleHtml":"Умный дом","isProfiled":false}],"author":{"alias":"ShyDamn","fullname":"Шубин Данила","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F12a\u002Fc86\u002F6a6\u002F12ac866a6c98714b4d5f6847ea75880e.jpeg"}},{"id":"1033588","isCorporative":true,"lang":"ru","titleHtml":"NPU в ноутбуках: что меняется для тех, кто закупает корпоративную технику","postType":"article","hubs":[{"id":"20822","alias":"ru_mts","type":"corporative","title":"Блог компании МТС","titleHtml":"Блог компании МТС","isProfiled":false},{"id":"21922","alias":"artificial_intelligence","type":"collective","title":"Искусственный интеллект","titleHtml":"Искусственный интеллект","isProfiled":false},{"id":"21952","alias":"notebooks","type":"collective","title":"Ноутбуки","titleHtml":"Ноутбуки","isProfiled":false},{"id":"221","alias":"sys_admin","type":"collective","title":"Системное администрирование","titleHtml":"Системное администрирование","isProfiled":true},{"id":"6398","alias":"it-infrastructure","type":"collective","title":"IT-инфраструктура","titleHtml":"IT-инфраструктура","isProfiled":true}],"author":{"alias":"golangloves","fullname":"golangloves","avatarUrl":null}},{"id":"1033704","isCorporative":false,"lang":"ru","titleHtml":"TLSS или portable pki service в кармане","postType":"article","hubs":[{"id":"221","alias":"sys_admin","type":"collective","title":"Системное администрирование","titleHtml":"Системное администрирование","isProfiled":true},{"id":"20788","alias":"devops","type":"collective","title":"DevOps","titleHtml":"DevOps","isProfiled":true}],"author":{"alias":"addspin","fullname":"addspin","avatarUrl":null}},{"id":"1032680","isCorporative":false,"lang":"ru","titleHtml":"Материализованные представления в HQBIRD SERVER 5.0.4","postType":"article","hubs":[{"id":"594","alias":"sql","type":"collective","title":"SQL","titleHtml":"SQL","isProfiled":true},{"id":"18574","alias":"firebird","type":"collective","title":"Firebird\u002FInterbase","titleHtml":"Firebird\u002FInterbase","isProfiled":true}],"author":{"alias":"Gallemar","fullname":"Gallemar","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F57f\u002F88f\u002Fec1\u002F57f88fec1a694871b621741098ff5469.jpg"}}],"period":"day"},"topAuthors":{"order":4,"items":[{"alias":"forc3meat","fullname":"Tony","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F013\u002Fde9\u002F28e\u002F013de928e7abd48b8e20b157652f4b9e.png"},{"alias":"SrvTrantor","fullname":"Гэри Сэлдон","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F58a\u002Fc98\u002F83c\u002F58ac9883cc6ec618a7dc30622619850d.jpeg"},{"alias":"unxed","fullname":"Иван Сорокин","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F97f\u002F3e8\u002F082\u002F97f3e8082c108f6f977ab365e2a01972.jpeg"},{"alias":"Revertis","fullname":"Revertis","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Ff72\u002Fcc8\u002F962\u002Ff72cc8962beb95cdf0bb64aaf461e63f.png"},{"alias":"Bizdroblenie","fullname":"Виталий Ветров","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F31d\u002F026\u002Fd83\u002F31d026d835c8a46284a5ddcf49e8593d.jpeg"},{"alias":"ShyDamn","fullname":"Шубин Данила","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F12a\u002Fc86\u002F6a6\u002F12ac866a6c98714b4d5f6847ea75880e.jpeg"},{"alias":"k0mar0v","fullname":"Антон","avatarUrl":null},{"alias":"artyomsoft","fullname":"artyomsoft","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fa58\u002Fd90\u002F974\u002Fa58d90974bec0e4d915c6ddb006a93cc.jpg"}]},"topCompanies":{"order":5,"items":[{"alias":"selectel","title":"Selectel","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F4b4\u002F652\u002F7f5\u002F4b46527f577e69b1f32a84700b2fed33.png"},{"alias":"ruvds","title":"RUVDS.com","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F608\u002Ff02\u002F206\u002F608f0220675e20da793aa1974a1a0a2e.png"},{"alias":"ru_mts","title":"МТС","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F70c\u002Fa67\u002Fcc7\u002F70ca67cc7ecfa889ded9b51efa3e70d3.png"},{"alias":"lanit","title":"ГК ЛАНИТ","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F933\u002Fcc3\u002Fd68\u002F933cc3d68881b38696957eead6f4de36.jpg"},{"alias":"x-com","title":"Группа компаний X-Com","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F7f4\u002Fa6b\u002F24e\u002F7f4a6b24ecce305556e439f09587d2e1.jpg"},{"alias":"runity","title":"Рунити","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002Ffd5\u002Fe7e\u002F4d3\u002Ffd5e7e4d3905f937b7558c0e8cf2369f.png"},{"alias":"yadro","title":"YADRO","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002Fde0\u002Fe6c\u002F373\u002Fde0e6c373cec39eb35ec96f508331ad7.png"},{"alias":"flant","title":"Флант","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F740\u002Fdb1\u002F948\u002F740db19488e97cbc6b183658c5749867.png"}]},"banner":{"order":6}},"popsci":{"technologies":{"order":1,"items":[]},"topics":{"order":2,"items":[{"alias":"popular_science","title":"Научно-популярное","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fgeektimes\u002Fhub\u002F02f\u002F206\u002F0b9\u002F02f2060b99e6f4d9403eee0420d7d5b8.png"},{"alias":"history","title":"История IT","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fgeektimes\u002Fhub\u002Fbbe\u002Fec1\u002F498\u002Fbbeec149811969c7214c33d0a6911160.png"},{"alias":"transport","title":"Транспорт","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fgeektimes\u002Fhub\u002F656\u002Fc42\u002F85a\u002F656c4285af372d89e1b0636d79521885.png"},{"alias":"artificial_intelligence","title":"Искусственный интеллект","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Ff01\u002F3a4\u002F009\u002Ff013a40094ae05299b2b05ef05e7f981.png"},{"alias":"space","title":"Космонавтика","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fgeektimes\u002Fhub\u002Ff07\u002Fba2\u002Fb9d\u002Ff07ba2b9d63b419e332a4d5ddeec8a99.png"},{"alias":"electronics","title":"Производство и разработка электроники","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F269\u002F015\u002Ff78\u002F269015f78421d3d8efa321a6f81574f1.png"},{"alias":"physics","title":"Физика","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fgeektimes\u002Fhub\u002Fe55\u002F4e4\u002Ff79\u002Fe554e4f790ec7617ecde4b3930acf44a.png"},{"alias":"astronomy","title":"Астрономия","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fgeektimes\u002Fhub\u002F79a\u002F987\u002F250\u002F79a987250ade16638dfafcce24213f3d.png"}]},"topPosts":{"order":3,"items":[{"id":"1033616","isCorporative":false,"lang":"ru","titleHtml":"Небесная Ось Зла","postType":"article","hubs":[{"id":"22022","alias":"astronomy","type":"collective","title":"Астрономия","titleHtml":"Астрономия","isProfiled":false},{"id":"21910","alias":"popular_science","type":"collective","title":"Научно-популярное","titleHtml":"Научно-популярное","isProfiled":false}],"author":{"alias":"wmlab","fullname":"wmlab","avatarUrl":null}},{"id":"1032674","isCorporative":true,"lang":"ru","titleHtml":"Россия выбыла из лунной гонки. Что планируют США и Китай: база, ядерный реактор, спутники слежения","postType":"article","hubs":[{"id":"19791","alias":"ruvds","type":"corporative","title":"Блог компании RUVDS.com","titleHtml":"Блог компании RUVDS.com","isProfiled":false},{"id":"21962","alias":"space","type":"collective","title":"Космонавтика","titleHtml":"Космонавтика","isProfiled":false},{"id":"21984","alias":"sci-fi","type":"collective","title":"Научная фантастика","titleHtml":"Научная фантастика","isProfiled":false},{"id":"22014","alias":"futurenow","type":"collective","title":"Будущее здесь","titleHtml":"Будущее здесь","isProfiled":false},{"id":"22024","alias":"urban","type":"collective","title":"Урбанизм","titleHtml":"Урбанизм","isProfiled":false}],"author":{"alias":"alizar","fullname":"Анатолий Ализар","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fcc3\u002F97d\u002F54c\u002Fcc397d54c2161005908a3034c5fabbea.png"}},{"id":"1032906","isCorporative":true,"lang":"ru","titleHtml":"Биологи переписали генетический код живой клетки. Что из этого получилось?","postType":"article","hubs":[{"id":"20822","alias":"ru_mts","type":"corporative","title":"Блог компании МТС","titleHtml":"Блог компании МТС","isProfiled":false},{"id":"21912","alias":"biotech","type":"collective","title":"Биотехнологии","titleHtml":"Биотехнологии","isProfiled":false},{"id":"21910","alias":"popular_science","type":"collective","title":"Научно-популярное","titleHtml":"Научно-популярное","isProfiled":false},{"id":"21922","alias":"artificial_intelligence","type":"collective","title":"Искусственный интеллект","titleHtml":"Искусственный интеллект","isProfiled":false},{"id":"22750","alias":"biology","type":"collective","title":"Биология","titleHtml":"Биология","isProfiled":false}],"author":{"alias":"BiktorSergeev","fullname":"BiktorSergeev","avatarUrl":null}},{"id":"1033670","isCorporative":false,"lang":"ru","titleHtml":"Верхум. Люди — нейроны, общество — мозг","postType":"article","hubs":[{"id":"21906","alias":"history","type":"collective","title":"История IT","titleHtml":"История IT","isProfiled":false},{"id":"21990","alias":"brain","type":"collective","title":"Мозг","titleHtml":"Мозг","isProfiled":false},{"id":"21910","alias":"popular_science","type":"collective","title":"Научно-популярное","titleHtml":"Научно-популярное","isProfiled":false},{"id":"20742","alias":"read","type":"collective","title":"Читальный зал","titleHtml":"Читальный зал","isProfiled":false}],"author":{"alias":"urassl","fullname":"urassl","avatarUrl":null}}],"period":"day"},"topAuthors":{"order":4,"items":[{"alias":"pilot_artem","fullname":"Артём","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F67f\u002F568\u002Fc6b\u002F67f568c6b7ab1c0f1f775790e51377a6.jpg"},{"alias":"AlekseiPodkletnov","fullname":"Алексей Подклетнов","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fb24\u002Fae0\u002Ff1f\u002Fb24ae0f1fa4b6633ef9009a1dbe8e488.jpeg"},{"alias":"Erwinmal","fullname":"Алексей Костенков","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fed9\u002F659\u002F70f\u002Fed965970f791e09dfe69376568394582.jpg"},{"alias":"Catx2","fullname":"Cat.Cat","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F520\u002F031\u002Ffd7\u002F520031fd7a55be336e2f2d0534ef32e5.jpg"},{"alias":"dzavalishin","fullname":"Дмитрий Завалишин","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fcf4\u002F8fd\u002F97e\u002Fcf48fd97e3c1043d83e95b8835d9e27d.jpg"},{"alias":"inetstar","fullname":"Сергей Ю. Каменев","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fca0\u002F010\u002Fde7\u002Fca0010de71e5ed548946e7e6dab04fe5.jpg"},{"alias":"GeeksCat","fullname":"GeeksCat","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fcdd\u002F514\u002Fc00\u002Fcdd514c0052cce616a67515c4ed5c8a1.jpg"},{"alias":"alizar","fullname":"Анатолий Ализар","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fcc3\u002F97d\u002F54c\u002Fcc397d54c2161005908a3034c5fabbea.png"}]},"topCompanies":{"order":5,"items":[{"alias":"ruvds","title":"RUVDS.com","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F608\u002Ff02\u002F206\u002F608f0220675e20da793aa1974a1a0a2e.png"},{"alias":"selectel","title":"Selectel","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F4b4\u002F652\u002F7f5\u002F4b46527f577e69b1f32a84700b2fed33.png"},{"alias":"timeweb","title":"Timeweb Cloud","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F857\u002Ffb7\u002F96e\u002F857fb796e1a82ed82762c60a09acba32.png"},{"alias":"beget","title":"Beget","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F077\u002F521\u002Fe04\u002F077521e04dc7bedc96dc729529e31ea8.png"},{"alias":"onlinepatent","title":"Online patent","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F3a0\u002F49e\u002Fff5\u002F3a049eff5348e0517954069b5a7c61e2.png"},{"alias":"gazprombank","title":"Газпромбанк","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F99c\u002F964\u002Fb5b\u002F99c964b5ba520e63284885b8b17b866b.jpg"},{"alias":"ru_mts","title":"МТС","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F70c\u002Fa67\u002Fcc7\u002F70ca67cc7ecfa889ded9b51efa3e70d3.png"},{"alias":"lanit","title":"ГК ЛАНИТ","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F933\u002Fcc3\u002Fd68\u002F933cc3d68881b38696957eead6f4de36.jpg"}]},"banner":{"order":6}},"gamedev":{"technologies":{"order":1,"items":[{"alias":"cpp","title":"C++","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F89a\u002Fc44\u002F09e\u002F89ac4409ea406d835a82383fa53fcda7.png"},{"alias":"unity","title":"Unity","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fb15\u002F783\u002Fa32\u002Fb15783a321990b8fdf919ee645f823c5.png"},{"alias":"csharp","title":"C#","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fb99\u002Fb7d\u002F3e7\u002Fb99b7d3e7a997b20d86689f51105623d.png"},{"alias":"assembler","title":"Assembler","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fbad\u002F82d\u002Fd77\u002Fbad82dd7798a23cac4b1781ba6befd05.png"},{"alias":"win_dev","title":"Windows","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F303\u002F8bf\u002F46a\u002F3038bf46a77eed6f51b84c8a9cf87076.png"},{"alias":"lua","title":"Lua","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F148\u002F26b\u002Faed\u002F14826baede3a4f453908a2b528bef22a.png"},{"alias":"linux_dev","title":"Linux","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fe35\u002F838\u002Fe14\u002Fe35838e1411346ef268e92bdf57603e7.png"},{"alias":"fsharp","title":"F#","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F580\u002F8d5\u002Fd36\u002F5808d5d362f5aaa86849124354e544bd.png"}]},"topics":{"order":2,"items":[{"alias":"gamedev","title":"Разработка игр","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fb31\u002F347\u002F904\u002Fb31347904b72455522b1f645ea28ef1a.png"},{"alias":"games","title":"Игры и игровые консоли","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fgeektimes\u002Fhub\u002F250\u002Fe19\u002F5fa\u002F250e195faa1708e4df5cb8664394a54f.png"},{"alias":"game_design","title":"Дизайн игр","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F510\u002F987\u002Fbd1\u002F510987bd1a854995f2ce76d8fb5e513d.png"},{"alias":"3d_graphics","title":"3D-графика","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F857\u002F44e\u002F195\u002F85744e195c49ebf068149317753a95fc.png"},{"alias":"artificial_intelligence","title":"Искусственный интеллект","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Ff01\u002F3a4\u002F009\u002Ff013a40094ae05299b2b05ef05e7f981.png"},{"alias":"sound","title":"Звук","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fecf\u002F5db\u002F9a5\u002Fecf5db9a5cabc599bcedccddb7827340.png"},{"alias":"game_promotion","title":"Продвижение игр","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F3c4\u002Fe01\u002F3b8\u002F3c4e013b8bcb3592209ed57f1d4b69fd.png"},{"alias":"business-laws","title":"Законодательство в IT","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F7e3\u002Ffbd\u002F404\u002F7e3fbd40404e7a51fafad53018d606c8.png"}]},"topPosts":{"order":3,"items":[{"id":"1033736","isCorporative":false,"lang":"ru","titleHtml":"Как работают с памятью в игровых консолях","postType":"article","hubs":[{"id":"359","alias":"programming","type":"collective","title":"Программирование","titleHtml":"Программирование","isProfiled":true},{"id":"84","alias":"crazydev","type":"collective","title":"Ненормальное программирование","titleHtml":"Ненормальное программирование","isProfiled":true},{"id":"559","alias":"cpp","type":"collective","title":"C++","titleHtml":"C++","isProfiled":true},{"id":"21980","alias":"games","type":"collective","title":"Игры и игровые консоли","titleHtml":"Игры и игровые консоли","isProfiled":false},{"id":"7773","alias":"gamedev","type":"collective","title":"Разработка игр","titleHtml":"Разработка игр","isProfiled":true}],"author":{"alias":"dalerank","fullname":"Sergei Kushnirenko","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fae5\u002Ff74\u002Fb00\u002Fae5f74b00f68105d98362bd11f263809.jpg"}},{"id":"1033680","isCorporative":false,"lang":"ru","titleHtml":"Недельный геймдев: #277 — 10 мая, 2026","postType":"article","hubs":[{"id":"7773","alias":"gamedev","type":"collective","title":"Разработка игр","titleHtml":"Разработка игр","isProfiled":true}],"author":{"alias":"Suvitruf","fullname":"Андрей Апанасик Владимирович","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F78c\u002Fa06\u002Fc52\u002F78ca06c52b5e82548aa9083df9d104ea.jpg"}},{"id":"1033708","isCorporative":false,"lang":"ru","titleHtml":"Алгоритмы и нейросети: как устроен ИИ в видеоиграх","postType":"article","hubs":[{"id":"21980","alias":"games","type":"collective","title":"Игры и игровые консоли","titleHtml":"Игры и игровые консоли","isProfiled":false},{"id":"21906","alias":"history","type":"collective","title":"История IT","titleHtml":"История IT","isProfiled":false},{"id":"20800","alias":"game_design","type":"collective","title":"Дизайн игр","titleHtml":"Дизайн игр","isProfiled":true},{"id":"7773","alias":"gamedev","type":"collective","title":"Разработка игр","titleHtml":"Разработка игр","isProfiled":true}],"author":{"alias":"Terrapard","fullname":"Роман","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fa9e\u002F94b\u002Fee3\u002Fa9e94bee35d63d2056edea9077db7457.jpeg"}},{"id":"1033858","isCorporative":false,"lang":"ru","titleHtml":"Как мы написали социальную сеть внутри Minecraft на 13 версиях — и почему это не было безумием","postType":"article","hubs":[{"id":"375","alias":"java","type":"collective","title":"Java","titleHtml":"Java","isProfiled":true},{"id":"17748","alias":"go","type":"collective","title":"Go","titleHtml":"Go","isProfiled":true},{"id":"21372","alias":"gradle","type":"collective","title":"Gradle","titleHtml":"Gradle","isProfiled":true},{"id":"594","alias":"sql","type":"collective","title":"SQL","titleHtml":"SQL","isProfiled":true},{"id":"21456","alias":"win_dev","type":"collective","title":"Windows","titleHtml":"Windows","isProfiled":true}],"author":{"alias":"Xuxodofu","fullname":"Xuxodofu","avatarUrl":null}}],"period":"day"},"topAuthors":{"order":4,"items":[{"alias":"true-grue","fullname":"Пётр Советов","avatarUrl":null},{"alias":"shiru8bit","fullname":"Александр Семенов","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fb8d\u002Fbc5\u002F9f1\u002Fb8dbc59f16b034a5b569c4da62345d08.gif"},{"alias":"OldfagGamer","fullname":"Иван","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fbfd\u002F594\u002F2e1\u002Fbfd5942e1fe344f519503b71f0c8fa31.png"},{"alias":"dalerank","fullname":"Sergei Kushnirenko","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fae5\u002Ff74\u002Fb00\u002Fae5f74b00f68105d98362bd11f263809.jpg"},{"alias":"Guren302","fullname":"Александр","avatarUrl":null},{"alias":"PetrVasilchenko","fullname":"Пётр Васильченко","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F7a1\u002F07d\u002F1d8\u002F7a107d1d8fe73d6db29524aceec4ff7c.png"},{"alias":"NoskovSS","fullname":"Сергей Носков","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F374\u002Ffd7\u002Ff22\u002F374fd7f22d1ff7d677aa68d9246dde48.jpg"},{"alias":"Suvitruf","fullname":"Андрей Апанасик Владимирович","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F78c\u002Fa06\u002Fc52\u002F78ca06c52b5e82548aa9083df9d104ea.jpg"}]},"topCompanies":{"order":5,"items":[{"alias":"ruvds","title":"RUVDS.com","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F608\u002Ff02\u002F206\u002F608f0220675e20da793aa1974a1a0a2e.png"},{"alias":"timeweb","title":"Timeweb Cloud","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F857\u002Ffb7\u002F96e\u002F857fb796e1a82ed82762c60a09acba32.png"},{"alias":"yadro","title":"YADRO","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002Fde0\u002Fe6c\u002F373\u002Fde0e6c373cec39eb35ec96f508331ad7.png"},{"alias":"plati","title":"Plati Market","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F6ac\u002Fd74\u002F3b0\u002F6acd743b050a916dcdfe9c3559790251.png"},{"alias":"ggsel","title":"ggsel.net","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F37b\u002F100\u002F7a4\u002F37b1007a4cc5a52823b8fbb125d415b6.jpeg"},{"alias":"onlinepatent","title":"Online patent","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F3a0\u002F49e\u002Fff5\u002F3a049eff5348e0517954069b5a7c61e2.png"},{"alias":"miip","title":"Высшая школа бизнеса НИУ ВШЭ","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002Ff6b\u002Fe22\u002Fbf9\u002Ff6be22bf9d15ef41a0c66e6d920e334f.png"},{"alias":"otus","title":"OTUS","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002Fa65\u002F525\u002F4fe\u002Fa655254feebb0b25a027b5e276ea6489.png"}]},"banner":{"order":6}},"ai_and_ml":{"technologies":{"order":1,"items":[{"alias":"python","title":"Python","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F1c6\u002F724\u002F437\u002F1c6724437b83f3d71abd08e5c2877a7a.png"},{"alias":"github","title":"GitHub","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F00d\u002F0d3\u002F45f\u002F00d0d345f42e5c0723e1de1e3df9c68a.png"},{"alias":"c","title":"C","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fb5e\u002F3dc\u002Ff5c\u002Fb5e3dcf5c143cc1a3e442e3401e77735.png"},{"alias":"go","title":"Go","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fa10\u002Fc5c\u002F626\u002Fa10c5c62685d9a7d2964993daf6958c3.png"},{"alias":"javascript","title":"JavaScript","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F2b3\u002F99b\u002F964\u002F2b399b964d456f3ad1bfddc0346b60d4.png"},{"alias":"win_dev","title":"Windows","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F303\u002F8bf\u002F46a\u002F3038bf46a77eed6f51b84c8a9cf87076.png"},{"alias":"net","title":".NET","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F050\u002F99b\u002Fe5b\u002F05099be5bd60ad6dffaba80928f832f2.png"},{"alias":"cpp","title":"C++","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F89a\u002Fc44\u002F09e\u002F89ac4409ea406d835a82383fa53fcda7.png"}]},"topics":{"order":2,"items":[{"alias":"artificial_intelligence","title":"Искусственный интеллект","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Ff01\u002F3a4\u002F009\u002Ff013a40094ae05299b2b05ef05e7f981.png"},{"alias":"machine_learning","title":"Машинное обучение","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fbef\u002Faa1\u002Fa7e\u002Fbefaa1a7e35e3c6b133114723367e3e0.png"},{"alias":"open_source","title":"Open source","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fdc9\u002Fdbe\u002Fe1d\u002Fdc9dbee1d24188b925e86946bafb15c7.png"},{"alias":"natural_language_processing","title":"Natural Language Processing","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fd0a\u002Feca\u002Ff71\u002Fd0aecaf71fb6cffd9c62ed0fff32e68b.png"},{"alias":"career","title":"Карьера в IT-индустрии","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fcab\u002Ff82\u002F067\u002Fcabf82067c7be08c90a5903f860c9abf.png"},{"alias":"image_processing","title":"Обработка изображений","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Ffb7\u002Fa4a\u002F8d3\u002Ffb7a4a8d37cb9eaf0d1fc8e62c3bde1a.png"},{"alias":"research","title":"Исследования и прогнозы в IT","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fdfb\u002Fb79\u002F823\u002Fdfbb7982340f3a7ddb90860153b0c1ac.png"},{"alias":"bigdata","title":"Big Data","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F999\u002F74b\u002Fc6d\u002F99974bc6d012cd4094db36a0cb97e914.png"}]},"topPosts":{"order":3,"items":[{"id":"1033808","isCorporative":false,"lang":"ru","titleHtml":"Локальные LLM в реальной работе: Gemma 4, Qwen 3.6 и Qwen Coder","postType":"article","hubs":[{"id":"21922","alias":"artificial_intelligence","type":"collective","title":"Искусственный интеллект","titleHtml":"Искусственный интеллект","isProfiled":false}],"author":{"alias":"vyacheslavteplyakov","fullname":"vyacheslavteplyakov","avatarUrl":null}},{"id":"1033614","isCorporative":false,"lang":"ru","titleHtml":"Локальный агент для диагностики инфраструктуры","postType":"article","hubs":[{"id":"359","alias":"programming","type":"collective","title":"Программирование","titleHtml":"Программирование","isProfiled":true},{"id":"21922","alias":"artificial_intelligence","type":"collective","title":"Искусственный интеллект","titleHtml":"Искусственный интеллект","isProfiled":false},{"id":"20788","alias":"devops","type":"collective","title":"DevOps","titleHtml":"DevOps","isProfiled":true}],"author":{"alias":"breakingtesting","fullname":"Николай Брейкин","avatarUrl":null}},{"id":"1033890","isCorporative":false,"lang":"ru","titleHtml":"Легко ли навайбкодить новый «Черный квадрат»?","postType":"article","hubs":[{"id":"20740","alias":"career","type":"collective","title":"Карьера в IT-индустрии","titleHtml":"Карьера в IT-индустрии","isProfiled":false},{"id":"21922","alias":"artificial_intelligence","type":"collective","title":"Искусственный интеллект","titleHtml":"Искусственный интеллект","isProfiled":false}],"author":{"alias":"nenkre","fullname":"nenkre","avatarUrl":null}},{"id":"1033824","isCorporative":false,"lang":"ru","titleHtml":"Извлечение параметров из 2D-чертежей: 6 YOLO-моделей, кастомный OCR и стрелочная логика","postType":"article","hubs":[{"id":"19439","alias":"machine_learning","type":"collective","title":"Машинное обучение","titleHtml":"Машинное обучение","isProfiled":true},{"id":"21922","alias":"artificial_intelligence","type":"collective","title":"Искусственный интеллект","titleHtml":"Искусственный интеллект","isProfiled":false},{"id":"17698","alias":"cad_cam","type":"collective","title":"CAD\u002FCAM","titleHtml":"CAD\u002FCAM","isProfiled":true}],"author":{"alias":"NeuroKirKorov","fullname":"Нейрокиркоров","avatarUrl":null}}],"period":"day"},"topAuthors":{"order":4,"items":[{"alias":"inkedsymon","fullname":"inkedsymon","avatarUrl":null},{"alias":"runaway_llm","fullname":"Андрей Пешков","avatarUrl":null},{"alias":"vaganovelena","fullname":"Лена Богданова","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F493\u002Fc05\u002Ff80\u002F493c05f80d4e5f1572cf9beed7721650.jpeg"},{"alias":"fyodor18","fullname":"Fyodor","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fb44\u002F17c\u002F31b\u002Fb4417c31b014fd99190704da1c0959bd.jpeg"},{"alias":"rRenegat","fullname":"rRenegat","avatarUrl":null},{"alias":"Neyroskuf","fullname":"Андрей Калашников","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F54a\u002F067\u002Fdbe\u002F54a067dbe9ce9cac85dd6fe4bea38ff5.jpeg"},{"alias":"sergio5990","fullname":"sergio5990","avatarUrl":null},{"alias":"Wonderlove","fullname":"Владислав","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F7ff\u002F2fb\u002F121\u002F7ff2fb12120c2b8acb0c4c00e77aed4b.jpeg"}]},"topCompanies":{"order":5,"items":[{"alias":"selectel","title":"Selectel","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F4b4\u002F652\u002F7f5\u002F4b46527f577e69b1f32a84700b2fed33.png"},{"alias":"ru_mts","title":"МТС","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F70c\u002Fa67\u002Fcc7\u002F70ca67cc7ecfa889ded9b51efa3e70d3.png"},{"alias":"studyai","title":"StudyAI","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F4ce\u002Fc43\u002Fe84\u002F4cec43e847ed11c80a313bd614c8747e.png"},{"alias":"timeweb","title":"Timeweb Cloud","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F857\u002Ffb7\u002F96e\u002F857fb796e1a82ed82762c60a09acba32.png"},{"alias":"sberbank","title":"Сбер","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F9db\u002F3c1\u002Fec0\u002F9db3c1ec02265b8bcbfdfb0d23d8b9f2.jpg"},{"alias":"raft","title":"Raft","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F218\u002F7dd\u002F2f7\u002F2187dd2f7726a2c334e4a7625cd0cf45.png"},{"alias":"ruvds","title":"RUVDS.com","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F608\u002Ff02\u002F206\u002F608f0220675e20da793aa1974a1a0a2e.png"},{"alias":"bothub","title":"BotHub","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F1df\u002F5e3\u002F5f4\u002F1df5e35f4c179925fda46e842dc23a82.png"}]},"banner":{"order":6}},"information_security":{"technologies":{"order":1,"items":[{"alias":"android_dev","title":"Android","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fdeb\u002F535\u002Fb54\u002Fdeb535b54338aa5a202a516dee792556.png"},{"alias":"github","title":"GitHub","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F00d\u002F0d3\u002F45f\u002F00d0d345f42e5c0723e1de1e3df9c68a.png"},{"alias":"linux_dev","title":"Linux","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fe35\u002F838\u002Fe14\u002Fe35838e1411346ef268e92bdf57603e7.png"},{"alias":"java","title":"Java","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F4c9\u002F821\u002Fd2a\u002F4c9821d2ad5a9844eb6d0f8c77991772.png"},{"alias":"win_dev","title":"Windows","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F303\u002F8bf\u002F46a\u002F3038bf46a77eed6f51b84c8a9cf87076.png"},{"alias":"python","title":"Python","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F1c6\u002F724\u002F437\u002F1c6724437b83f3d71abd08e5c2877a7a.png"},{"alias":"osx_dev","title":"macOS","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fa09\u002Ffe1\u002Ff00\u002Fa09fe1f00511e7c8838ef0cdd8da5598.png"},{"alias":"kubernetes","title":"Kubernetes","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fc06\u002Fb75\u002Fa6b\u002Fc06b75a6be1550b0493024ec1507280c.png"}]},"topics":{"order":2,"items":[{"alias":"infosecurity","title":"Информационная безопасность","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F135\u002F2db\u002F187\u002F1352db18765addaa6e0b2ac013d386d8.png"},{"alias":"reverse-engineering","title":"Реверс-инжиниринг","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Ffd1\u002F301\u002F70b\u002Ffd130170b8dcf435049bf9194d50dd3c.png"},{"alias":"network_technologies","title":"Сетевые технологии","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fb2e\u002F13f\u002F8fc\u002Fb2e13f8fcaf2711677c87418b98e85fe.png"},{"alias":"business-laws","title":"Законодательство в IT","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F7e3\u002Ffbd\u002F404\u002F7e3fbd40404e7a51fafad53018d606c8.png"},{"alias":"open_source","title":"Open source","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fdc9\u002Fdbe\u002Fe1d\u002Fdc9dbee1d24188b925e86946bafb15c7.png"},{"alias":"it-infrastructure","title":"IT-инфраструктура","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F594\u002F546\u002F45b\u002F59454645b38d9a58a92e6870133ae8e6.png"},{"alias":"instant_messaging","title":"Мессенджеры","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F910\u002F615\u002Fc83\u002F910615c83444f1344fc92bb8de0bb9bb.png"},{"alias":"research","title":"Исследования и прогнозы в IT","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fdfb\u002Fb79\u002F823\u002Fdfbb7982340f3a7ddb90860153b0c1ac.png"}]},"topPosts":{"order":3,"items":[{"id":"1033456","isCorporative":false,"lang":"ru","titleHtml":"Как технически устроена DPI-фильтрация у российских провайдеров и как её детектировать: разбор open-source инструментов","postType":"article","hubs":[{"id":"50","alias":"infosecurity","type":"collective","title":"Информационная безопасность","titleHtml":"Информационная безопасность","isProfiled":true},{"id":"144","alias":"open_source","type":"collective","title":"Open source","titleHtml":"Open source","isProfiled":true},{"id":"17123","alias":"network_technologies","type":"collective","title":"Сетевые технологии","titleHtml":"Сетевые технологии","isProfiled":true}],"author":{"alias":"nlaik","fullname":"Парахин Никита","avatarUrl":null}},{"id":"1033666","isCorporative":false,"lang":"ru","titleHtml":"Штрафы «за персональные данные»: как все устроено на самом деле","postType":"article","hubs":[{"id":"20738","alias":"business-laws","type":"collective","title":"Законодательство в IT","titleHtml":"Законодательство в IT","isProfiled":false},{"id":"50","alias":"infosecurity","type":"collective","title":"Информационная безопасность","titleHtml":"Информационная безопасность","isProfiled":true},{"id":"20742","alias":"read","type":"collective","title":"Читальный зал","titleHtml":"Читальный зал","isProfiled":false}],"author":{"alias":"Angry_DPO","fullname":"Ольга Шаповалова","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F319\u002Fdf8\u002F681\u002F319df86819d5d7b42894b259a86e6211.jpeg"}},{"id":"1033868","isCorporative":false,"lang":"ru","titleHtml":"Взлом всей сети через крышу. История одного физического пентеста","postType":"article","hubs":[{"id":"50","alias":"infosecurity","type":"collective","title":"Информационная безопасность","titleHtml":"Информационная безопасность","isProfiled":true}],"author":{"alias":"yanzar","fullname":"Ян Зарипов","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F98d\u002F914\u002F738\u002F98d914738291bb35c0bd659656c834ee.png"}},{"id":"1033756","isCorporative":true,"lang":"ru","titleHtml":"Коммерческая тайна и промышленный шпионаж: вспоминаем кражу кода у Google","postType":"article","hubs":[{"id":"22970","alias":"onlinepatent","type":"corporative","title":"Блог компании Online patent","titleHtml":"Блог компании Online patent","isProfiled":false},{"id":"50","alias":"infosecurity","type":"collective","title":"Информационная безопасность","titleHtml":"Информационная безопасность","isProfiled":true},{"id":"20738","alias":"business-laws","type":"collective","title":"Законодательство в IT","titleHtml":"Законодательство в IT","isProfiled":false},{"id":"17681","alias":"db_admins","type":"collective","title":"Базы данных","titleHtml":"Базы данных","isProfiled":true},{"id":"18792","alias":"backup","type":"collective","title":"Резервное копирование","titleHtml":"Резервное копирование","isProfiled":true}],"author":{"alias":"gregyku","fullname":"Елена Шаптраева","avatarUrl":null}}],"period":"day"},"topAuthors":{"order":4,"items":[{"alias":"zarazaexe","fullname":"zarazaex","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F0b4\u002F369\u002F5ad\u002F0b43695adfddd8f671250732ce278ffc.png"},{"alias":"sogonov","fullname":"sogonov","avatarUrl":null},{"alias":"linux-over","fullname":"Linux Over","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Ff48\u002F766\u002Fe48\u002Ff48766e480547ae318db42b48838c471.jpeg"},{"alias":"Wendor","fullname":"Антон","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fd93\u002F78d\u002Fa35\u002Fd9378da3548a74aae1bbdeff57a6642d.jpg"},{"alias":"fox52","fullname":"Aleksei Fokin","avatarUrl":null},{"alias":"PetrVasilchenko","fullname":"Пётр Васильченко","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F7a1\u002F07d\u002F1d8\u002F7a107d1d8fe73d6db29524aceec4ff7c.png"},{"alias":"66demon666","fullname":"Паршутин Юрий","avatarUrl":null},{"alias":"c3ph3us","fullname":"Сергей","avatarUrl":null}]},"topCompanies":{"order":5,"items":[{"alias":"pt","title":"Positive Technologies","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F657\u002F18d\u002Fc6c\u002F65718dc6c469e45ce9197f8ad386ad9f.png"},{"alias":"ruvds","title":"RUVDS.com","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F608\u002Ff02\u002F206\u002F608f0220675e20da793aa1974a1a0a2e.png"},{"alias":"bastion","title":"Бастион","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002Fb60\u002F2e2\u002Fcb2\u002Fb602e2cb2a87d551ab1179809c93dcec.png"},{"alias":"garda","title":"Компания «Гарда»","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002Fb7a\u002F949\u002Fc6f\u002Fb7a949c6f68f2f6613781da9e815a149.png"},{"alias":"securityvison","title":"Security Vision","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F834\u002Faa5\u002F856\u002F834aa58568c7c5258c99b6f79c678f85.jpg"},{"alias":"infowatch","title":"InfoWatch","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F7aa\u002Fb1d\u002F060\u002F7aab1d060bcae64eb47a4c2c95c9a449.png"},{"alias":"kaspersky","title":"«Лаборатория Касперского»","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F8a6\u002F991\u002F272\u002F8a69912727889ab6bdd5244d5f2e4a2c.png"},{"alias":"ussc","title":"Уральский центр систем безопасности","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F9df\u002F471\u002F5c5\u002F9df4715c5b3a628c066893170d25891e.png"}]},"banner":{"order":6}},"hardware_and_gadgets":{"technologies":{"order":1,"items":[{"alias":"python","title":"Python","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F1c6\u002F724\u002F437\u002F1c6724437b83f3d71abd08e5c2877a7a.png"},{"alias":"c","title":"C","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fb5e\u002F3dc\u002Ff5c\u002Fb5e3dcf5c143cc1a3e442e3401e77735.png"},{"alias":"raspberrypi","title":"Raspberry Pi","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F337\u002F210\u002Fc0f\u002F337210c0f187ef2605bc9335bb74ae0c.png"},{"alias":"win_dev","title":"Windows","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F303\u002F8bf\u002F46a\u002F3038bf46a77eed6f51b84c8a9cf87076.png"},{"alias":"gpgpu","title":"GPGPU","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F103\u002Fd0d\u002F83c\u002F103d0d83cf512092f5fe28b02def0c00.png"},{"alias":"linux_dev","title":"Linux","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fe35\u002F838\u002Fe14\u002Fe35838e1411346ef268e92bdf57603e7.png"},{"alias":"csharp","title":"C#","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fb99\u002Fb7d\u002F3e7\u002Fb99b7d3e7a997b20d86689f51105623d.png"},{"alias":"arduino","title":"Arduino","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fa6e\u002F06b\u002F6b2\u002Fa6e06b6b21a9fff92bcc5f8a1a0e6d5b.png"}]},"topics":{"order":2,"items":[{"alias":"electronics","title":"Производство и разработка электроники","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F269\u002F015\u002Ff78\u002F269015f78421d3d8efa321a6f81574f1.png"},{"alias":"hardware","title":"Компьютерное железо","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fgeektimes\u002Fhub\u002F57d\u002F7b5\u002F365\u002F57d7b53659e90f8971cf34081078d1e4.png"},{"alias":"antikvariat","title":"Старое железо","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fgeektimes\u002Fhub\u002F064\u002Fe29\u002F0f4\u002F064e290f484ad3bf745ebe9163b9276a.png"},{"alias":"gadgets","title":"Гаджеты","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F36c\u002F373\u002F81f\u002F36c37381fee91b25ca2f6bf16f230889.png"},{"alias":"cpu","title":"Процессоры","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fgeektimes\u002Fhub\u002Fe65\u002Ff3e\u002F98c\u002Fe65f3e98c20a32b1ba26e01125a2e333.png"},{"alias":"controllers","title":"Программирование микроконтроллеров","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F64f\u002Fa1d\u002Fc30\u002F64fa1dc30e4a6c3ae14304bca2dac377.png"},{"alias":"circuit-design","title":"Схемотехника","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fa23\u002F82c\u002Fd85\u002Fa2382cd85fc6700a50a7544951f9895c.png"},{"alias":"network_standarts","title":"Стандарты связи","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F4b3\u002F879\u002F31f\u002F4b387931f3cae13084e05dbbd3083ab8.png"}]},"topPosts":{"order":3,"items":[{"id":"1032778","isCorporative":false,"lang":"ru","titleHtml":"Снимаем показания счётчика воды «Бетар» по RS-485 и «МИР» по BLE с помощью ESP32","postType":"article","hubs":[{"id":"21474","alias":"arduino","type":"collective","title":"Arduino","titleHtml":"Arduino","isProfiled":true},{"id":"17201","alias":"wireless","type":"collective","title":"Беспроводные технологии","titleHtml":"Беспроводные технологии","isProfiled":true},{"id":"22113","alias":"engineering_systems","type":"collective","title":"Инженерные системы","titleHtml":"Инженерные системы","isProfiled":true},{"id":"18816","alias":"industrial_control_system","type":"collective","title":"Промышленное программирование","titleHtml":"Промышленное программирование","isProfiled":true},{"id":"21966","alias":"home_automation","type":"collective","title":"Умный дом","titleHtml":"Умный дом","isProfiled":false}],"author":{"alias":"Maikl747","fullname":"Maikl747","avatarUrl":null}},{"id":"1033766","isCorporative":false,"lang":"ru","titleHtml":"Запуск Vivado 2019.1 на Orange Pi 3 LTS  через QEMU","postType":"article","hubs":[{"id":"19733","alias":"fpga","type":"collective","title":"FPGA","titleHtml":"FPGA","isProfiled":true},{"id":"21976","alias":"DIY","type":"collective","title":"DIY или Сделай сам","titleHtml":"DIY или Сделай сам","isProfiled":false},{"id":"19727","alias":"linux_dev","type":"collective","title":"Linux","titleHtml":"Linux","isProfiled":true}],"author":{"alias":"yamifa_1234","fullname":"Михаил","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F147\u002F925\u002Fd52\u002F147925d527a593a434ac84e5afd7bf78.jpg"}}],"period":"day"},"topAuthors":{"order":4,"items":[{"alias":"MaFrance351","fullname":"Лев","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fd62\u002Fa68\u002F18b\u002Fd62a6818b1e050ee430ef7101f635534.jpg"},{"alias":"monobogdan","fullname":"Богдан","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F47b\u002F885\u002Fa9d\u002F47b885a9d839456736ae10b04a0c0011.jpg"},{"alias":"Tirarex","fullname":"Tirarex","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F9b1\u002F550\u002F4a4\u002F9b15504a4e845078f9ac3f5034dd1aa6.jpg"},{"alias":"skovalev","fullname":"Сергей Ковалёв","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F277\u002F5f0\u002F87b\u002F2775f087b1c04e1e756b8f68fea09858.jpg"},{"alias":"t3chnowolf","fullname":"Дарья","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F6ca\u002Fa8b\u002Fde1\u002F6caa8bde15b8663ca0ede9f9cc8ec7cb.jpg"},{"alias":"AriaQA","fullname":"Анна Гамгия","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fdba\u002Fd66\u002F100\u002Fdbad66100e88da60a32d20b17e7b81df.png"},{"alias":"andreyzaostrovnykh","fullname":"Андрей","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F532\u002F200\u002F766\u002F53220076630c1768cd5f0320fc0fdb85.png"},{"alias":"MechNIX","fullname":"Александр","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F25a\u002Ff63\u002Fdbf\u002F25af63dbf150c0f4b97eadbc6b69802f.jpg"}]},"topCompanies":{"order":5,"items":[{"alias":"selectel","title":"Selectel","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F4b4\u002F652\u002F7f5\u002F4b46527f577e69b1f32a84700b2fed33.png"},{"alias":"timeweb","title":"Timeweb Cloud","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F857\u002Ffb7\u002F96e\u002F857fb796e1a82ed82762c60a09acba32.png"},{"alias":"ruvds","title":"RUVDS.com","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F608\u002Ff02\u002F206\u002F608f0220675e20da793aa1974a1a0a2e.png"},{"alias":"ru_mts","title":"МТС","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F70c\u002Fa67\u002Fcc7\u002F70ca67cc7ecfa889ded9b51efa3e70d3.png"},{"alias":"yadro","title":"YADRO","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002Fde0\u002Fe6c\u002F373\u002Fde0e6c373cec39eb35ec96f508331ad7.png"},{"alias":"beget","title":"Beget","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F077\u002F521\u002Fe04\u002F077521e04dc7bedc96dc729529e31ea8.png"},{"alias":"x-com","title":"Группа компаний X-Com","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F7f4\u002Fa6b\u002F24e\u002F7f4a6b24ecce305556e439f09587d2e1.jpg"},{"alias":"eremexru","title":"ЭРЕМЕКС","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F5a1\u002F4d4\u002F00e\u002F5a14d400e18e2012cae350f01fbda8c4.png"}]},"banner":{"order":6}},"quality_assurance":{"technologies":{"order":1,"items":[{"alias":"python","title":"Python","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F1c6\u002F724\u002F437\u002F1c6724437b83f3d71abd08e5c2877a7a.png"},{"alias":"java","title":"Java","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F4c9\u002F821\u002Fd2a\u002F4c9821d2ad5a9844eb6d0f8c77991772.png"},{"alias":"go","title":"Go","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fa10\u002Fc5c\u002F626\u002Fa10c5c62685d9a7d2964993daf6958c3.png"},{"alias":"typescript","title":"TypeScript","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fcab\u002F7bb\u002F7b8\u002Fcab7bb7b8a279ee584926ced8e87cb15.png"},{"alias":"firefox","title":"Firefox","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fa2a\u002Ffee\u002Fab3\u002Fa2afeeab33c24e26b9e56c28ad6634be.png"},{"alias":"javascript","title":"JavaScript","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F2b3\u002F99b\u002F964\u002F2b399b964d456f3ad1bfddc0346b60d4.png"},{"alias":"kotlin","title":"Kotlin","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F041\u002F637\u002F60f\u002F04163760f28104a45ad9ca39cb25f194.png"},{"alias":"php","title":"PHP","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F98a\u002F7a8\u002F831\u002F98a7a88319d5644cdc627b5e04b47d0f.png"}]},"topics":{"order":2,"items":[{"alias":"it_testing","title":"Тестирование IT-систем","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F88c\u002Fd88\u002Fdc5\u002F88cd88dc5a3ea03d8d8e3f73bd35aafe.png"},{"alias":"web_testing","title":"Тестирование веб-сервисов","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fdec\u002F8aa\u002F561\u002Fdec8aa561fbd799fc4f1da65ee0a3b21.png"},{"alias":"mobile_testing","title":"Тестирование мобильных приложений","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F6da\u002F820\u002F505\u002F6da82050584fd944fa4888a3bd761b38.png"},{"alias":"career","title":"Карьера в IT-индустрии","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fcab\u002Ff82\u002F067\u002Fcabf82067c7be08c90a5903f860c9abf.png"},{"alias":"game_testing","title":"Тестирование игр","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F30a\u002Fec0\u002F53e\u002F30aec053eecd1f5555a8ba577a3b6266.png"},{"alias":"complete_code","title":"Качество кода","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F8dc\u002F2ea\u002Fa52\u002F8dc2eaa523bbf789e99d8c1be5a1ed34.png"},{"alias":"infosecurity","title":"Информационная безопасность","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F135\u002F2db\u002F187\u002F1352db18765addaa6e0b2ac013d386d8.png"},{"alias":"open_source","title":"Open source","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fdc9\u002Fdbe\u002Fe1d\u002Fdc9dbee1d24188b925e86946bafb15c7.png"}]},"topPosts":{"order":3,"items":[{"id":"1033658","isCorporative":false,"lang":"ru","titleHtml":"postman2pytest: как превратить Postman-коллекцию в pytest-набор за одну команду","postType":"article","hubs":[{"id":"210","alias":"it_testing","type":"collective","title":"Тестирование IT-систем","titleHtml":"Тестирование IT-систем","isProfiled":true},{"id":"340","alias":"python","type":"collective","title":"Python","titleHtml":"Python","isProfiled":true},{"id":"19279","alias":"web_testing","type":"collective","title":"Тестирование веб-сервисов","titleHtml":"Тестирование веб-сервисов","isProfiled":true},{"id":"144","alias":"open_source","type":"collective","title":"Open source","titleHtml":"Open source","isProfiled":true}],"author":{"alias":"golikovichev","fullname":"Голиков Михаил","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fa3c\u002F4cf\u002F196\u002Fa3c4cf196e805c06eea6f8cd170c039e.jpeg"}},{"id":"1026818","isCorporative":true,"lang":"ru","titleHtml":"Почему классический подход к QA больше не работает (и виновата ли в этом эпоха ИИ)","postType":"article","hubs":[{"id":"21052","alias":"otus","type":"corporative","title":"Блог компании OTUS","titleHtml":"Блог компании OTUS","isProfiled":false},{"id":"21922","alias":"artificial_intelligence","type":"collective","title":"Искусственный интеллект","titleHtml":"Искусственный интеллект","isProfiled":false},{"id":"210","alias":"it_testing","type":"collective","title":"Тестирование IT-систем","titleHtml":"Тестирование IT-систем","isProfiled":true},{"id":"19279","alias":"web_testing","type":"collective","title":"Тестирование веб-сервисов","titleHtml":"Тестирование веб-сервисов","isProfiled":true}],"author":{"alias":"SiYa_renko","fullname":"Анастасия Нечепоренко","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F5bc\u002F53e\u002Fea0\u002F5bc53eea00ac1a71f315695a3c43b3be.jpeg"}}],"period":"day"},"topAuthors":{"order":4,"items":[{"alias":"inetstar","fullname":"Сергей Ю. Каменев","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fca0\u002F010\u002Fde7\u002Fca0010de71e5ed548946e7e6dab04fe5.jpg"},{"alias":"makurea","fullname":"makurea","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fbdb\u002Fd90\u002F18f\u002Fbdbd9018f6895cb92430e8c34490e352.jpeg"},{"alias":"Shny","fullname":"Ольга Шн","avatarUrl":null},{"alias":"sound_right","fullname":"Никита Филонов","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Face\u002F83b\u002Fca8\u002Face83bca837fb4ab28ae8b817b49c511.jpg"},{"alias":"nomanhero","fullname":"nomanhero","avatarUrl":null},{"alias":"V-Belyaev","fullname":"Виктор Беляев","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fac1\u002Fe93\u002Fa4b\u002Fac1e93a4bca3478a7e906d0b16cc0a2b.jpg"},{"alias":"Amatlakhova","fullname":"Алина Матлахова","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F7bb\u002Ffd0\u002F1e6\u002F7bbfd01e6abc8bbd874beeb65faf7195.png"},{"alias":"Bright_Translate","fullname":"Дмитрий Брайт","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Ff9c\u002Fff9\u002F7d9\u002Ff9cff97d9c0677af28dab451897f88e4.jpg"}]},"topCompanies":{"order":5,"items":[{"alias":"avito","title":"AvitoTech","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F7ba\u002F74f\u002Fb37\u002F7ba74fb3764caa1fb6865aaa6b6aa4bf.png"},{"alias":"ruvds","title":"RUVDS.com","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F608\u002Ff02\u002F206\u002F608f0220675e20da793aa1974a1a0a2e.png"},{"alias":"k2tech","title":"К2Тех","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002Fcd9\u002Fc6c\u002Fdff\u002Fcd9c6cdff9d42e32f0d7f1f761b67f2b.jpg"},{"alias":"sberbank","title":"Сбер","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F9db\u002F3c1\u002Fec0\u002F9db3c1ec02265b8bcbfdfb0d23d8b9f2.jpg"},{"alias":"ostrovok","title":"Островок!","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F71d\u002Fe1f\u002F57e\u002F71de1f57eecb3ad969de3d2954632ebe.png"},{"alias":"rostelecom","title":"Ростелеком","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F46b\u002F563\u002F61c\u002F46b56361cccfbaf7a353b5de3031b5f6.png"},{"alias":"ispring","title":"iSpring","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F189\u002F171\u002Fea9\u002F189171ea9041e439cf8201f5d478a02f.png"},{"alias":"infowatch","title":"InfoWatch","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F7aa\u002Fb1d\u002F060\u002F7aab1d060bcae64eb47a4c2c95c9a449.png"}]},"banner":{"order":6}},"mobile_development":{"technologies":{"order":1,"items":[{"alias":"android_dev","title":"Android","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fdeb\u002F535\u002Fb54\u002Fdeb535b54338aa5a202a516dee792556.png"},{"alias":"flutter","title":"Flutter","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F63b\u002F728\u002Fb76\u002F63b728b76ec18862a5454a684509940b.png"},{"alias":"dart","title":"Dart","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F41e\u002F671\u002F2dd\u002F41e6712dd7d298077553efff8562bd73.png"},{"alias":"swift","title":"Swift","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fce4\u002Faee\u002F96a\u002Fce4aee96ac5cce42451f98cf8ce12031.png"},{"alias":"ios_dev","title":"iOS","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F5a4\u002F9bc\u002F47a\u002F5a49bc47adf8de9e59bbf0a78b821ef9.png"},{"alias":"cpp","title":"C++","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F89a\u002Fc44\u002F09e\u002F89ac4409ea406d835a82383fa53fcda7.png"},{"alias":"kotlin","title":"Kotlin","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F041\u002F637\u002F60f\u002F04163760f28104a45ad9ca39cb25f194.png"},{"alias":"elm","title":"Elm","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F3de\u002F6b2\u002F742\u002F3de6b27422d1f58ae795ce6dcc2af9a3.png"}]},"topics":{"order":2,"items":[{"alias":"mobile_dev","title":"Разработка мобильных приложений","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F94d\u002Fb18\u002Fbf9\u002F94db18bf9b8a7fc678b5be14f0f0e296.png"},{"alias":"career","title":"Карьера в IT-индустрии","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fcab\u002Ff82\u002F067\u002Fcabf82067c7be08c90a5903f860c9abf.png"},{"alias":"open_source","title":"Open source","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fdc9\u002Fdbe\u002Fe1d\u002Fdc9dbee1d24188b925e86946bafb15c7.png"},{"alias":"mobile_testing","title":"Тестирование мобильных приложений","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F6da\u002F820\u002F505\u002F6da82050584fd944fa4888a3bd761b38.png"},{"alias":"lib","title":"Профессиональная литература","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F80c\u002F5da\u002Fd84\u002F80c5dad8448bd8c33ea158596ed000d7.png"},{"alias":"artificial_intelligence","title":"Искусственный интеллект","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Ff01\u002F3a4\u002F009\u002Ff013a40094ae05299b2b05ef05e7f981.png"},{"alias":"instant_messaging","title":"Мессенджеры","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F910\u002F615\u002Fc83\u002F910615c83444f1344fc92bb8de0bb9bb.png"},{"alias":"business-laws","title":"Законодательство в IT","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F7e3\u002Ffbd\u002F404\u002F7e3fbd40404e7a51fafad53018d606c8.png"}]},"topPosts":{"order":3,"items":[{"id":"1033830","isCorporative":false,"lang":"ru","titleHtml":"Я реализовал Double Ratchet в React Native мессенджере. Разбор протокола и кода","postType":"article","hubs":[{"id":"118","alias":"crypto","type":"collective","title":"Криптография","titleHtml":"Криптография","isProfiled":true},{"id":"357","alias":"javascript","type":"collective","title":"JavaScript","titleHtml":"JavaScript","isProfiled":true},{"id":"21370","alias":"typescript","type":"collective","title":"TypeScript","titleHtml":"TypeScript","isProfiled":true},{"id":"6345","alias":"mobile_dev","type":"collective","title":"Разработка мобильных приложений","titleHtml":"Разработка мобильных приложений","isProfiled":true},{"id":"23456","alias":"react-native","type":"collective","title":"React Native","titleHtml":"React Native","isProfiled":true}],"author":{"alias":"niktomimo","fullname":"Виктор","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F622\u002F593\u002F818\u002F622593818984c3cae30ea44b47feb0b8.jpeg"}},{"id":"1033930","isCorporative":false,"lang":"ru","titleHtml":"Как я сделал групповые звонки в React Native мессенджере: WebRTC, CallKit и грабли production'а","postType":"article","hubs":[{"id":"21370","alias":"typescript","type":"collective","title":"TypeScript","titleHtml":"TypeScript","isProfiled":true},{"id":"23456","alias":"react-native","type":"collective","title":"React Native","titleHtml":"React Native","isProfiled":true},{"id":"357","alias":"javascript","type":"collective","title":"JavaScript","titleHtml":"JavaScript","isProfiled":true},{"id":"18768","alias":"webgl","type":"collective","title":"WebGL","titleHtml":"WebGL","isProfiled":true},{"id":"6345","alias":"mobile_dev","type":"collective","title":"Разработка мобильных приложений","titleHtml":"Разработка мобильных приложений","isProfiled":true}],"author":{"alias":"niktomimo","fullname":"Виктор","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F622\u002F593\u002F818\u002F622593818984c3cae30ea44b47feb0b8.jpeg"}}],"period":"day"},"topAuthors":{"order":4,"items":[{"alias":"vital_pavlenko","fullname":"Павленко Виталий","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F2fe\u002F14e\u002F041\u002F2fe14e0415fc826c83b7dfda4e7d5eb3.jpg"},{"alias":"unreallx","fullname":"unreallx","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F610\u002Feea\u002F02b\u002F610eea02b10dfc2b02c090f5df6a3266.jpeg"},{"alias":"hdgtail","fullname":"\u002F\u002F GEEK EVENING","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fff7\u002F5c2\u002Fe8b\u002Fff75c2e8b12ff107dab007e1569918da.jpg"},{"alias":"sav42","fullname":"Andrey Sikerin","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fff4\u002F05f\u002F536\u002Fff405f5369f0766e7e5cacc4c761b00d.png"},{"alias":"amidexe","fullname":"Дмитрий","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F07e\u002F09d\u002Fe74\u002F07e09de74c70902f71693ad9d70443b0.jpeg"},{"alias":"ramgab","fullname":"Рамиль Габдрахманов","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fa89\u002Fce6\u002F4f4\u002Fa89ce64f46bbb4b256edc69031103b65.jpeg"},{"alias":"asevko","fullname":"Aliaksei Siauko","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F591\u002F64b\u002F2ad\u002F59164b2ad0ffffe6caa5d57671446d0a.jpeg"},{"alias":"BHV_publishing","fullname":"Издательство БХВ (BHV)","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F153\u002Fa51\u002F1f6\u002F153a511f65c120c8961e52af8c0b8fdb.jpeg"}]},"topCompanies":{"order":5,"items":[{"alias":"yandex","title":"Яндекс","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002Fb02\u002Fd9b\u002F1d4\u002Fb02d9b1d4a6e64ff069e2ab32fdedae2.png"},{"alias":"selectel","title":"Selectel","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F4b4\u002F652\u002F7f5\u002F4b46527f577e69b1f32a84700b2fed33.png"},{"alias":"yandex_cloud_and_infra","title":"Yandex Cloud & Yandex Infrastructure","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002Fa68\u002F70f\u002Fc0e\u002Fa6870fc0ee3c00173a97dc6abdb8cb9b.png"},{"alias":"bhv_publishing","title":"Издательство БХВ","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F608\u002Fa14\u002F224\u002F608a14224575ca21ca07d60a5b2adac7.jpeg"},{"alias":"ssp-soft","title":"SSP SOFT","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F6ed\u002F053\u002F66b\u002F6ed05366bac2e3e82f52f26e1608b5b1.png"},{"alias":"yadro","title":"YADRO","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002Fde0\u002Fe6c\u002F373\u002Fde0e6c373cec39eb35ec96f508331ad7.png"},{"alias":"1forma","title":"Первая Форма","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002Fe1b\u002F8d2\u002F6e6\u002Fe1b8d26e6398a8393501062ab3a05a36.png"},{"alias":"bcs_company","title":"БКС Финтех","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002Fda8\u002F1b5\u002F463\u002Fda81b54638cc960762c9cb5ec8eae610.png"}]},"banner":{"order":6}},"top_management":{"technologies":{"order":1,"items":[]},"topics":{"order":2,"items":[{"alias":"career","title":"Карьера в IT-индустрии","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fcab\u002Ff82\u002F067\u002Fcabf82067c7be08c90a5903f860c9abf.png"},{"alias":"business-laws","title":"Законодательство в IT","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F7e3\u002Ffbd\u002F404\u002F7e3fbd40404e7a51fafad53018d606c8.png"},{"alias":"hr_management","title":"Управление персоналом","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F2c0\u002Fc6b\u002F86a\u002F2c0c6b86a9011cf811ce4b6820865115.png"},{"alias":"artificial_intelligence","title":"Искусственный интеллект","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Ff01\u002F3a4\u002F009\u002Ff013a40094ae05299b2b05ef05e7f981.png"},{"alias":"productpm","title":"Управление продуктом","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fb7e\u002F34b\u002F715\u002Fb7e34b7155812c7fd2aa5288b620ce25.png"},{"alias":"pm","title":"Управление проектами","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F94a\u002Fb35\u002F1ad\u002F94ab351adac61ac363e9de79c1382a67.png"},{"alias":"community_management","title":"Управление сообществом","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F85d\u002F0ba\u002F490\u002F85d0ba490c6cb811701c16f899729b8d.png"},{"alias":"soft","title":"Софт","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fgeektimes\u002Fhub\u002Fc08\u002Fac8\u002Fabd\u002Fc08ac8abdf8edc624ac48e8411851998.png"}]},"topPosts":{"order":3,"items":[{"id":"1033628","isCorporative":false,"lang":"ru","titleHtml":"Почему сильный сотрудник в новой компании может не давать результат (и это не его вина)","postType":"article","hubs":[{"id":"20736","alias":"hr_management","type":"collective","title":"Управление персоналом","titleHtml":"Управление персоналом","isProfiled":true},{"id":"20740","alias":"career","type":"collective","title":"Карьера в IT-индустрии","titleHtml":"Карьера в IT-индустрии","isProfiled":false}],"author":{"alias":"EugeneSizikov","fullname":"Сизиков Евгений","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F803\u002Ff19\u002Fd02\u002F803f19d0244b0835de8b939795a314e8.jpeg"}}],"period":"day"},"topAuthors":{"order":4,"items":[{"alias":"alexeybashuk","fullname":"Алексей Башук","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fe12\u002F9c7\u002F7e4\u002Fe129c77e402dd26e366e33f66f4bf3cc.png"},{"alias":"1forma","fullname":"1forma","avatarUrl":null},{"alias":"go_shan","fullname":"Гоша","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fb9f\u002Fbdc\u002F182\u002Fb9fbdc1825bf375808d2c43579e632c5.jpeg"},{"alias":"vada","fullname":"Вадим Д.","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F5a7\u002F996\u002Fd26\u002F5a7996d26c80c4581a9a0e783646940d.jpg"},{"alias":"Bright_Translate","fullname":"Дмитрий Брайт","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Ff9c\u002Fff9\u002F7d9\u002Ff9cff97d9c0677af28dab451897f88e4.jpg"},{"alias":"mr-powerlifter","fullname":"Vladislav Noskovets","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fccd\u002Fa9e\u002F41e\u002Fccda9e41eecdd408a3aa0aa23f7db0a3.jpg"},{"alias":"Alex-sulimov","fullname":"Алексей Сулимов","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F216\u002Fe5d\u002Fd51\u002F216e5dd512d1670307fe64c9d2c5612d.jpeg"},{"alias":"Kot_begemot13","fullname":"Александр Пищальников","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F9c8\u002F5d2\u002F00f\u002F9c85d200f16907b23e862b785fb665dd.png"}]},"topCompanies":{"order":5,"items":[{"alias":"infostart","title":"INFOSTART.RU","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002Ffa9\u002Fb49\u002Ff4b\u002Ffa9b49f4b4b06786760e500e02593912.png"},{"alias":"1forma","title":"Первая Форма","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002Fe1b\u002F8d2\u002F6e6\u002Fe1b8d26e6398a8393501062ab3a05a36.png"},{"alias":"avito","title":"AvitoTech","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F7ba\u002F74f\u002Fb37\u002F7ba74fb3764caa1fb6865aaa6b6aa4bf.png"},{"alias":"rshb","title":"РСХБ.Цифра (Россельхозбанк)","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002Fbe1\u002F662\u002F681\u002Fbe1662681fbd8bfedaae1206d2a6a19c.png"},{"alias":"ssp-soft","title":"SSP SOFT","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F6ed\u002F053\u002F66b\u002F6ed05366bac2e3e82f52f26e1608b5b1.png"},{"alias":"alp_itsm","title":"ALP ITSM","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F9a0\u002F24c\u002F85e\u002F9a024c85eb0a4254cd955a62237a59c8.png"},{"alias":"directum","title":"Directum","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F896\u002F94a\u002Fdf9\u002F89694adf9131ac7b8f0e797beb5bde28.png"},{"alias":"productradar","title":"Product Radar","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002Fca5\u002Fb5c\u002Fc70\u002Fca5b5cc70b2a17fc1176aabc8c0f7c16.png"}]},"banner":{"order":6}},"industrial_engineering":{"technologies":{"order":1,"items":[{"alias":"python","title":"Python","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F1c6\u002F724\u002F437\u002F1c6724437b83f3d71abd08e5c2877a7a.png"},{"alias":"arduino","title":"Arduino","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fa6e\u002F06b\u002F6b2\u002Fa6e06b6b21a9fff92bcc5f8a1a0e6d5b.png"},{"alias":"fortran","title":"Fortran","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F863\u002Fcdc\u002F13c\u002F863cdc13c76d403bb4ca6f9030819c3b.png"},{"alias":"scada","title":"SCADA","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F75e\u002F490\u002Fc5d\u002F75e490c5d0e49db2efc2142b306ca297.png"},{"alias":"matlab","title":"Matlab","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fb81\u002Fc17\u002F628\u002Fb81c176283dbfd7c8295f89899ba8d14.png"},{"alias":"android_dev","title":"Android","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fdeb\u002F535\u002Fb54\u002Fdeb535b54338aa5a202a516dee792556.png"},{"alias":"cpp","title":"C++","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F89a\u002Fc44\u002F09e\u002F89ac4409ea406d835a82383fa53fcda7.png"},{"alias":"brainfuck","title":"Brainfuck","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Ff44\u002Ff96\u002F7ca\u002Ff44f967cae7b94b9e11d1311c13f8adf.png"}]},"topics":{"order":2,"items":[{"alias":"engineering_systems","title":"Инженерные системы","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fe8a\u002F9ed\u002Fc7d\u002Fe8a9edc7d8b2a500fbe6a4283f718876.png"},{"alias":"controllers","title":"Программирование микроконтроллеров","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F64f\u002Fa1d\u002Fc30\u002F64fa1dc30e4a6c3ae14304bca2dac377.png"},{"alias":"artificial_intelligence","title":"Искусственный интеллект","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Ff01\u002F3a4\u002F009\u002Ff013a40094ae05299b2b05ef05e7f981.png"},{"alias":"reverse-engineering","title":"Реверс-инжиниринг","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Ffd1\u002F301\u002F70b\u002Ffd130170b8dcf435049bf9194d50dd3c.png"},{"alias":"electronics","title":"Производство и разработка электроники","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F269\u002F015\u002Ff78\u002F269015f78421d3d8efa321a6f81574f1.png"},{"alias":"industrial_control_system","title":"Промышленное программирование","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F03c\u002Fd64\u002F48a\u002F03cd6448a19ceced1e031242169a8eb5.png"},{"alias":"energy","title":"Энергия и элементы питания","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F4da\u002Fe12\u002F259\u002F4dae12259c78a643a14f66088d027a90.png"},{"alias":"lasers","title":"Лазеры","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fgeektimes\u002Fhub\u002Fa02\u002F87e\u002F5f8\u002Fa0287e5f80109daa9c3311b75aa15d74.png"}]},"topPosts":{"order":3,"items":[{"id":"1033702","isCorporative":false,"lang":"ru","titleHtml":"Trit-81: Протокол распределенной реальности и нативная оптическая шина","postType":"article","hubs":[{"id":"22014","alias":"futurenow","type":"collective","title":"Будущее здесь","titleHtml":"Будущее здесь","isProfiled":false},{"id":"19259","alias":"closet","type":"collective","title":"Чулан","titleHtml":"Чулан","isProfiled":false},{"id":"21472","alias":"circuit-design","type":"collective","title":"Схемотехника","titleHtml":"Схемотехника","isProfiled":true},{"id":"17123","alias":"network_technologies","type":"collective","title":"Сетевые технологии","titleHtml":"Сетевые технологии","isProfiled":true},{"id":"5767","alias":"system_programming","type":"collective","title":"Системное программирование","titleHtml":"Системное программирование","isProfiled":true}],"author":{"alias":"RayRom","fullname":"Ray Romanov","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F5d2\u002F658\u002F1cf\u002F5d26581cf12887bf1d43948eb6eb5b1c.jpg"}},{"id":"1033762","isCorporative":false,"lang":"ru","titleHtml":"Электроэнергия как основной критерий выбора площадок для ЦОД","postType":"article","hubs":[{"id":"21914","alias":"energy","type":"collective","title":"Энергия и элементы питания","titleHtml":"Энергия и элементы питания","isProfiled":false},{"id":"19439","alias":"machine_learning","type":"collective","title":"Машинное обучение","titleHtml":"Машинное обучение","isProfiled":true},{"id":"19197","alias":"dwh","type":"collective","title":"Хранение данных","titleHtml":"Хранение данных","isProfiled":true},{"id":"21922","alias":"artificial_intelligence","type":"collective","title":"Искусственный интеллект","titleHtml":"Искусственный интеллект","isProfiled":false},{"id":"21898","alias":"hardware","type":"collective","title":"Компьютерное железо","titleHtml":"Компьютерное железо","isProfiled":false}],"author":{"alias":"valeryan86","fullname":"Валерий","avatarUrl":null}}],"period":"day"},"topAuthors":{"order":4,"items":[{"alias":"AndreyWinter","fullname":"Андрей","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F4ea\u002Fb5e\u002F923\u002F4eab5e9237f59a58b21048cc0979e908.gif"},{"alias":"chi007","fullname":"Александр","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F074\u002Fe4a\u002F3a6\u002F074e4a3a65477eaadcaeceb7aabe2381.jpeg"},{"alias":"nckma","fullname":"Николай","avatarUrl":null},{"alias":"gliderman","fullname":"Евгений Ледванов","avatarUrl":null},{"alias":"compvisionsys","fullname":"Дмитрий Степанов","avatarUrl":null},{"alias":"kardanShurup","fullname":"Кардан","avatarUrl":null},{"alias":"Lulu_Luna","fullname":"Lulu_Luna","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fb06\u002Fc7e\u002F298\u002Fb06c7e298614eec4e02d8a7ea0a7d991.jpeg"},{"alias":"Artem_Rakhmeev","fullname":"Артём Рахмеев","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fd1a\u002F5e1\u002F9ce\u002Fd1a5e19cecac757aa9b9023bb9ee2dfa.jpeg"}]},"topCompanies":{"order":5,"items":[{"alias":"ru_mts","title":"МТС","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F70c\u002Fa67\u002Fcc7\u002F70ca67cc7ecfa889ded9b51efa3e70d3.png"},{"alias":"lanit","title":"ГК ЛАНИТ","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F933\u002Fcc3\u002Fd68\u002F933cc3d68881b38696957eead6f4de36.jpg"},{"alias":"tbank","title":"Т-Банк","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002Fc6c\u002F69c\u002F4d8\u002Fc6c69c4d8957fc74bb084f1bf0b7265e.jpeg"},{"alias":"nlmk","title":"НЛМК ИТ","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002Fa42\u002F314\u002F271\u002Fa423142717bbdd59bae93726015c7e31.png"},{"alias":"yadro","title":"YADRO","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002Fde0\u002Fe6c\u002F373\u002Fde0e6c373cec39eb35ec96f508331ad7.png"},{"alias":"infostart","title":"INFOSTART.RU","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002Ffa9\u002Fb49\u002Ff4b\u002Ffa9b49f4b4b06786760e500e02593912.png"},{"alias":"ascon","title":"АСКОН","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F588\u002Fbb3\u002F2fd\u002F588bb32fd055cfe5d95b2d08341c6a1b.png"},{"alias":"evraz","title":"ЕВРАЗ","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002Fac1\u002F223\u002F55d\u002Fac122355d8a014c4877a64c57da46db3.png"}]},"banner":{"order":6}},"support":{"technologies":{"order":1,"items":[{"alias":"postgresql","title":"PostgreSQL","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F391\u002F633\u002F8e2\u002F3916338e24104572809b971807686a8f.png"},{"alias":"mssql","title":"Microsoft SQL Server","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fe19\u002F4b2\u002F55a\u002Fe194b255ac49ea6fbed18aa5b070dbd3.png"},{"alias":"edge","title":"Microsoft Edge","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F1be\u002F981\u002Fc79\u002F1be981c79360b47cfbd430a73066887e.png"},{"alias":"ipv6","title":"IPv6","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fd46\u002F02a\u002F36f\u002Fd4602a36f6128c6cb1ab713bcb288d80.png"},{"alias":"xslt","title":"XSLT","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F686\u002Ff02\u002F3f3\u002F686f023f340c3fd07154241b95e97164.png"},{"alias":"win_dev","title":"Windows","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F303\u002F8bf\u002F46a\u002F3038bf46a77eed6f51b84c8a9cf87076.png"},{"alias":"android_dev","title":"Android","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fdeb\u002F535\u002Fb54\u002Fdeb535b54338aa5a202a516dee792556.png"},{"alias":"oracle","title":"Oracle","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fc9d\u002F1a4\u002Fb6f\u002Fc9d1a4b6f8257d96fbecc20a2efa199c.png"}]},"topics":{"order":2,"items":[{"alias":"it-infrastructure","title":"IT-инфраструктура","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F594\u002F546\u002F45b\u002F59454645b38d9a58a92e6870133ae8e6.png"},{"alias":"it_testing","title":"Тестирование IT-систем","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F88c\u002Fd88\u002Fdc5\u002F88cd88dc5a3ea03d8d8e3f73bd35aafe.png"},{"alias":"career","title":"Карьера в IT-индустрии","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fcab\u002Ff82\u002F067\u002Fcabf82067c7be08c90a5903f860c9abf.png"},{"alias":"hi","title":"Высоконагруженные системы","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fd4c\u002F97c\u002Fde3\u002Fd4c97cde31f59169b6159e7fc7020503.png"},{"alias":"ui","title":"Интерфейсы","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F21d\u002F1b4\u002Ffef\u002F21d1b4fefab1e346e0e048651950e430.png"},{"alias":"service_desk","title":"Service Desk","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fc63\u002F386\u002Fb4d\u002Fc63386b4de9e72aba5664fefc8b16988.png"},{"alias":"instant_messaging","title":"Мессенджеры","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F910\u002F615\u002Fc83\u002F910615c83444f1344fc92bb8de0bb9bb.png"},{"alias":"business-laws","title":"Законодательство в IT","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F7e3\u002Ffbd\u002F404\u002F7e3fbd40404e7a51fafad53018d606c8.png"}]},"topPosts":{"order":3,"items":[{"id":"1033640","isCorporative":false,"lang":"ru","titleHtml":"Почему техподдержка работает, как пожарная команда — и как это исправить","postType":"article","hubs":[{"id":"17702","alias":"helpdesk","type":"collective","title":"Help Desk Software","titleHtml":"Help Desk Software","isProfiled":true},{"id":"19369","alias":"service_desk","type":"collective","title":"Service Desk","titleHtml":"Service Desk","isProfiled":true},{"id":"20726","alias":"productpm","type":"collective","title":"Управление продуктом","titleHtml":"Управление продуктом","isProfiled":true}],"author":{"alias":"basalykor","fullname":"Roman Basalyko","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Ffa3\u002F630\u002F040\u002Ffa36300407688ce846b75f7e6a2da1e4.jpeg"}}],"period":"day"},"topAuthors":{"order":4,"items":[{"alias":"boltov7","fullname":"Артём Болтов","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F332\u002F94c\u002F66b\u002F33294c66bae529a45b737ecb5696699f.png"},{"alias":"koloskovv","fullname":"Владимир Колосков","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fea4\u002F5d0\u002Fac8\u002Fea45d0ac80cf87515ef8e19895c6c4ab.jpg"},{"alias":"Solmik","fullname":"Михаил Солдатов","avatarUrl":null},{"alias":"uiuxaudit","fullname":"Дмитрий","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fd09\u002F2f3\u002F8c9\u002Fd092f38c9591f15508e535c21cf06572.png"},{"alias":"Alex-sulimov","fullname":"Алексей Сулимов","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F216\u002Fe5d\u002Fd51\u002F216e5dd512d1670307fe64c9d2c5612d.jpeg"},{"alias":"okhotoml","fullname":"Olga X","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F88e\u002F45f\u002Ff3b\u002F88e45ff3b3c462c82240811e0d93702c.png"},{"alias":"Hubbitus","fullname":"Павел","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fb13\u002F225\u002Fb30\u002Fb13225b30f5e74bf4f83d8e7ab5a5cf5.png"},{"alias":"SimpleOne_it","fullname":"SimpleOne_it","avatarUrl":null}]},"topCompanies":{"order":5,"items":[{"alias":"yadro","title":"YADRO","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002Fde0\u002Fe6c\u002F373\u002Fde0e6c373cec39eb35ec96f508331ad7.png"},{"alias":"softpoint","title":"SOFTPOINT","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F14d\u002Fe8c\u002Ff0a\u002F14de8cf0a80d00304bf7a2af6f3e370a.png"},{"alias":"ingos_it","title":"Ингосстрах","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F076\u002Fe08\u002F567\u002F076e0856779be2e89895e9342b407985.png"},{"alias":"infostart","title":"INFOSTART.RU","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002Ffa9\u002Fb49\u002Ff4b\u002Ffa9b49f4b4b06786760e500e02593912.png"},{"alias":"itarena","title":"ITSM 365","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F110\u002F540\u002F8c6\u002F1105408c62f76d2fd5d7adc84e112a57.png"},{"alias":"jetinfosystems","title":"Инфосистемы Джет","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002Fe75\u002F7b7\u002F984\u002Fe757b7984bea12d439128abcafb7ddc1.jpeg"}]},"banner":{"order":6}},"human_resources":{"technologies":{"order":1,"items":[]},"topics":{"order":2,"items":[{"alias":"career","title":"Карьера в IT-индустрии","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fcab\u002Ff82\u002F067\u002Fcabf82067c7be08c90a5903f860c9abf.png"},{"alias":"artificial_intelligence","title":"Искусственный интеллект","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Ff01\u002F3a4\u002F009\u002Ff013a40094ae05299b2b05ef05e7f981.png"},{"alias":"hr_management","title":"Управление персоналом","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F2c0\u002Fc6b\u002F86a\u002F2c0c6b86a9011cf811ce4b6820865115.png"},{"alias":"study","title":"Учебный процесс в IT","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fdb6\u002F599\u002F152\u002Fdb6599152d4c6a7e81dd12f8d5b57e3d.png"},{"alias":"remote","title":"Удалённая работа","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F0a4\u002Fee8\u002Fef3\u002F0a4ee8ef310693aef94401aab6a69ed0.png"},{"alias":"devrel","title":"Developer Relations","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F053\u002F080\u002Fed6\u002F053080ed6c5ee5cf4d2e6e01ded35d8a.png"},{"alias":"research","title":"Исследования и прогнозы в IT","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fdfb\u002Fb79\u002F823\u002Fdfbb7982340f3a7ddb90860153b0c1ac.png"},{"alias":"contentmarketing","title":"Контент и копирайтинг","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F575\u002F287\u002F194\u002F5752871941f74139354ce4076db940e0.png"}]},"topPosts":{"order":3,"items":[{"id":"1033690","isCorporative":false,"lang":"ru","titleHtml":"Make найм Great Again? Что (не)спрашивать? Кого\\кому (не)собеседовать?","postType":"article","hubs":[{"id":"22026","alias":"itcompanies","type":"collective","title":"IT-компании","titleHtml":"IT-компании","isProfiled":false},{"id":"20736","alias":"hr_management","type":"collective","title":"Управление персоналом","titleHtml":"Управление персоналом","isProfiled":true},{"id":"20740","alias":"career","type":"collective","title":"Карьера в IT-индустрии","titleHtml":"Карьера в IT-индустрии","isProfiled":false},{"id":"21922","alias":"artificial_intelligence","type":"collective","title":"Искусственный интеллект","titleHtml":"Искусственный интеллект","isProfiled":false},{"id":"20696","alias":"study","type":"collective","title":"Учебный процесс в IT","titleHtml":"Учебный процесс в IT","isProfiled":false}],"author":{"alias":"ja9lryap","fullname":"Артем","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F669\u002Fc46\u002Fe9e\u002F669c46e9e3a53a62c09c0bb36db7713c.jpeg"}}],"period":"day"},"topAuthors":{"order":4,"items":[{"alias":"prohronus","fullname":"Alex Vega","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F0fe\u002Fc66\u002Faa4\u002F0fec66aa4a714b848af6823c01937999.jpeg"},{"alias":"cratte","fullname":"Владимир Мастеров","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F442\u002F066\u002F345\u002F442066345456699868d5fbcf22ee3b67.jpeg"},{"alias":"AntonOgarkov","fullname":"AntonOgarkov","avatarUrl":null},{"alias":"Alex-sulimov","fullname":"Алексей Сулимов","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F216\u002Fe5d\u002Fd51\u002F216e5dd512d1670307fe64c9d2c5612d.jpeg"},{"alias":"lilpatforyou","fullname":"lilpatforyou","avatarUrl":null},{"alias":"IgnatChuker","fullname":"Игнатий Цукергохер","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fd82\u002Fa95\u002F30d\u002Fd82a9530da033da2e8eb400667557d67.jpeg"},{"alias":"edyatl","fullname":"edyatl","avatarUrl":null},{"alias":"Ruslan_Nuriev","fullname":"Нуриев Руслан","avatarUrl":null}]},"topCompanies":{"order":5,"items":[{"alias":"infostart","title":"INFOSTART.RU","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002Ffa9\u002Fb49\u002Ff4b\u002Ffa9b49f4b4b06786760e500e02593912.png"},{"alias":"first","title":"FirstVDS","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F3a5\u002F515\u002F806\u002F3a5515806f33cd7076d16cd91c9bc9e3.png"},{"alias":"directum","title":"Directum","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F896\u002F94a\u002Fdf9\u002F89694adf9131ac7b8f0e797beb5bde28.png"},{"alias":"rshb","title":"РСХБ.Цифра (Россельхозбанк)","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002Fbe1\u002F662\u002F681\u002Fbe1662681fbd8bfedaae1206d2a6a19c.png"},{"alias":"diasoft_company","title":"Диасофт","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002Fa55\u002F522\u002Fd7e\u002Fa55522d7e2f01f55744f6d41b467e422.jpeg"},{"alias":"habr_career","title":"Хабр Карьера","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F9c6\u002Fc45\u002F8ec\u002F9c6c458ecaaf05cefada4fa4fb83a3b4.png"},{"alias":"oleg-bunin","title":"Конференции Олега Бунина (Онтико)","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002Fadd\u002Feb3\u002Fe91\u002Faddeb3e91fe453f9d78c7b52b8dc6a90.png"},{"alias":"ecom_tech","title":"ecom.tech","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F5c4\u002Fa8e\u002F1a4\u002F5c4a8e1a4c4b4997b73b1e03aef02483.png"}]},"banner":{"order":6}},"diy":{"technologies":{"order":1,"items":[{"alias":"arduino","title":"Arduino","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fa6e\u002F06b\u002F6b2\u002Fa6e06b6b21a9fff92bcc5f8a1a0e6d5b.png"},{"alias":"raspberrypi","title":"Raspberry Pi","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F337\u002F210\u002Fc0f\u002F337210c0f187ef2605bc9335bb74ae0c.png"},{"alias":"android_dev","title":"Android","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fdeb\u002F535\u002Fb54\u002Fdeb535b54338aa5a202a516dee792556.png"},{"alias":"osx_dev","title":"macOS","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fa09\u002Ffe1\u002Ff00\u002Fa09fe1f00511e7c8838ef0cdd8da5598.png"},{"alias":"c","title":"C","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fb5e\u002F3dc\u002Ff5c\u002Fb5e3dcf5c143cc1a3e442e3401e77735.png"},{"alias":"linux_dev","title":"Linux","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fe35\u002F838\u002Fe14\u002Fe35838e1411346ef268e92bdf57603e7.png"},{"alias":"vim","title":"VIM","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fe03\u002Ff41\u002F733\u002Fe03f41733c87b7bafa92301db302164e.png"},{"alias":"python","title":"Python","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F1c6\u002F724\u002F437\u002F1c6724437b83f3d71abd08e5c2877a7a.png"}]},"topics":{"order":2,"items":[{"alias":"DIY","title":"DIY или Сделай сам","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fgeektimes\u002Fhub\u002F0ac\u002F9b4\u002F828\u002F0ac9b48281cd7ba7401b4a4f5d9cd8d8.png"},{"alias":"home_automation","title":"Умный дом","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fgeektimes\u002Fhub\u002F34e\u002Fbe1\u002Fc07\u002F34ebe1c07b5896dab79e5c97df5fe183.png"},{"alias":"easyelectronics","title":"Электроника для начинающих","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F3b2\u002Ff85\u002Feab\u002F3b2f85eab66daef156575d40cc3fa45d.png"},{"alias":"circuit-design","title":"Схемотехника","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fa23\u002F82c\u002Fd85\u002Fa2382cd85fc6700a50a7544951f9895c.png"},{"alias":"antikvariat","title":"Старое железо","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fgeektimes\u002Fhub\u002F064\u002Fe29\u002F0f4\u002F064e290f484ad3bf745ebe9163b9276a.png"},{"alias":"controllers","title":"Программирование микроконтроллеров","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F64f\u002Fa1d\u002Fc30\u002F64fa1dc30e4a6c3ae14304bca2dac377.png"},{"alias":"robot","title":"Робототехника","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fgeektimes\u002Fhub\u002F4fc\u002F240\u002Fcaa\u002F4fc240caaae6907407cd6127f23a4aee.png"},{"alias":"3d-printers","title":"3D-принтеры","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fgeektimes\u002Fhub\u002F397\u002F7c4\u002F4df\u002F3977c44df876a05b29e70c9f0da0f844.png"}]},"topPosts":{"order":3,"items":[{"id":"1033652","isCorporative":false,"lang":"ru","titleHtml":"Как мы автоматизировали свой поселок","postType":"article","hubs":[{"id":"21966","alias":"home_automation","type":"collective","title":"Умный дом","titleHtml":"Умный дом","isProfiled":false},{"id":"22024","alias":"urban","type":"collective","title":"Урбанизм","titleHtml":"Урбанизм","isProfiled":false},{"id":"21976","alias":"DIY","type":"collective","title":"DIY или Сделай сам","titleHtml":"DIY или Сделай сам","isProfiled":false}],"author":{"alias":"lak_inside","fullname":"lak_inside","avatarUrl":null}},{"id":"1012486","isCorporative":true,"lang":"ru","titleHtml":"Лёгкий, доступный, настоящий Телекастер Squier Debut Collection","postType":"article","hubs":[{"id":"19791","alias":"ruvds","type":"corporative","title":"Блог компании RUVDS.com","titleHtml":"Блог компании RUVDS.com","isProfiled":false},{"id":"21976","alias":"DIY","type":"collective","title":"DIY или Сделай сам","titleHtml":"DIY или Сделай сам","isProfiled":false},{"id":"20742","alias":"read","type":"collective","title":"Читальный зал","titleHtml":"Читальный зал","isProfiled":false},{"id":"21988","alias":"sound","type":"collective","title":"Звук","titleHtml":"Звук","isProfiled":false},{"id":"21910","alias":"popular_science","type":"collective","title":"Научно-популярное","titleHtml":"Научно-популярное","isProfiled":false}],"author":{"alias":"Lunathecat","fullname":"Гитарная электроника","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F590\u002F1a6\u002F804\u002F5901a6804f68890a91368b9a7e4db386.jpg"}}],"period":"day"},"topAuthors":{"order":4,"items":[{"alias":"cnet","fullname":"cnet","avatarUrl":null},{"alias":"dmitriyrudnev","fullname":"Дмитрий Руднев","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fb05\u002Fb8c\u002F284\u002Fb05b8c28457a98724d5a0639af8268fb.jpg"},{"alias":"MaFrance351","fullname":"Лев","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fd62\u002Fa68\u002F18b\u002Fd62a6818b1e050ee430ef7101f635534.jpg"},{"alias":"DAN_SEA","fullname":"DAN_SEA","avatarUrl":null},{"alias":"JBFW","fullname":"JBFW","avatarUrl":null},{"alias":"dust70","fullname":"Дмитрий Усталов","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F6d1\u002F777\u002Fe13\u002F6d1777e132cdf566cabac609ada4e167.png"},{"alias":"the_bat","fullname":"the_bat","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F541\u002F4bf\u002F8b5\u002F5414bf8b5284693baff67c37bcd83580.jpg"},{"alias":"BabayMazay","fullname":"Сергей","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F308\u002F006\u002F48d\u002F30800648d892049718ffa9ef83bcebfd.jpg"}]},"topCompanies":{"order":5,"items":[{"alias":"ruvds","title":"RUVDS.com","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F608\u002Ff02\u002F206\u002F608f0220675e20da793aa1974a1a0a2e.png"},{"alias":"beget","title":"Beget","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F077\u002F521\u002Fe04\u002F077521e04dc7bedc96dc729529e31ea8.png"},{"alias":"timeweb","title":"Timeweb Cloud","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F857\u002Ffb7\u002F96e\u002F857fb796e1a82ed82762c60a09acba32.png"},{"alias":"selectel","title":"Selectel","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F4b4\u002F652\u002F7f5\u002F4b46527f577e69b1f32a84700b2fed33.png"},{"alias":"wirenboard","title":"Wiren Board","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F964\u002Fc3e\u002F736\u002F964c3e736e0e3e43ba6657ed6ddf084c.png"},{"alias":"avito","title":"AvitoTech","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F7ba\u002F74f\u002Fb37\u002F7ba74fb3764caa1fb6865aaa6b6aa4bf.png"},{"alias":"flant","title":"Флант","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F740\u002Fdb1\u002F948\u002F740db19488e97cbc6b183658c5749867.png"},{"alias":"first","title":"FirstVDS","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F3a5\u002F515\u002F806\u002F3a5515806f33cd7076d16cd91c9bc9e3.png"}]},"banner":{"order":6}},"healthcare":{"technologies":{"order":1,"items":[]},"topics":{"order":2,"items":[{"alias":"health","title":"Здоровье","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fgeektimes\u002Fhub\u002F612\u002Faab\u002F212\u002F612aab212721194fe115ed84dea966cc.png"},{"alias":"popular_science","title":"Научно-популярное","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fgeektimes\u002Fhub\u002F02f\u002F206\u002F0b9\u002F02f2060b99e6f4d9403eee0420d7d5b8.png"},{"alias":"brain","title":"Мозг","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fgeektimes\u002Fhub\u002Fd50\u002Faab\u002F5e0\u002Fd50aab5e00dd47a9fdeffee5714170e9.png"},{"alias":"lifehacks","title":"Лайфхаки для гиков","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fgeektimes\u002Fhub\u002F9fa\u002F5f9\u002F72e\u002F9fa5f972e61ea8e0b7d0258ddafd3fbe.png"},{"alias":"artificial_intelligence","title":"Искусственный интеллект","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Ff01\u002F3a4\u002F009\u002Ff013a40094ae05299b2b05ef05e7f981.png"},{"alias":"wearable_electronics","title":"Носимая электроника","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fgeektimes\u002Fhub\u002Fab9\u002F8c9\u002F175\u002Fab98c9175b8a223fcaeebfb60352c7cc.png"},{"alias":"biology","title":"Биология","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F477\u002F006\u002F60e\u002F47700660e090952cf5366beabff6a755.png"},{"alias":"telemedicine","title":"Телемедицина","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fgeektimes\u002Fhub\u002F80a\u002Fa36\u002F01c\u002F80aa3601c07565a3f4dfffdbf8e94e20.png"}]},"topPosts":{"order":3,"items":[],"period":"day"},"topAuthors":{"order":4,"items":[{"alias":"PetrVasilchenko","fullname":"Пётр Васильченко","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F7a1\u002F07d\u002F1d8\u002F7a107d1d8fe73d6db29524aceec4ff7c.png"},{"alias":"omyhosts","fullname":"omyhosts","avatarUrl":null},{"alias":"VetaOne","fullname":"Виталий Калистратов","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F85a\u002F0c5\u002F855\u002F85a0c585538330fd6e91a045dcefb258.png"},{"alias":"ColdStartMind","fullname":"ColdStartMind","avatarUrl":null},{"alias":"antoninapopova","fullname":"Antonina Popova","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F6d3\u002Fab9\u002F83c\u002F6d3ab983c926c725bf95c35aca24ade4.jpg"},{"alias":"AlexxIT","fullname":"Алексей","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Ff90\u002F0b7\u002Ff10\u002Ff900b7f10d1c97821a9166fba64f1446.jpg"},{"alias":"zingilevskiy","fullname":"Зингилевский","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F983\u002F7c6\u002Fb5d\u002F9837c6b5d16712b7e57106fb93d4f5dc.png"},{"alias":"Kikodoc","fullname":"Виктория Филиппова","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fce9\u002Fb5f\u002F76f\u002Fce9b5f76f0ec44f9b05e35acff1d9129.jpeg"}]},"topCompanies":{"order":5,"items":[{"alias":"ispsystem","title":"ISPsystem","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F8a9\u002F6fd\u002F9bb\u002F8a96fd9bb52e0685442fa3f74a2a4509.png"},{"alias":"avito","title":"AvitoTech","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F7ba\u002F74f\u002Fb37\u002F7ba74fb3764caa1fb6865aaa6b6aa4bf.png"},{"alias":"smclinic","title":"СМ-Клиника","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002Fd5b\u002F524\u002F908\u002Fd5b52490807bdfc46bab684ad6d8708a.png"}]},"banner":{"order":6}},"analytics":{"technologies":{"order":1,"items":[{"alias":"python","title":"Python","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F1c6\u002F724\u002F437\u002F1c6724437b83f3d71abd08e5c2877a7a.png"},{"alias":"typescript","title":"TypeScript","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fcab\u002F7bb\u002F7b8\u002Fcab7bb7b8a279ee584926ced8e87cb15.png"},{"alias":"nosql","title":"NoSQL","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fd2e\u002Fd80\u002Feb9\u002Fd2ed80eb93ce7db8c0e9c0533c3b658c.png"},{"alias":"mongodb","title":"MongoDB","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F9d7\u002F370\u002F0ac\u002F9d73700ac34f30f83e776c7d8e06e93a.png"},{"alias":"sql","title":"SQL","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F64b\u002F22b\u002F8b6\u002F64b22b8b6c4677778423e971d52eb05d.png"},{"alias":"uml","title":"UML Design","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fa5d\u002Fe13\u002F998\u002Fa5de139989b3240f3e8177ba873f3ee7.png"},{"alias":"java","title":"Java","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F4c9\u002F821\u002Fd2a\u002F4c9821d2ad5a9844eb6d0f8c77991772.png"},{"alias":"kotlin","title":"Kotlin","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F041\u002F637\u002F60f\u002F04163760f28104a45ad9ca39cb25f194.png"}]},"topics":{"order":2,"items":[{"alias":"artificial_intelligence","title":"Искусственный интеллект","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Ff01\u002F3a4\u002F009\u002Ff013a40094ae05299b2b05ef05e7f981.png"},{"alias":"analysis_design","title":"Анализ и проектирование систем","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F204\u002F1ff\u002F174\u002F2041ff174c7379150892103472bf12cf.png"},{"alias":"career","title":"Карьера в IT-индустрии","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fcab\u002Ff82\u002F067\u002Fcabf82067c7be08c90a5903f860c9abf.png"},{"alias":"machine_learning","title":"Машинное обучение","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fbef\u002Faa1\u002Fa7e\u002Fbefaa1a7e35e3c6b133114723367e3e0.png"},{"alias":"it-infrastructure","title":"IT-инфраструктура","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F594\u002F546\u002F45b\u002F59454645b38d9a58a92e6870133ae8e6.png"},{"alias":"bigdata","title":"Big Data","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F999\u002F74b\u002Fc6d\u002F99974bc6d012cd4094db36a0cb97e914.png"},{"alias":"data_visualization","title":"Визуализация данных","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002F54f\u002F6d4\u002Fc42\u002F54f6d4c42b588a4d0937f0fd8dfef39e.png"},{"alias":"mobileanalytics","title":"Аналитика мобильных приложений","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fhub\u002Fcd5\u002F334\u002F8ce\u002Fcd53348ce9a13411cbeb0cc6c3b07d85.png"}]},"topPosts":{"order":3,"items":[{"id":"1032580","isCorporative":true,"lang":"ru","titleHtml":"Как мы в Selectel строим S3-хранилища: от железа до приложения","postType":"article","hubs":[{"id":"14740","alias":"selectel","type":"corporative","title":"Блог компании Selectel","titleHtml":"Блог компании Selectel","isProfiled":false},{"id":"21470","alias":"cloud_services","type":"collective","title":"Облачные сервисы","titleHtml":"Облачные сервисы","isProfiled":true},{"id":"19197","alias":"dwh","type":"collective","title":"Хранение данных","titleHtml":"Хранение данных","isProfiled":true},{"id":"21482","alias":"distributed_systems","type":"collective","title":"Распределённые системы","titleHtml":"Распределённые системы","isProfiled":true},{"id":"20726","alias":"productpm","type":"collective","title":"Управление продуктом","titleHtml":"Управление продуктом","isProfiled":true}],"author":{"alias":"GrishinAlex","fullname":"Александр Гришин","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F93d\u002F0a0\u002F70e\u002F93d0a070e5309aeabc16d9e453a75148.jpeg"}},{"id":"1033320","isCorporative":false,"lang":"ru","titleHtml":"Хантавирусный круиз у берегов Испании, а также целевая блокировка VPN на 92%","postType":"article","hubs":[{"id":"21928","alias":"finance","type":"collective","title":"Финансы в IT","titleHtml":"Финансы в IT","isProfiled":false},{"id":"21922","alias":"artificial_intelligence","type":"collective","title":"Искусственный интеллект","titleHtml":"Искусственный интеллект","isProfiled":false},{"id":"21986","alias":"cryptocurrency","type":"collective","title":"Криптовалюты","titleHtml":"Криптовалюты","isProfiled":false}],"author":{"alias":"RationalAnswer","fullname":"Павел Комаровский","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fe54\u002F688\u002F8ae\u002Fe546888aed94c31b9d15b7fa3d86f381.jpg"}},{"id":"1032688","isCorporative":false,"lang":"ru","titleHtml":"Как вернуть управляемую модель бизнеса, когда уходит руководитель отдела продаж","postType":"article","hubs":[{"id":"21470","alias":"cloud_services","type":"collective","title":"Облачные сервисы","titleHtml":"Облачные сервисы","isProfiled":true},{"id":"18202","alias":"data_visualization","type":"collective","title":"Визуализация данных","titleHtml":"Визуализация данных","isProfiled":true},{"id":"20752","alias":"business_models","type":"collective","title":"Бизнес-модели","titleHtml":"Бизнес-модели","isProfiled":true},{"id":"20728","alias":"sales","type":"collective","title":"Управление продажами","titleHtml":"Управление продажами","isProfiled":true},{"id":"397","alias":"analysis_design","type":"collective","title":"Анализ и проектирование систем","titleHtml":"Анализ и проектирование систем","isProfiled":true}],"author":{"alias":"ira_pro_bi","fullname":"Ирина Чекулаева","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fe5c\u002Fa4b\u002F32c\u002Fe5ca4b32c06c2f4c00c554e68f4f6a64.jpeg"}},{"id":"1033672","isCorporative":false,"lang":"ru","titleHtml":"Как мы перестали тонуть в сроках и выгорании за один переход: опыт студии из 8 человек","postType":"article","hubs":[{"id":"19583","alias":"dev_management","type":"collective","title":"Управление разработкой","titleHtml":"Управление разработкой","isProfiled":true},{"id":"20682","alias":"pm","type":"collective","title":"Управление проектами","titleHtml":"Управление проектами","isProfiled":true}],"author":{"alias":"seregatot","fullname":"Москалев Сергей","avatarUrl":null}}],"period":"day"},"topAuthors":{"order":4,"items":[{"alias":"Andvecher","fullname":"Андрей Вечерний","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F26b\u002F446\u002Fa36\u002F26b446a36886936a9c4e6c2560c6cbb5.png"},{"alias":"RationalAnswer","fullname":"Павел Комаровский","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fe54\u002F688\u002F8ae\u002Fe546888aed94c31b9d15b7fa3d86f381.jpg"},{"alias":"analyst_team","fullname":"analyst_team","avatarUrl":null},{"alias":"tripolskypetr","fullname":"Петр Трипольский","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fa43\u002F60b\u002F849\u002Fa4360b8497fad6dd47bb04c527483d25.png"},{"alias":"OlgaNagaeva","fullname":"OlgaNagaeva","avatarUrl":null},{"alias":"chaussky","fullname":"Анатолий Чаусский","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F802\u002F514\u002F80c\u002F80251480cf4aeb7a71b1b8a4ddd8c583.jpeg"},{"alias":"GrishinAlex","fullname":"Александр Гришин","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F93d\u002F0a0\u002F70e\u002F93d0a070e5309aeabc16d9e453a75148.jpeg"},{"alias":"Isma","fullname":"Isma","avatarUrl":null}]},"topCompanies":{"order":5,"items":[{"alias":"ru_mts","title":"МТС","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F70c\u002Fa67\u002Fcc7\u002F70ca67cc7ecfa889ded9b51efa3e70d3.png"},{"alias":"avito","title":"AvitoTech","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F7ba\u002F74f\u002Fb37\u002F7ba74fb3764caa1fb6865aaa6b6aa4bf.png"},{"alias":"datasapience","title":"Data Sapience","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F08e\u002F4a5\u002F4f8\u002F08e4a54f82cf39f655d75ca7484dc4bd.jpeg"},{"alias":"promomed","title":"ПРОМОМЕД","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F00c\u002F8d1\u002Ff1d\u002F00c8d1f1d4441c7b06b8b1e04971903e.png"},{"alias":"psb","title":"ПСБ","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002Fddb\u002F3cc\u002F5fb\u002Fddb3cc5fbfb40eda2a0cca11dc70af71.png"},{"alias":"selectel","title":"Selectel","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F4b4\u002F652\u002F7f5\u002F4b46527f577e69b1f32a84700b2fed33.png"},{"alias":"megafon","title":"МегаФон","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002F4ff\u002Ff59\u002Fd95\u002F4fff59d9511b5ec8292770dd4acbe5b7.png"},{"alias":"infostart","title":"INFOSTART.RU","imageUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fcompany\u002Ffa9\u002Fb49\u002Ff4b\u002Ffa9b49f4b4b06786760e500e02593912.png"}]},"banner":{"order":6}}},"events":{"items":[{"id":"944","titleHtml":"PROBA Awards — международная коммуникационная премия, учрежденная в 2000 году","imageUrl":"https:\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fupload_files\u002F35c\u002F9e4\u002F9f2\u002F35c9e49f27b4265a961d3582bcefe868.png","eventUrl":"https:\u002F\u002Fpr-proba.ru","startDay":"2026-03-02","finishDay":"2026-08-10","isOnline":false,"geo":["Санкт-Петербург"],"tags":["коммуникации"]},{"id":"920","titleHtml":"Экспедиция «Рэйдикс»","imageUrl":"https:\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fupload_files\u002F93b\u002Fca0\u002F14c\u002F93bca014cd0533ecd9870cb97065926e.jpg","eventUrl":"https:\u002F\u002Fu.habr.com\u002Fcldr_raidix2026","startDay":"2026-03-03","startTime":"09:30","finishDay":"2026-06-09","isOnline":false,"geo":["Екатеринбург","Новосибирск","Краснодар","Минск","Калининград","Ростов-на-Дону"],"tags":["Рэйдикс","Raidix","ПО","демонстрация ПО","ИТ-семинары","IT-семинары","ИТ","IT"]},{"id":"928","titleHtml":"Как продвигаться на Хабре, если вы — не ИТ-бренд?","imageUrl":"https:\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fupload_files\u002Fe16\u002Fff3\u002F923\u002Fe16ff3923b4de6c7ed57cf9f582efaa4.png","eventUrl":"https:\u002F\u002Fhabr.timepad.ru\u002Fevent\u002F3832864\u002F?utm_refcode=e01573ae977da84905b6932aac925ad8a47e6d8b","startDay":"2026-03-09","finishDay":"2026-06-01","isOnline":true,"geo":[],"tags":["маркетинг","продвижение","курс","Хабр"]},{"id":"970","titleHtml":"Маркетинг без Telegram: где привлекать клиентов в 2026 году","imageUrl":"https:\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fupload_files\u002Fe21\u002F565\u002Fc41\u002Fe21565c4120ad9f4105243d125dd4ead.jpg","eventUrl":"https:\u002F\u002Ft.me\u002FNimaxAgencyBot","startDay":"2026-05-13","startTime":"17:00","isOnline":true,"geo":[],"tags":["маркетинг"]}]}},"isMenuVisible":false},"banner":{"isArticleStickyPanelVisible":false,"isArticleStickyPanelAtTheBottom":false,"bannerContainer":null,"isHeaderBannerInView":true,"isSponsorBlockPresent":true,"isHeaderBannerVisible":true,"isPBrandingVisible":false},"refs":{"flowsRefs":[{"id":"2","title":"Бэкенд","alias":"backend"},{"id":"4","title":"Фронтенд","alias":"frontend"},{"id":"6","title":"Мобильная разработка","alias":"mobile_development"},{"id":"8","title":"Системное администрирование","alias":"admin"},{"id":"10","title":"Информационная безопасность","alias":"information_security"},{"id":"12","title":"AI и ML","alias":"ai_and_ml"},{"id":"14","title":"Промышленная инженерия","alias":"industrial_engineering"},{"id":"16","title":"Геймдев","alias":"gamedev"},{"id":"18","title":"Тестирование","alias":"quality_assurance"},{"id":"20","title":"Техническая поддержка","alias":"support"},{"id":"22","title":"Системный и бизнес-анализ","alias":"analytics"},{"id":"24","title":"Дизайн","alias":"design"},{"id":"26","title":"Менеджмент","alias":"management"},{"id":"28","title":"Топ-менеджмент","alias":"top_management"},{"id":"30","title":"Маркетинг и контент","alias":"marketing"},{"id":"34","title":"Продажи","alias":"sales"},{"id":"36","title":"HR","alias":"human_resources"},{"id":"38","title":"Бэк-офис","alias":"back_office"},{"id":"40","title":"Зерокодинг","alias":"zero-code_development"},{"id":"42","title":"Железо и гаджеты","alias":"hardware_and_gadgets"},{"id":"44","title":"DIY","alias":"diy"},{"id":"46","title":"Здоровье","alias":"healthcare"},{"id":"48","title":"Научпоп","alias":"popsci"},{"id":"50","title":"Другое","alias":"other"}]},"promoData":{"isLoading":false,"hasLoaded":false,"featurer":null,"megaposts":null,"promoLinks":null,"promoPosts":null,"sticker":null,"stories":null,"activities":[],"partnerActivities":[],"isPromoDataAvailable":{"featurer":true,"promoPosts":true,"promoLinks":true,"megaposts":false}},"fixedBanner":{"isLoading":false,"viewEventsSent":[],"imagesLoaded":{}},"companies":{"companyRefs":{"__ALIAS_STORE__":true},"companyIds":{},"companyTopIds":[],"companyRouteStatistics":{},"pagesCount":{},"companyProfiles":{"__ALIAS_STORE__":true},"companiesCategories":[],"companiesCategoriesTotalCount":0,"companiesWidgets":{"__ALIAS_STORE__":true},"companiesWorkers":{"__ALIAS_STORE__":true},"companiesFans":{"__ALIAS_STORE__":true},"multiwidgets":{"__ALIAS_STORE__":true},"route":{},"isLoading":false,"companyWorkersLoading":false,"companyFansLoading":false,"multiwidgetLoading":false,"vacancies":{},"companiesGalleries":{"__ALIAS_STORE__":true},"companiesBanners":{"__ALIAS_STORE__":true},"companiesLandingVacancies":{"__ALIAS_STORE__":true},"companiesTechnologies":{"__ALIAS_STORE__":true},"workplaceInfo":null},"ssr":{"error":null,"isDataLoaded":true,"isDataLoading":false},"hubs":{"hubRefs":{"__ALIAS_STORE__":true},"hubIds":{},"hubRouteStats":{},"pagesCount":{},"isLoading":false,"counters":{"__ALIAS_STORE__":true},"route":{"name":"","params":{},"query":{}}},"adblock":{"hasAcceptableAdsFilter":false,"hasAdblock":false},"pullRefresh":{"shouldRefresh":false},"viewport":{"prevScrollY":{},"scrollY":0,"width":0,"pageContentHeight":0},"feedStatistics":{"feedsStatistics":{}},"pageArticleComments":{"lastViewedComment":0,"postId":null,"lastCommentTimestamp":1777976854,"moderated":[],"moderatedIds":[],"commentRoute":"","idempotenceKey":""},"comments":{"articleComments":{"1020866":{"refs":{"29807138":{"id":"29807138","parentId":null,"level":0,"timePublished":"2026-04-10T09:06:21+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EПробовал похожую тему с tproxy..правда не vless а другой протокол..в итоге были две проблемы ..перехват трафика в raw и зависающие сессии .. Потом перешёл с tproxy на tun..и стало лучше )\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"5510585","alias":"Last26","fullname":"Юрий","avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29807240","29811106"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29807240":{"id":"29807240","parentId":"29807138","level":1,"timePublished":"2026-04-10T09:18:00+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EУ меня схема отличается - я не использую raw вообще, у меня TPROXY через nftables в mangle\u002Fprerouting + policy routing.\u003C\u002Fp\u003E\u003Cp\u003EСессии не висят: Xray стабильно принимает соединения и маршрутизирует (и direct, и proxy), это видно по логам.\u003C\u002Fp\u003E\u003Cp\u003EТак что, скорее всего, у тебя проблема была в конкретной реализации (raw\u002Fмаршрутизация\u002Floop), а не в TPROXY как таковом :)\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"5437821","alias":"ShyDamn","fullname":"Шубин Данила","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F12a\u002Fc86\u002F6a6\u002F12ac866a6c98714b4d5f6847ea75880e.jpeg","speciality":"FullStack-разработчик, CEO Synapsea Agency","deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29807476"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29807476":{"id":"29807476","parentId":"29807240","level":2,"timePublished":"2026-04-10T09:39:51+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EВполне возможно) реализация была адовая просто) \u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"5510585","alias":"Last26","fullname":"Юрий","avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":[],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29807522":{"id":"29807522","parentId":null,"level":0,"timePublished":"2026-04-10T09:46:16+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":2,"message":"\u003Cblockquote\u003E\u003Cp\u003E\u003Cstrong\u003EREDIRECT (DNAT)\u003C\u002Fstrong\u003E — подменяет адрес назначения на 127.0.0.1:порт. Проблема: оригинальный адрес теряется. \u003C\u002Fp\u003E\u003C\u002Fblockquote\u003E\u003Cp\u003EВообще-то нет. Точно не знаю как оно работает, но проходит любой TCP трафик. Ядро как-то сохраняет оригинальный адрес и передаёт xray. Для UDP трафика почему-то не работает и нужен tproxy\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"5500713","alias":"0ka","fullname":null,"avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29807592"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29807556":{"id":"29807556","parentId":null,"level":0,"timePublished":"2026-04-10T09:52:43+00:00","timeChanged":"2026-04-10T09:58:07+00:00","isSuspended":false,"status":"published","score":2,"votesCount":4,"message":"\u003Cblockquote\u003E\u003Cp\u003E\u003Ccode\u003E\"network\": \"tcp\"\u003C\u002Fcode\u003E\u003C\u002Fp\u003E\u003C\u002Fblockquote\u003E\u003Cp\u003EЯ думаю 90% читателей будут ожидать проксирование и UDP трафика в том числе. А тут такая подстава.\u003C\u002Fp\u003E\u003Cp\u003EКстати QUIC блочат даже при рабочем UDP в целях увеличения производительности vless:\u003C\u002Fp\u003E\u003Col\u003E\u003Cli\u003E\u003Cp\u003EXtls не делает двойное шифрование https трафика, т.е. quic трафик будет жрать ресурсы проца на шифрование\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003EQuic имеет свой congestion control, ваш прокси сервер тоже, получается два congestion control что даёт производительность ниже\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003EUDP over TCP потребляет больше ресурсов проца\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003C\u002Fol\u003E","editorVersion":2,"author":{"id":"5500713","alias":"0ka","fullname":null,"avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29807606"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29807592":{"id":"29807592","parentId":"29807522","level":1,"timePublished":"2026-04-10T09:57:21+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":-1,"votesCount":3,"message":"\u003Cp\u003EОн не «сохраняется сам».\u003C\u002Fp\u003E\u003Cp\u003EПри REDIRECT адрес реально теряется (DNAT на 127.0.0.1), а то, что у тебя работает с TCP - это либо sniffing (SNI\u002FHost), либо SO_ORIGINAL_DST. Это не универсально.\u003C\u002Fp\u003E\u003Cp\u003ETPROXY как раз и нужен, чтобы получать оригинальный адрес нативно\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"5437821","alias":"ShyDamn","fullname":"Шубин Данила","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F12a\u002Fc86\u002F6a6\u002F12ac866a6c98714b4d5f6847ea75880e.jpeg","speciality":"FullStack-разработчик, CEO Synapsea Agency","deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29807638"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29807606":{"id":"29807606","parentId":"29807556","level":1,"timePublished":"2026-04-10T09:58:45+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":-1,"votesCount":3,"message":"\u003Cp\u003EТут только TCP сделан специально.\u003C\u002Fp\u003E\u003Cp\u003EQUIC (UDP 443) я режу, чтобы весь трафик уходил в TCP и нормально проксировался. UDP в прозрачной схеме - отдельный уровень сложности.\u003C\u002Fp\u003E\u003Cp\u003EТак что это не «подстава», а осознанное решение :)\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"5437821","alias":"ShyDamn","fullname":"Шубин Данила","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F12a\u002Fc86\u002F6a6\u002F12ac866a6c98714b4d5f6847ea75880e.jpeg","speciality":"FullStack-разработчик, CEO Synapsea Agency","deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29807668"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29807638":{"id":"29807638","parentId":"29807592","level":2,"timePublished":"2026-04-10T10:00:50+00:00","timeChanged":"2026-04-10T10:10:57+00:00","isSuspended":false,"status":"published","score":-1,"votesCount":1,"message":"\u003Cp\u003EДа нету у меня сниффинга\u003C\u002Fp\u003E\u003Cp\u003Eiptables -t nat -A PREROUTING -p tcp -j REDIRECT --to-ports 10\u003C\u002Fp\u003E\u003Cp\u003Esing-box redirect inbound видит айпи адрес любого tcp протокола, xray тоже, нормальная универсальность. Если нужен только TCP то настраивается в 10 раз проще чем tproxy (можно прямо из веб интерфейса openwrt добавить правило).\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"5500713","alias":"0ka","fullname":null,"avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29807706"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29807668":{"id":"29807668","parentId":"29807606","level":2,"timePublished":"2026-04-10T10:05:19+00:00","timeChanged":"2026-04-10T10:07:43+00:00","isSuspended":false,"status":"published","score":0,"votesCount":2,"message":"\u003Cp\u003Eя и так из статьи понял зачем вы блокируете quic. здесь речь не о вас, а о читателях.\u003C\u002Fp\u003E\u003Cp\u003Eнапишите в самом верху что весь UDP трафик пропущен напрямую.\u003C\u002Fp\u003E\u003Cp\u003Eи вообще, вроде бы не хватает 1 строчки nft чтобы UDP проксился, но точно не уверен\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"5500713","alias":"0ka","fullname":null,"avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29807710"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29807706":{"id":"29807706","parentId":"29807638","level":3,"timePublished":"2026-04-10T10:11:02+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":-1,"votesCount":1,"message":"\u003Cp\u003E*\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"5500713","alias":"0ka","fullname":null,"avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29807868"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29807710":{"id":"29807710","parentId":"29807668","level":3,"timePublished":"2026-04-10T10:11:10+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":-1,"votesCount":1,"message":"\u003Cp\u003E*\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"5500713","alias":"0ka","fullname":null,"avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29807864"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29807770":{"id":"29807770","parentId":null,"level":0,"timePublished":"2026-04-10T10:19:19+00:00","timeChanged":"2026-04-10T10:26:07+00:00","isSuspended":false,"status":"published","score":1,"votesCount":3,"message":"\u003Cblockquote\u003E\u003Cp\u003E\u003Cstrong\u003EТранспорт — чистый TCP\u003C\u002Fstrong\u003E (не WebSocket, не gRPC). TCP даёт минимальную задержку и не добавляет лишних заголовков.\u003C\u002Fp\u003E\u003C\u002Fblockquote\u003E\u003Cp\u003Eа так же даёт потенциальную сибирскую блокировку (моя последняя статья), стоило бы добавить что лучше иметь в запасе gRPC траспорт (из-за встроенного мультиплекса).\u003C\u002Fp\u003E\u003Cp\u003Eкстати TCP транспорт так-то не даёт минимальную задержку, тратится много времени на tcp и tls хендшейки, если впска где-то далеко в США, то это очень заметно (ещё одна причина быть фанатом протоколов с мультиплексом, хотя там есть минусы)\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"5500713","alias":"0ka","fullname":null,"avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29807880"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29807864":{"id":"29807864","parentId":"29807710","level":4,"timePublished":"2026-04-10T10:33:17+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EДа, хорошее замечание, можно это явнее подчеркнуть, позднее сверху помечу про UDP, спасибо :)\u003C\u002Fp\u003E\u003Cp\u003EНо также замечу, что там не совсем «1 строчка»: для UDP нужно ещё inbound в Xray, отдельные правила и нюансы с тем же QUIC. Я поэтому решил не усложнять и оставить только TCP.\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"5437821","alias":"ShyDamn","fullname":"Шубин Данила","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F12a\u002Fc86\u002F6a6\u002F12ac866a6c98714b4d5f6847ea75880e.jpeg","speciality":"FullStack-разработчик, CEO Synapsea Agency","deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29807962"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29807868":{"id":"29807868","parentId":"29807706","level":4,"timePublished":"2026-04-10T10:33:49+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":2,"message":"\u003Cp\u003EСкорее всего у тебя это через SO_ORIGINAL_DST работает, а не потому что ядро само «сохраняет адрес».\u003C\u002Fp\u003E\u003Cp\u003EС REDIRECT это в целом ок для TCP, но всё равно не совсем универсально и зависит от реализации. Поэтому TPROXY обычно используют, когда нужна более предсказуемая прозрачная схема.\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"5437821","alias":"ShyDamn","fullname":"Шубин Данила","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F12a\u002Fc86\u002F6a6\u002F12ac866a6c98714b4d5f6847ea75880e.jpeg","speciality":"FullStack-разработчик, CEO Synapsea Agency","deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":[],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29807880":{"id":"29807880","parentId":"29807770","level":1,"timePublished":"2026-04-10T10:35:09+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":-1,"votesCount":3,"message":"\u003Cp\u003EДа, тут согласен - TCP не серебряная пуля, особенно если сервер далеко, хендшейки начинают чувствоваться.\u003C\u002Fp\u003E\u003Cp\u003EЯ скорее имел в виду, что TCP без WS\u002FgRPC даёт минимальный оверхед в рамках самой схемы (без лишних слоёв), а не вообще минимальную задержку в любых условиях.\u003C\u002Fp\u003E\u003Cp\u003EПро запасной транспорт тоже хорошее замечание :)\u003Cbr\u003E gRPC\u002FWS с мультиплексом действительно могут быть полезны как fallback, особенно если начинаются блокировки или высокий RTT, спасибо, добавлю это в схему позднее\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"5437821","alias":"ShyDamn","fullname":"Шубин Данила","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F12a\u002Fc86\u002F6a6\u002F12ac866a6c98714b4d5f6847ea75880e.jpeg","speciality":"FullStack-разработчик, CEO Synapsea Agency","deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":[],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29807898":{"id":"29807898","parentId":null,"level":0,"timePublished":"2026-04-10T10:38:02+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EP.S. из практики: основная проблема, с которой столкнулся - забивающийся overlay.\u003C\u002Fp\u003E\u003Cp\u003EВ итоге вынес Xray и AdGuard в \u002Ftmp, а при загрузке разворачиваю их из архивов через init-скрипт и запускаю. Так удалось разгрузить overlay и всё работает стабильно.\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"5437821","alias":"ShyDamn","fullname":"Шубин Данила","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F12a\u002Fc86\u002F6a6\u002F12ac866a6c98714b4d5f6847ea75880e.jpeg","speciality":"FullStack-разработчик, CEO Synapsea Agency","deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":[],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29807962":{"id":"29807962","parentId":"29807864","level":5,"timePublished":"2026-04-10T10:48:23+00:00","timeChanged":"2026-04-10T10:51:03+00:00","isSuspended":false,"status":"published","score":0,"votesCount":2,"message":"\u003Cblockquote\u003E\u003Cp\u003Eдля UDP нужно ещё inbound в Xray \u003C\u002Fp\u003E\u003C\u002Fblockquote\u003E\u003Cp\u003Enetwork: tcp поменять на network: tcp,udp или вообще убрать строчку, по дефолту вроде оба слушает. quic как блокировался так пусть и блокируется (ниже писал почему)\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"5500713","alias":"0ka","fullname":null,"avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29808016"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29808016":{"id":"29808016","parentId":"29807962","level":6,"timePublished":"2026-04-10T10:56:44+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":1,"votesCount":1,"message":"\u003Cp\u003EСпасибо, подумаю над этим\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"5437821","alias":"ShyDamn","fullname":"Шубин Данила","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F12a\u002Fc86\u002F6a6\u002F12ac866a6c98714b4d5f6847ea75880e.jpeg","speciality":"FullStack-разработчик, CEO Synapsea Agency","deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":[],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29808936":{"id":"29808936","parentId":null,"level":0,"timePublished":"2026-04-10T13:15:08+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":1,"votesCount":1,"message":"\u003Cp\u003EПростите, не могу не написать)\u003C\u002Fp\u003E\u003Cblockquote\u003E\u003Cp\u003Eтелевизор вообще не умеет в VLESS \u003C\u002Fp\u003E\u003C\u002Fblockquote\u003E\u003Cp\u003Eумеет\u003C\u002Fp\u003E\u003Cblockquote\u003E\u003Cp\u003Eколонка — тем более\u003C\u002Fp\u003E\u003C\u002Fblockquote\u003E\u003Cp\u003EДаже представить не могу в какой ситуации колонке понадобится обход блокировок, у них закрытые экосистемы сервисов.\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"4668421","alias":"12345egor","fullname":null,"avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29808946"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29808946":{"id":"29808946","parentId":"29808936","level":1,"timePublished":"2026-04-10T13:17:05+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EУ меня Яндекс Алиса с выходом на TV, которая поддерживает ютуб. Но при этом с момента блокировки ютуба она не смогла загрузить мне ни одного видео толком. Теперь может :)\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"5437821","alias":"ShyDamn","fullname":"Шубин Данила","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F12a\u002Fc86\u002F6a6\u002F12ac866a6c98714b4d5f6847ea75880e.jpeg","speciality":"FullStack-разработчик, CEO Synapsea Agency","deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29808988"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29808988":{"id":"29808988","parentId":"29808946","level":2,"timePublished":"2026-04-10T13:25:50+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EАаа. Тогда логично. Я подумал у вас Станция без видео и ТВ\u002Fприставка на Android TV.\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"4668421","alias":"12345egor","fullname":null,"avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":[],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29809174":{"id":"29809174","parentId":null,"level":0,"timePublished":"2026-04-10T14:00:03+00:00","timeChanged":"2026-04-10T14:13:33+00:00","isSuspended":false,"status":"published","score":4,"votesCount":4,"message":"\u003Cp\u003EСудя по роутингу, запрос 2ip.io выдает адрес впн, и любой подключенный к роутеру телефон с максом может спокойно слить ip. Лучше роутинг \"перевернуть\" и geosite:ru-blocked заворачивать в впн, а по умолчанию сделать путь в директ. Хотя лучше не лениться и прописать категории нужных сайтов руками (geosite:youtube, geosite:telegram и т.д.). Вдруг список geosite:ru-blocked просто бесконечно разрастается и старые адреса никто не проверяет, и ушлый ркнщик найдет уже неиспользуемый домен из этого списка и запилит на нем ip чекер? А приложения встроят к себе обращения на него, и поймают всех с простым роутингом geosite:ru-blocked -> vpn. Он конечно может и новый домен создать и заблокировать, но вроде при добавлении в geosite:ru-blocked есть какая-то модерация сообществом? И свежий ноунейм сайт надеюсь не пропустят\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"2946475","alias":"marus_space","fullname":"Мария Гопкало","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fd0b\u002Fd23\u002Fab3\u002Fd0bd23ab3145650c5ffc17d0ec8aa614.jpg","speciality":"React Frontend Developer","deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29809608","29810488"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29809552":{"id":"29809552","parentId":null,"level":0,"timePublished":"2026-04-10T15:11:11+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":3,"votesCount":3,"message":"\u003Cp\u003EМужчина, можно у вас роутер со всем этим купить? :)\u003C\u002Fp\u003E\u003Cp\u003EПредложение, кстати, на полном серьёзе.\u003C\u002Fp\u003E\u003Cp\u003EЭто как-то разом можно накатить на новый роутер или каждый раз руками ставить?\u003C\u002Fp\u003E\u003Cp\u003EА то готовая бизнес-идея.\u003C\u002Fp\u003E\u003Cp\u003EПонятно - до первого не штатного случая (там разберемся).\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"4422376","alias":"boXed","fullname":null,"avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29809650","29809940","29811222","29811902"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29809608":{"id":"29809608","parentId":"29809174","level":1,"timePublished":"2026-04-10T15:19:46+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EДа, замечание справедливое :)\u003C\u002Fp\u003E\u003Cp\u003EУ меня сейчас действительно схема proxy-by-default, так что любой домен, который не вынесен в direct, может уйти через VPN - в том числе и 2ip-подобные сервисы. Для более строгого privacy-first подхода логичнее делать default direct и отдельно перечислять нужные категории.\u003C\u002Fp\u003E\u003Cp\u003EПро geosite тоже верно: списки комьюнити-поддерживаемые и со временем меняются, так что здесь лучше держать политику маршрутизации осознанно, а не только полагаться на один большой блок.\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"5437821","alias":"ShyDamn","fullname":"Шубин Данила","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F12a\u002Fc86\u002F6a6\u002F12ac866a6c98714b4d5f6847ea75880e.jpeg","speciality":"FullStack-разработчик, CEO Synapsea Agency","deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":[],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29809650":{"id":"29809650","parentId":"29809552","level":1,"timePublished":"2026-04-10T15:24:20+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":3,"votesCount":3,"message":"\u003Cp\u003EПока что это недокрученный \"набор шагов\", скорее, но вполне реально реализовать автоустановку всей системы \"из коробки\".\u003Cbr\u003EПоэтому давайте я отлажу эту систему до идеала, так как много полезных советов получил от коллег в комментариях, и после уже спишемся с вами и обсудим ваш вопрос более подробно :)\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"5437821","alias":"ShyDamn","fullname":"Шубин Данила","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F12a\u002Fc86\u002F6a6\u002F12ac866a6c98714b4d5f6847ea75880e.jpeg","speciality":"FullStack-разработчик, CEO Synapsea Agency","deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29811102"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29809940":{"id":"29809940","parentId":"29809552","level":1,"timePublished":"2026-04-10T16:13:56+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":1,"votesCount":1,"message":"\u003Cp\u003EНа Авито подобного добра навалом.\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"1216692","alias":"iamezhik","fullname":null,"avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29810156","29810216"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29810156":{"id":"29810156","parentId":"29809940","level":2,"timePublished":"2026-04-10T16:57:38+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":5,"votesCount":5,"message":"\u003Cp\u003EВот не поверите - реально всю текущую неделю именно на Авито искал роутер под работу блок-сайтов.\u003C\u002Fp\u003E\u003Cp\u003EПообщался, наверное, с 12-15 продавцами.\u003C\u002Fp\u003E\u003Cp\u003EИз них 2-ое в теме (на мой взгляд).\u003C\u002Fp\u003E\u003Cp\u003EОдин прям достаточно глубоко в теме (но явно проигрывает автору этой статьи).\u003C\u002Fp\u003E\u003Cp\u003EОстальные продавцы - полное ощущение - по какому-то гайду прошивку накатили и дальше кто во что горазд.\u003C\u002Fp\u003E\u003Cp\u003EГлубокого понимания нет (я сам для себя тоже и WireGuard и Amnesia по \"букварю\" поставлю - но глубокого понимания нюансов у меня нет).\u003C\u002Fp\u003E\u003Cp\u003EЯ к чему - предложений такого уровня (читаю и перевожу со словарем) - много и я сам примерно так и могу.\u003C\u002Fp\u003E\u003Cp\u003EА вот некая система с подходом как выше - такое редко вижу.\u003C\u002Fp\u003E\u003Cp\u003EСо своей стороны я это называю \"профессионализм\" и готов за это платить.\u003C\u002Fp\u003E\u003Cp\u003EПри этом и у меня (а главное - у автора) есть понимание, что может у него и не идеальное Retail-издание, но он слушает и слышит - готов следовать дельным советам.\u003C\u002Fp\u003E\u003Cp\u003EПоэтому - я за такое бы платил.\u003C\u002Fp\u003E\u003Cp\u003EНичем не хуже скилла \"заменить смеситель\", \"установить розетки\u002FУЗО\", \"сварить кофе вкусно\".\u003C\u002Fp\u003E\u003Cp\u003EТочно стоит денег.\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"4422376","alias":"boXed","fullname":null,"avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29819080"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29810216":{"id":"29810216","parentId":"29809940","level":2,"timePublished":"2026-04-10T17:07:04+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EКонкретно за модель Cudy TR3000, которая упоминается в статье, есть даже целые видео-обзоры, к которым приложены ссылки на готовые прошивки. Прошить сам аппарат несложно, хоть и какие-то знания для этого нужны. Другое дело, насколько эти прошивки в плане ошибок обкатаны. Я списывался с человеком, который сейчас допиливает OpenWrt под этот аппарат. Недавно он мне написал, что выловил следующий баг - \"при отсутствие интернета V2rayA перезапускается и пишет лог, после заполнения лога, роутер выходит в режим аварии на низком уровне, переходит в режим “кирпич”.\u003C\u002Fp\u003E\u003Cp\u003EПо этому готовые решения не всегда подойдут. Если в них нет ошибок (а если есть?), то можно покупать готовое.\u003C\u002Fp\u003E\u003Cp\u003EСам жду TR3000. Буду пробовать. Если с vless на уровне роутера сложно, то для того же СмартТВ можно прикрутить ТВ-приставку на Android и туда накатить клиенты V2ray (и много чего ещё) и раздавать по кабелю уже с неё на ТВ. Я так около года смотрел Тюбик (без рекламы, бесплатно) на СмартТВ. На ПК тоже есть свои клиенты, на свою довольно-таки старую Windows 7, да ещё с поломанным .NET Framework, смог найти клиент. Недавно купил Mesh-систему Cudy M1200, в ней протокол WG работает из коробки, СмартТВ показывает и таким образом, даже меньше кнопок нажимать перед просмотром. Приставка теперь не нужна. Решил с роутером эксперимент провести.\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"248915","alias":"savant_a","fullname":null,"avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F381\u002Fdc2\u002Facf\u002F381dc2acf4027d3718473911b09f1813.jpg","speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29810244"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29810244":{"id":"29810244","parentId":"29810216","level":3,"timePublished":"2026-04-10T17:11:38+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":3,"votesCount":3,"message":"\u003Cp\u003EДа, готовые решения есть, но там главный вопрос - насколько они понятны и поддерживаемы.\u003C\u002Fp\u003E\u003Cp\u003EЯ как раз хотел уйти от истории «прошил по гайду и надеюсь, что всё ок», потому что при любом нестандартном баге (как ты описал) без понимания дальше уже тяжело.\u003C\u002Fp\u003E\u003Cp\u003EА так да, через приставку или клиенты на устройствах тоже вполне рабочий вариант, просто менее централизованный.\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"5437821","alias":"ShyDamn","fullname":"Шубин Данила","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F12a\u002Fc86\u002F6a6\u002F12ac866a6c98714b4d5f6847ea75880e.jpeg","speciality":"FullStack-разработчик, CEO Synapsea Agency","deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":[],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29810488":{"id":"29810488","parentId":"29809174","level":1,"timePublished":"2026-04-10T18:21:04+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":2,"votesCount":2,"message":"\u003Cp\u003EОтличный гайд. Но я не могу пока придумать решение против активного пробинга по разным ip со стороны МАХ и т.п. И я пока перестал маршрутизировать трафик на роутере, пока не найдется решение. Поставил ip MAX в блок, домашних научил выключать wifi, если нужен MAX\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"1641195","alias":"Aleksei_7bc","fullname":null,"avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29811066"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29811066":{"id":"29811066","parentId":"29810488","level":2,"timePublished":"2026-04-10T21:12:55+00:00","timeChanged":"2026-04-10T21:13:29+00:00","isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EУ меня все телефоны, на которых стоит МАХ, имеют фиксированный IP и маршрутизируются по нему в direct. А следующее правило - блокировка МАХ, как и у вас.\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"1621913","alias":"orthoxerox","fullname":null,"avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29812524"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29811084":{"id":"29811084","parentId":null,"level":0,"timePublished":"2026-04-10T21:22:23+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EВозникло несколько вопросов после прочтения статьи:\u003C\u002Fp\u003E\u003Col\u003E\u003Cli\u003E\u003Cp\u003EПравильно ли я понимаю, что списки серверов VPN и базы данных geoip и geosite скачиваются не через этот самый VPN, а потому провайдер спокойно видит, что вы их качаете, и, соответственно, может понять, что сейчас его будут дурить?\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003EВроде как IPv6 более лучший протокол (\u003Cem\u003Eвсе предпочитают использовать его\u003C\u002Fem\u003E из статьи), но вы сознательно его выключаете. В чём с ним сложность, почему нельзя всё то же самое настроить и для IPv6?\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003EБудут ли работать торренты в этой схеме? Там же peer-to-peer соединения, всё будет заворачиваться на VPN всё равно?\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003C\u002Fol\u003E","editorVersion":2,"author":{"id":"144026","alias":"Mingun","fullname":null,"avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F913\u002F0eb\u002F3ba\u002F9130eb3ba6c60bf548a9f7ab4703e68e.jpg","speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29811100"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29811100":{"id":"29811100","parentId":"29811084","level":1,"timePublished":"2026-04-10T21:27:05+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EХорошие вопросы :)\u003C\u002Fp\u003E\u003Col\u003E\u003Cli\u003E\u003Cp\u003EДа, всё это качается напрямую. Провайдер может это видеть, но это обычный HTTPS-трафик и редкие запросы.\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003EIPv6 можно настроить, но там сильно больше нюансов и легко словить утечку - я поэтому его просто отключил.\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003EТорренты будут работать, но пойдут через VPN и без входящих соединений раздача может быть хуже.\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003C\u002Fol\u003E","editorVersion":2,"author":{"id":"5437821","alias":"ShyDamn","fullname":"Шубин Данила","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F12a\u002Fc86\u002F6a6\u002F12ac866a6c98714b4d5f6847ea75880e.jpeg","speciality":"FullStack-разработчик, CEO Synapsea Agency","deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29813094","29813110"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29811102":{"id":"29811102","parentId":"29809650","level":2,"timePublished":"2026-04-10T21:27:15+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":1,"votesCount":1,"message":"\u003Cp\u003EТоже приобрел бы готовый комплект -)\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"5691555","alias":"everstrike","fullname":null,"avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29814796"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29811106":{"id":"29811106","parentId":"29807138","level":1,"timePublished":"2026-04-10T21:28:36+00:00","timeChanged":"2026-04-10T21:42:09+00:00","isSuspended":false,"status":"published","score":18,"votesCount":22,"message":"\u003Cp\u003EДа боже мой...\u003Cbr\u003E Статья очередной нейрослоп.\u003Cbr\u003E Сравнения, противопоставления, выводы, разрыв повествования, отсутствие структуры, ни одного скриншота.\u003Cbr\u003E А куда ставиться пакеты? А по какому пути лежат конфиги? Где команды для редактирования их?\u003Cbr\u003E А \"Проверка что всё работает\" вообще гениален. Никто и никогда в виде \"кода\" выкладывать набор команд, да еще с комментариями не будет.\u003C\u002Fp\u003E\u003Cp\u003Eps пишу под первым комментовм чтобы мой комментарий увидели побольше читающих.\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"788925","alias":"mukca","fullname":null,"avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F045\u002Ff7d\u002F01c\u002F045f7d01c2c6ae293f3a5d40f133ab14.png","speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29811118","29811136"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29811118":{"id":"29811118","parentId":"29811106","level":2,"timePublished":"2026-04-10T21:37:07+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":1,"votesCount":3,"message":"\u003Cp\u003EЕсли бы вы дочитали статью, то увидели бы и пути, и команды: \u003Ccode\u003E\u002Fetc\u002Fxray\u002Fconfig.json\u003C\u002Fcode\u003E, \u003Ccode\u003E\u002Fetc\u002Finit.d\u002Fxray-tproxy\u003C\u002Fcode\u003E, \u003Ccode\u003E\u002Fetc\u002Fhotplug.d\u002Fiface\u002F99-xray-fix\u003C\u002Fcode\u003E, \u003Ccode\u003E\u002Fusr\u002Fbin\u002Fadguardhome\u003C\u002Fcode\u003E, \u003Ccode\u003Enft list table ip xray\u003C\u002Fcode\u003E, \u003Ccode\u003Eip rule show\u003C\u002Fcode\u003E - это всё там есть.\u003C\u002Fp\u003E\u003Cp\u003EСкриншоты для SSH\u002Fnftables-конфига тут не обязательны: важнее рабочие команды и понятная схема. Если нужен формат «одна кнопка и всё само», то это просто не тот жанр статьи.\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"5437821","alias":"ShyDamn","fullname":"Шубин Данила","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F12a\u002Fc86\u002F6a6\u002F12ac866a6c98714b4d5f6847ea75880e.jpeg","speciality":"FullStack-разработчик, CEO Synapsea Agency","deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29811134","29914720","29929478"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29811134":{"id":"29811134","parentId":"29811118","level":3,"timePublished":"2026-04-10T21:44:24+00:00","timeChanged":"2026-04-10T21:45:37+00:00","isSuspended":false,"status":"published","score":4,"votesCount":4,"message":"\u003Cp\u003EАга части конфига \u002Fetc\u002Fxray\u002Fconfig.json размазаны рандомно по всей статьи, а путь конфига указан только в файле Init скрипта\u003Cbr\u003EА по ответу мне кажется что и ИИ бот отвечает :)\u003Cbr\u003Eps А как на вашем роуторе пожарить яичницу? :)\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"788925","alias":"mukca","fullname":null,"avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F045\u002Ff7d\u002F01c\u002F045f7d01c2c6ae293f3a5d40f133ab14.png","speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29811176"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29811136":{"id":"29811136","parentId":"29811106","level":2,"timePublished":"2026-04-10T21:45:32+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":2,"votesCount":6,"message":"\u003Cp\u003EБоже мой, какие нафиг скриншоты (ещё бы в ворд их предложили вставить)??? Текст и только текст, который легко скопировать, сохранить, переписать, а не голимый скриншот непонятно чего непонятного качества, который завтра на хостинге протухнет и ищи-свищи, чего там было «выставляем галочки как на скриншоте».\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"144026","alias":"Mingun","fullname":null,"avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F913\u002F0eb\u002F3ba\u002F9130eb3ba6c60bf548a9f7ab4703e68e.jpg","speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29811144"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29811144":{"id":"29811144","parentId":"29811136","level":3,"timePublished":"2026-04-10T21:50:23+00:00","timeChanged":"2026-04-10T21:51:07+00:00","isSuspended":false,"status":"published","score":4,"votesCount":6,"message":"\u003Cp\u003EВы настраивали на роуторе что-нибудь похожее как в статье?\u003Cbr\u003E Вот возьмите статью и читая ее и пользуюсь информацией из нее попробуйте настроить.\u003Cbr\u003E Не прочитать и положить на полочку, а прочитать и по статье настроить. \u003Cbr\u003E Сразу поймете что с статьей чтото не так, информации нахватает, огромная часть информации о настройки, о действияфх с роутерами, с конфигами, почему это так просто отсутствует.\u003Cbr\u003E Я думаю на этапе прошивки возникнут вопросы (на точно таком же роуторе), так как роуторы Cude шьются на openwrt через переходную прошивку насколько помню.\u003C\u002Fp\u003E\u003Cp\u003E \u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"788925","alias":"mukca","fullname":null,"avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F045\u002Ff7d\u002F01c\u002F045f7d01c2c6ae293f3a5d40f133ab14.png","speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29811184","29811192"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29811176":{"id":"29811176","parentId":"29811134","level":4,"timePublished":"2026-04-10T22:05:03+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":4,"message":"\u003Cp\u003EПуть к конфигу есть в статье, просто он не вынесен в отдельный “список путей”, а показан там, где это нужно по смыслу.\u003C\u002Fp\u003E\u003Cp\u003EСтатья - не справочник по OpenWrt, а разбор рабочей схемы. Поэтому конфиг, init-скрипт, nft и диагностика разбросаны по соответствующим разделам, а не сведены в один блок ради галочки.\u003C\u002Fp\u003E\u003Cp\u003EПро “ИИ-бота” удобно писать, когда не хочется читать внимательнее.\u003C\u002Fp\u003E\u003Cp\u003EА яичницу на этом роутере, к сожалению, не жарю :)\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"5437821","alias":"ShyDamn","fullname":"Шубин Данила","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F12a\u002Fc86\u002F6a6\u002F12ac866a6c98714b4d5f6847ea75880e.jpeg","speciality":"FullStack-разработчик, CEO Synapsea Agency","deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29811196"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29811184":{"id":"29811184","parentId":"29811144","level":4,"timePublished":"2026-04-10T22:09:52+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":1,"votesCount":5,"message":"\u003Cp\u003EВ статье есть отдельный блок про прошивку, включая переходную firmware и sysupgrade, как раз под Cudy TR3000.\u003C\u002Fp\u003E\u003Cp\u003EЕсли на этом этапе «возникают вопросы», значит дело не в отсутствии информации, а в том, как читается статья.\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"5437821","alias":"ShyDamn","fullname":"Шубин Данила","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F12a\u002Fc86\u002F6a6\u002F12ac866a6c98714b4d5f6847ea75880e.jpeg","speciality":"FullStack-разработчик, CEO Synapsea Agency","deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":[],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29811192":{"id":"29811192","parentId":"29811144","level":4,"timePublished":"2026-04-10T22:13:13+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":4,"message":"\u003Cp\u003EНу так и скажите конкретно, чего не хватает. А не серчайте на отсутствие скриншотов. У меня нет роутера, который бы я мог настроить по этой статье, но как появится, я ей воспользуюсь.\u003C\u002Fp\u003E\u003Cp\u003EПро переходную прошивку в статье сказано. И какую надо брать тоже. Вы бы сами ещё раз её внимательно перечитали, м? Но статья не про прошивку роутера, ей простительно. А то мы докатимся до того, что будем обсуждать, где: на Озоне, в DNS или на каком-нибудь Али этот роутер лучше купить.\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"144026","alias":"Mingun","fullname":null,"avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F913\u002F0eb\u002F3ba\u002F9130eb3ba6c60bf548a9f7ab4703e68e.jpg","speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29811206"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29811196":{"id":"29811196","parentId":"29811176","level":5,"timePublished":"2026-04-10T22:13:33+00:00","timeChanged":"2026-04-10T22:20:18+00:00","isSuspended":false,"status":"published","score":3,"votesCount":3,"message":"\u003Cp\u003EЯ воспользовался поиском и путь где находлится config.json указан ровно в одном месте, в инит скрипте.\u003Cbr\u003EА настройки которорые в нем содержатся начинаются с самого начала статьи, с заголовка \"Конфиг Xray: разбор по частям\", сразу как установили пакеты, но узнаем где же этот конфиг находится мы из скрипта запуска, все очень логично\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"788925","alias":"mukca","fullname":null,"avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F045\u002Ff7d\u002F01c\u002F045f7d01c2c6ae293f3a5d40f133ab14.png","speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":[],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29811206":{"id":"29811206","parentId":"29811192","level":5,"timePublished":"2026-04-10T22:21:26+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":2,"message":"\u003Cp\u003EЯ на ВБ заказывал, если интересно :)\u003C\u002Fp\u003E\u003Cp\u003EНо да, сделаю вторую часть: разложу спорные моменты подробнее и учту комментарии.\u003C\u002Fp\u003E\u003Cp\u003EИзначально статья была про саму схему (TPROXY + Xray + routing), а не про полный гайд «с нуля до продакшена», поэтому какие-то вещи оставил за рамками.\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"5437821","alias":"ShyDamn","fullname":"Шубин Данила","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F12a\u002Fc86\u002F6a6\u002F12ac866a6c98714b4d5f6847ea75880e.jpeg","speciality":"FullStack-разработчик, CEO Synapsea Agency","deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29814074","29815056"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29811222":{"id":"29811222","parentId":"29809552","level":1,"timePublished":"2026-04-10T22:31:52+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":4,"votesCount":6,"message":"\u003Cp\u003EИдете на озон, заказываете Routerich AX3000, он там 5к стоил. В нем уже с завода настроен WARP и Opera Turbo, стоит Zapret 2 и ZeroBlock. AWG, кстати, тоже. \u003Cbr\u003EВсе, можно смотреть, хоть и медленно. \u003Cbr\u003EЕсли хотите не медленно - покупаете у той же amnesia премиум-ключ - смотрите быстро. Все в веб-интерфейсе, с подробными инструкциями и консультациями в чате в телеге. \u003C\u002Fp\u003E\u003Cp\u003EЕсли еще чуть времени потратить, купить VPS, поставить на него awg 2.0 одной командой, все. \u003Cbr\u003EХочется больше контроля - 3X-UI (одной командой в консоли), настроить vless + XTLS + Reality прямо в вебе, получить ключ, вставить в роутер и все. \u003C\u002Fp\u003E\u003Cp\u003EP.S. Маршрутизация из коробки в ZeroBlock (который форк podkop, как я понял) - тоже есть. \u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"824255","alias":"venanen","fullname":null,"avatarUrl":null,"speciality":"Frontend Developer","deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29811926","29818332"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29811254":{"id":"29811254","parentId":null,"level":0,"timePublished":"2026-04-10T22:45:11+00:00","timeChanged":"2026-04-10T23:08:49+00:00","isSuspended":false,"status":"published","score":1,"votesCount":1,"message":"\u003Cp\u003Eну и после всех настроек роутера надо запустить в локальную сеть маха чтобы он разобрался куда роутер валит трафик к заблокированному контенту.\u003C\u002Fp\u003E\u003Cp\u003EВпрочем теперь этим будет заниматься не только мах но и валберисы с озонами и т.д. Хотя никто не мешает в js наших маркетплейсов внести небольшой код который будет пробивать внешний (зарубежный) ip и на компьютере при открытии сайта в браузере.\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cp\u003Eте кто считает что раздельное маршрутизирование спасает могут поэкспериментировать - \u003Ca href=\"https:\u002F\u002Fapi.ipify.org\" rel=\"noopener noreferrer nofollow\"\u003Ehttps:\u002F\u002Fapi.ipify.org\u003C\u002Fa\u003E или \u003Ca href=\"https:\u002F\u002Fipinfo.io\u002Fjson\" rel=\"noopener noreferrer nofollow\"\u003Ehttps:\u002F\u002Fipinfo.io\u002Fjson\u003C\u002Fa\u003E \u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"189228","alias":"zbot","fullname":null,"avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":[],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29811264":{"id":"29811264","parentId":null,"level":0,"timePublished":"2026-04-10T22:49:29+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EОчень круто и многое уже продумано, респект :) На гитлаб или около того планируете выкладывать? У вас сейчас изложено в порядке как думали и проблемы решали - это познавательно, погружает в контекст и будет здорово итоговый вариант для развертывания ) И да, про ipv6 имхо все-таки стоит проработать, через него обходы зачастую эффективнее работают.\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"79485","alias":"activa","fullname":"Макс","avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29811268"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29811268":{"id":"29811268","parentId":"29811264","level":1,"timePublished":"2026-04-10T22:52:18+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EСпасибо! Да, сейчас хочу сначала довести всё до более-менее стабильного состояния, а потом уже, возможно, выложить в более удобном для развёртывания виде, пока продумываю, как будет лучше.\u003C\u002Fp\u003E\u003Cp\u003EПро IPv6 согласен, тема важная - я отдельно это ещё добью, но в текущей схеме сознательно упростил и отключил его, чтобы не ловить утечки и лишние сюрпризы.\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"5437821","alias":"ShyDamn","fullname":"Шубин Данила","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F12a\u002Fc86\u002F6a6\u002F12ac866a6c98714b4d5f6847ea75880e.jpeg","speciality":"FullStack-разработчик, CEO Synapsea Agency","deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":[],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29811778":{"id":"29811778","parentId":null,"level":0,"timePublished":"2026-04-11T05:02:41+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":-1,"votesCount":1,"message":"\u003Cp\u003EНасколько безопасно пропускать трафик банков и госуслуг через кастомные прошивки наподобие OpenWRT ?\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"4025166","alias":"electrodummy","fullname":null,"avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29811916"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29811902":{"id":"29811902","parentId":"29809552","level":1,"timePublished":"2026-04-11T06:00:30+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EИли как принято в виндовс-среде - скачать 1 файл инсталлятора, проставить галочки, Далее, Далее, Готово. 21-й век давно, уже даже ИИ создан, а здесь всё как в 90-е, какие-то магические заклинания в командной строке, недоступные большинству пользователей интернета.\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"1019750","alias":"nixtonixto","fullname":null,"avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29811950"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29811916":{"id":"29811916","parentId":"29811778","level":1,"timePublished":"2026-04-11T06:05:56+00:00","timeChanged":"2026-04-11T06:17:03+00:00","isSuspended":false,"status":"published","score":1,"votesCount":1,"message":"\u003Cp\u003Eскажу банальность, но самое безопасное сейчас не пользоваться вообще никакими vpn, openwrt и полностью погрузится в заботливые обьятия ркн. Все остальное в той или иной мере не безопасно.\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cp\u003Eа так из боле-менее безопасного - что-то \"xray\" в режиме прокси, firefox с расширением \"firefox мульти-аккаунт контейнер\" и настройка проксирования для разных контейнеров. Ну а затем нужные сайты закреплять за выбранными контейнерами.\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"189228","alias":"zbot","fullname":null,"avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":[],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29811926":{"id":"29811926","parentId":"29811222","level":2,"timePublished":"2026-04-11T06:06:57+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":2,"votesCount":2,"message":"\u003Cp\u003EВот спасибо за совет.\u003C\u002Fp\u003E\u003Cp\u003EВот в этом и дело - вы так круто и понятно расписали, что даже ради интереса хочется купить этот роутер.\u003C\u002Fp\u003E\u003Cp\u003EА вот ни в описании этого продукта, ни в тысяча коментах - ничего подобного нет.\u003C\u002Fp\u003E\u003Cp\u003EМаксимум - поддержка молодцы, смотрю теперь ютуб (что не сильно отличает этот продукт от других в глазах покупателя).\u003C\u002Fp\u003E\u003Cp\u003EТак что снова приходим к важности понятного продукта, который закрывает потребности\u002Fболи человека.\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"4422376","alias":"boXed","fullname":null,"avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":[],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29811944":{"id":"29811944","parentId":null,"level":0,"timePublished":"2026-04-11T06:11:06+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":-4,"votesCount":4,"message":"\u003Cp\u003EВсё это красиво конечно но влес уже устаревший и его активно блочат.\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"3866584","alias":"Sorgarus","fullname":"Сергей","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F6a9\u002F664\u002Ff52\u002F6a9664f527e3f8baee379236b125cecb.gif","speciality":"Директор Интернета","deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29813446"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29811950":{"id":"29811950","parentId":"29811902","level":2,"timePublished":"2026-04-11T06:12:14+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EВсё так.\u003C\u002Fp\u003E\u003Cp\u003EИли готовый роутер (с обновлениями) или понятный инсталятор all-in-one ))\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"4422376","alias":"boXed","fullname":null,"avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29818952"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29812386":{"id":"29812386","parentId":null,"level":0,"timePublished":"2026-04-11T07:49:32+00:00","timeChanged":"2026-04-11T07:55:08+00:00","isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EЕсли я не ошибаюсь, все же в каком-то отношении использование локальных средств обхода выигрывает по безопасности за счет возможности настройки раздельной маршрутизации для разных приложений, конечно, при условии отсутствия уязвимостей SOCKS5 без авторизации. Проблема может возникнуть, например, если у жены \u002F ребенка \u002F гостя на устройстве есть вредоносное ПО, которое может пингануть ресурсы из реестра РКН, обнаружить факт использования средств обхода и скомпрометировать ваш ВПН. Хотя эту проблему можно частично решить с помощью каскадного ВПН (так, по крайней мере, впн сервер не попадет под подозрение) и польностью - с помощью белого списка устройств, трафик с которых нужно проксировать\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"1813121","alias":"aab137","fullname":null,"avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":[],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29812520":{"id":"29812520","parentId":null,"level":0,"timePublished":"2026-04-11T08:17:38+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EА как обстоят дела с поставщиками подписок, у которых требуется передача HWID клиента? В этом решении получится получить подписку или каким-то образом передать HWID? Понимаю, что из подписки можно выдернуть ключи для каждого сервера, а потом их добавить, но подписка все же удобнее, тк могут добавляться, убираться серверы.\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"549321","alias":"mejor-correo","fullname":null,"avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29813380"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29812522":{"id":"29812522","parentId":null,"level":0,"timePublished":"2026-04-11T08:17:39+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EНасколько хорошим решением будет развернуть все это дело на NanoPi?\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"5691905","alias":"FrvctvL","fullname":null,"avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29813392"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29812524":{"id":"29812524","parentId":"29811066","level":3,"timePublished":"2026-04-11T08:17:48+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003Eна компьютере в браузере сайты озона-валбериса и т.д. не открываете? Там тоже может присутствовать несложный js который сделает пару запросов к сайтам и отправит оба ip в базу пользователей квн.\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"5691999","alias":"alex_1065","fullname":null,"avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":[],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29812562":{"id":"29812562","parentId":null,"level":0,"timePublished":"2026-04-11T08:26:52+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EУдивительно, как у вас Filogic 820 тянет с такой низкой загрузкой tproxy + pppoe. Xiaomi AX3000T с таким же процем и активным tproxy дает 350-400 мбит в лучшем случае с маской распределения нагрузки на все ядра (правда mihomo, не xray, но суть одна). Поэтому 2.5 гбит wan с таким userspace-проксированием невозможно, да даже гигабит нереально. А под торрентами этот проц ложится даже на 300 мбитах. С таким конфигом лучше перейти на x86.\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"144648","alias":"Arhimag","fullname":"Денис Прибытков","avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29813402","29813572","29914726"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29813060":{"id":"29813060","parentId":null,"level":0,"timePublished":"2026-04-11T10:37:11+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EТС, у меня один вопрос! А зачем так усложнять? Есть же пакет V2RayA и все можно сделать без отдельных скриптов и прочего и главное - в 10 раз легче\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"4230484","alias":"nikulin_krd","fullname":null,"avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29813406"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29813094":{"id":"29813094","parentId":"29811100","level":2,"timePublished":"2026-04-11T10:47:33+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EПо пункту 2: вот интересно было бы почитать, что это за «куча нюансов» и как «легко словить утечку». И почему через IPv4 нет этой «кучи» и «тяжело».\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"144026","alias":"Mingun","fullname":null,"avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F913\u002F0eb\u002F3ba\u002F9130eb3ba6c60bf548a9f7ab4703e68e.jpg","speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":[],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29813110":{"id":"29813110","parentId":"29811100","level":2,"timePublished":"2026-04-11T10:51:35+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EКстати, забыл ещё спросить про категории в geoip и geosite. Как и откуда вообще узнать, какие существуют? Как решить практические вопросы: в какую категорию попадает этот домен \u002F IP (ну или хотя бы более простой: попадает ли этот домен \u002F IP в эту категорию)? Как добавить домен \u002F IP в категорию? Как создать свою категорию?\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"144026","alias":"Mingun","fullname":null,"avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F913\u002F0eb\u002F3ba\u002F9130eb3ba6c60bf548a9f7ab4703e68e.jpg","speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29813366"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29813168":{"id":"29813168","parentId":null,"level":0,"timePublished":"2026-04-11T11:06:58+00:00","timeChanged":"2026-04-11T11:07:46+00:00","isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cblockquote\u003E\u003Cp\u003E\u003Ccode\u003E> Flash: 128 МБ NAND (overlay ~44 МБ)\u003C\u002Fcode\u003E\u003C\u002Fp\u003E\u003C\u002Fblockquote\u003E\u003Cp\u003EВ сети есть мануалы прошивки c u-boot, после чего доступно около 95 Мб, и хватит места для ADH, Podkop, ещё и останется с запасом. \u003C\u002Fp\u003E\u003Cp\u003EКстати, этот роутер есть с флешем 256 Мб(китайская версия, либо перепаивают память), есть ещё Cudy TR30 - это то-же самое что и TR 3000 (вроде как коллаборация Cudy и Wildberries) \u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"244811","alias":"andrex77","fullname":null,"avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29813416","29914730"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29813342":{"id":"29813342","parentId":null,"level":0,"timePublished":"2026-04-11T12:12:21+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EОбращу внимание, что бывают домены, например \u003Ca href=\"https:\u002F\u002F17.doramalive.la\u002F\" rel=\"noopener noreferrer nofollow\"\u003E17.doramalive.la\u003C\u002Fa\u003E, контент которых работает только из рф, либо блочится некоторыми странами, поэтому полезно иметь еще список исключений доменов и ip, которые отправлять напрямую в ру-сегнент. Список доменов нужен потому, что на одном серваке могут находиться разные сайты, какие-то работают только из ру сети, несмотря на то, что находятся на сервере вне ру сети, а какие-то размещены могут быть там же, но блочить уже клиентов из ру сети.\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"84861","alias":"develmax","fullname":null,"avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29813424"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29813366":{"id":"29813366","parentId":"29813110","level":3,"timePublished":"2026-04-11T12:23:21+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":1,"votesCount":1,"message":"\u003Cp\u003EПо IPv6 - да, там реально больше нюансов. В Xray при \u003Ccode\u003EIPIfNonMatch\u003C\u002Fcode\u003E \u002F \u003Ccode\u003EIPOnDemand\u003C\u002Fcode\u003E домен может резолвиться и в IPv4, и в IPv6, а встроенный DNS работает с A и AAAA-записями, так что IPv6 нужно отдельно учитывать в DNS, firewall и маршрутизации; OpenWrt прямо отдельно предупреждает про отключение ISP prefix delegation, чтобы не ловить IPv6 leaks на VPN-клиенте. Я поэтому и упростил схему, отключив IPv6, а не потому что он “плохой” сам по себе.\u003C\u002Fp\u003E\u003Cp\u003EПо geoip\u002Fgeosite: \u003Ccode\u003Egeosite\u003C\u002Fcode\u003E - это список доменных наборов из репозитория \u003Ccode\u003Edomain-list-community\u003C\u002Fcode\u003E, где каждый файл в \u003Ccode\u003Edata\u002F\u003C\u002Fcode\u003E превращается в правило вида \u003Ccode\u003Egeosite:filename\u003C\u002Fcode\u003E, а внутри используются \u003Ccode\u003Einclude:\u003C\u002Fcode\u003E, \u003Ccode\u003Edomain:\u003C\u002Fcode\u003E, \u003Ccode\u003Efull:\u003C\u002Fcode\u003E, \u003Ccode\u003Ekeyword:\u003C\u002Fcode\u003E, \u003Ccode\u003Eregexp:\u003C\u002Fcode\u003E и атрибуты вроде \u003Ccode\u003E@ads\u003C\u002Fcode\u003E \u002F \u003Ccode\u003E@cn\u003C\u002Fcode\u003E; \u003Ccode\u003Egeoip\u003C\u002Fcode\u003E - отдельный проект с месячными релизами и CLI для сборки своих баз. Практически проще всего смотреть исходные списки и plain-экспорт (\u003Ccode\u003Edlc.dat_plain.yml\u003C\u002Fcode\u003E, текстовый вывод geoip CLI), а свою категорию делать либо отдельным файлом в \u003Ccode\u003Edata\u002F\u003C\u002Fcode\u003E, либо через CLI-сборку своих geoip-файлов.\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"5437821","alias":"ShyDamn","fullname":"Шубин Данила","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F12a\u002Fc86\u002F6a6\u002F12ac866a6c98714b4d5f6847ea75880e.jpeg","speciality":"FullStack-разработчик, CEO Synapsea Agency","deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":[],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29813380":{"id":"29813380","parentId":"29812520","level":1,"timePublished":"2026-04-11T12:27:10+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EДа, у меня подписка как раз тянется с передачей HWID - через заголовок \u003Ccode\u003Ex-hwid\u003C\u002Fcode\u003E в скрипте обновления.\u003C\u002Fp\u003E\u003Cp\u003EТо есть если провайдеру нужен HWID, это уже поддержано на уровне fetch-скрипта; роутерная схема тут не мешает.\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"5437821","alias":"ShyDamn","fullname":"Шубин Данила","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F12a\u002Fc86\u002F6a6\u002F12ac866a6c98714b4d5f6847ea75880e.jpeg","speciality":"FullStack-разработчик, CEO Synapsea Agency","deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":[],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29813392":{"id":"29813392","parentId":"29812522","level":1,"timePublished":"2026-04-11T12:29:24+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EДа, если речь про R5S\u002FR6S - это уже хороший вариант под такую схему. У R5S нормальный запас по CPU и 2\u002F4 ГБ RAM, у R6S запас ещё больше.\u003C\u002Fp\u003E\u003Cp\u003EДля моего стека критична именно память: Xray + geodata + AdGuard уже ощутимо едят RAM, так что 1-2 ГБ хватит спокойно.\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"5437821","alias":"ShyDamn","fullname":"Шубин Данила","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F12a\u002Fc86\u002F6a6\u002F12ac866a6c98714b4d5f6847ea75880e.jpeg","speciality":"FullStack-разработчик, CEO Synapsea Agency","deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":[],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29813402":{"id":"29813402","parentId":"29812562","level":1,"timePublished":"2026-04-11T12:30:10+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EДа, тут всё очень зависит от конкретной схемы и профиля нагрузки. У меня не “просто tproxy”, а TCP-only стек с Xray+Reality, QUIC отдельно режется, и в статье я как раз показывал, что роутер живёт без заметной нагрузки в простое и без проблем тянет обычный домашний трафик.\u003C\u002Fp\u003E\u003Cp\u003EПод торренты и сотни коротких соединений картина, конечно, хуже - это уже совсем другой сценарий. Но из этого не следует, что Filogic 820 “в принципе не тянет” такую схему: в моём случае узкое место сейчас скорее не CPU, а память\u002Foverlay и обвязка.\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"5437821","alias":"ShyDamn","fullname":"Шубин Данила","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F12a\u002Fc86\u002F6a6\u002F12ac866a6c98714b4d5f6847ea75880e.jpeg","speciality":"FullStack-разработчик, CEO Synapsea Agency","deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":[],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29813406":{"id":"29813406","parentId":"29813060","level":1,"timePublished":"2026-04-11T12:31:19+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EМожно и через V2RayA, если нужен простой рабочий вариант.\u003C\u002Fp\u003E\u003Cp\u003EЯ же специально пошёл в более сложную схему: чтобы был контроль над роутингом, DNS, QUIC, автоперезапуском, обновлением подписок и чтобы было понятно, что где ломается. Для домашнего роутера это уже не только “включить прокси”, а отдельная система.\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"5437821","alias":"ShyDamn","fullname":"Шубин Данила","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F12a\u002Fc86\u002F6a6\u002F12ac866a6c98714b4d5f6847ea75880e.jpeg","speciality":"FullStack-разработчик, CEO Synapsea Agency","deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29814004"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29813416":{"id":"29813416","parentId":"29813168","level":1,"timePublished":"2026-04-11T12:32:34+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EДа, вариант с 256 МБ и расширением overlay встречается, но это уже не базовая TR3000 из коробки, а отдельная ревизия\u002Fмодификация. У Cudy для TR3000 официально указаны 128 МБ flash, а в OpenWrt Wiki есть отдельные techdata и для 128 МБ, и для 256 МБ версии.\u003C\u002Fp\u003E\u003Cp\u003EПоэтому в статье я бы оставил цифры для обычной ревизии, а про 256 МБ и U-Boot-правки упомянул бы как про отдельный вариант. TR30, кстати, у Cudy в каталоге идёт как отдельная модель, а не просто другое название TR3000.\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"5437821","alias":"ShyDamn","fullname":"Шубин Данила","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F12a\u002Fc86\u002F6a6\u002F12ac866a6c98714b4d5f6847ea75880e.jpeg","speciality":"FullStack-разработчик, CEO Synapsea Agency","deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29813734"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29813418":{"id":"29813418","parentId":null,"level":0,"timePublished":"2026-04-11T12:32:48+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EПриветствую. Я конечно не эксперт. Но чем это принципиально отличается от какого нибудь подкопа, который устанавливается и настраивается минут за 10?\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"1046828","alias":"Shvved","fullname":null,"avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29813428"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29813424":{"id":"29813424","parentId":"29813342","level":1,"timePublished":"2026-04-11T12:33:37+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EДа, это хороший аргумент, поэтому я как раз и добавлял исключения по доменам, а не только по IP.\u003C\u002Fp\u003E\u003Cp\u003EНа практике одного \u003Ccode\u003Egeoip:ru\u003C\u002Fcode\u003E мало: сервис может жить на внешнем IP, но при этом нормально работать только из ру-сегмента, либо наоборот - блокировать клиентов из РФ. Так что доменные исключения тут реально нужны.\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"5437821","alias":"ShyDamn","fullname":"Шубин Данила","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F12a\u002Fc86\u002F6a6\u002F12ac866a6c98714b4d5f6847ea75880e.jpeg","speciality":"FullStack-разработчик, CEO Synapsea Agency","deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":[],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29813428":{"id":"29813428","parentId":"29813418","level":1,"timePublished":"2026-04-11T12:34:25+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EРазница в контроле.\u003C\u002Fp\u003E\u003Cp\u003EПодкоп - это когда установил и пользуешься, а тут ты сам собираешь схему и понимаешь, как всё работает и что чинить, если что.\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"5437821","alias":"ShyDamn","fullname":"Шубин Данила","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F12a\u002Fc86\u002F6a6\u002F12ac866a6c98714b4d5f6847ea75880e.jpeg","speciality":"FullStack-разработчик, CEO Synapsea Agency","deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29814552"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29813446":{"id":"29813446","parentId":"29811944","level":1,"timePublished":"2026-04-11T12:39:06+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":1,"votesCount":1,"message":"\u003Cp\u003EЧто есть из современного?\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"1438658","alias":"GeorgeII","fullname":null,"avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fc30\u002F88e\u002Fb27\u002Fc3088eb276b51ecf40c5ff03014b2afc.jpg","speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":[],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29813542":{"id":"29813542","parentId":null,"level":0,"timePublished":"2026-04-11T13:13:00+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EВезде у этого роутера в описании и на фото только 1 wan и 1 lan порт. совсем не сходится с \u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E\u003Cp\u003E\u003Cstrong\u003EПорты:\u003C\u002Fstrong\u003E 1× WAN 2.5GbE, 3× LAN 1GbE\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp\u003EЧто-то как-то слишком скромно для его цены. вот у меня в моем два лан порта используется - это мне рядом с ним еще свич ставить?\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"62330","alias":"veneamin","fullname":null,"avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F922\u002F5f1\u002F89a\u002F9225f189aa47d0d424e6b384c6a9ce83.jpg","speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29813584"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29813572":{"id":"29813572","parentId":"29812562","level":1,"timePublished":"2026-04-11T13:24:34+00:00","timeChanged":"2026-04-11T13:30:50+00:00","isSuspended":false,"status":"published","score":-1,"votesCount":1,"message":"\u003Cp\u003EПо моим тестам самый производительный впн на ax3000t это ядерный ipsec с шифром aes. Выдавал 900мбит и потреблял всего 40% проца если правильно помню. На втором месте openvpn с новым DCO (которого пока нет в репе openwrt), выдаёт около 600мбит. На 3 месте wireguard, выдаёт около 300мбит. (Возможно немного ошибся, точно не помню)\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"5500713","alias":"0ka","fullname":null,"avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":[],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29813584":{"id":"29813584","parentId":"29813542","level":1,"timePublished":"2026-04-11T13:29:33+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EТут опечатка в тексте. Спасибо, что обратили внимание.\u003C\u002Fp\u003E\u003Cp\u003EУ него действительно 1 WAN + 1 LAN, так как данная модель - это по сути Travel-роутер, компактный для того, чтобы брать в путешествия. Если нужно больше портов, то без свича не обойтись, да.\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"5437821","alias":"ShyDamn","fullname":"Шубин Данила","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F12a\u002Fc86\u002F6a6\u002F12ac866a6c98714b4d5f6847ea75880e.jpeg","speciality":"FullStack-разработчик, CEO Synapsea Agency","deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":[],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29813734":{"id":"29813734","parentId":"29813416","level":2,"timePublished":"2026-04-11T14:20:02+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EКстати, если уж упоминули подкоп, почему не подкоп?\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"1390478","alias":"moviq","fullname":null,"avatarUrl":null,"speciality":"Пользователь","deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29813750","29813994"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29813750":{"id":"29813750","parentId":"29813734","level":3,"timePublished":"2026-04-11T14:23:11+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cblockquote\u003E\u003Cp\u003EПодкоп - это когда установил и пользуешься, а тут ты сам собираешь схему понимаешь, как всё работает и что чинить, если что. \u003C\u002Fp\u003E\u003C\u002Fblockquote\u003E\u003Cp\u003EНиже уже отвечал на этот вопрос\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"5437821","alias":"ShyDamn","fullname":"Шубин Данила","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F12a\u002Fc86\u002F6a6\u002F12ac866a6c98714b4d5f6847ea75880e.jpeg","speciality":"FullStack-разработчик, CEO Synapsea Agency","deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":[],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29813994":{"id":"29813994","parentId":"29813734","level":3,"timePublished":"2026-04-11T15:42:40+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003Eпотому что без u-boot прошивки для Podkop и AGH не хватит места на флеше\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"244811","alias":"andrex77","fullname":null,"avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29814152"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29814004":{"id":"29814004","parentId":"29813406","level":2,"timePublished":"2026-04-11T15:45:24+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EТак это все настраивается в v2RayA)\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"4230484","alias":"nikulin_krd","fullname":null,"avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":[],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29814074":{"id":"29814074","parentId":"29811206","level":6,"timePublished":"2026-04-11T16:03:15+00:00","timeChanged":"2026-04-11T16:04:04+00:00","isSuspended":false,"status":"published","score":1,"votesCount":1,"message":"\u003Cp\u003E...а ещё они почему-то обожают вместо запятых ставить тире. Иногда это выглядит уместно. Видимо \"учитель\" так делал, а теперь они друг у друга нахватались и стали все так делать, в большинстве случаев даже игнорируя официальные правила русского языка.\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"1905133","alias":"hw_store","fullname":null,"avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fee0\u002F978\u002Fbc0\u002Fee0978bc00bae425e42f20c6374dbcc0.png","speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":[],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29814152":{"id":"29814152","parentId":"29813994","level":4,"timePublished":"2026-04-11T16:23:18+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EAgh не нужен\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"5500713","alias":"0ka","fullname":null,"avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":[],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29814552":{"id":"29814552","parentId":"29813428","level":2,"timePublished":"2026-04-11T18:28:28+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EПростите, но у меня все еще нет ответа на вопрос комментатора выше. Потому что я уже 1.5 года сижу на podkop и все прекрасно контролирую там. Включая geosite, списки, конфиг и роутинг. В сочетании с VPS + autoXRAY - 10 минут и у тебя готовое решение. \u003Cbr\u003EВыглядит пока просто как попытка написать свой собственный альтернативный способ, потому что \"было интересно\".\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"4831055","alias":"Zloymopga","fullname":"Яков","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F0ab\u002F57f\u002F325\u002F0ab57f325c9dfd2b9a0724af61655b11.jpeg","speciality":"MLOps Cluster Lead","deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29814824"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29814796":{"id":"29814796","parentId":"29811102","level":3,"timePublished":"2026-04-11T19:55:50+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":1,"votesCount":1,"message":"\u003Cp\u003EЯ за вами в очереди)\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"10323","alias":"ivvi","fullname":"Ив. Ви.","avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":[],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29814824":{"id":"29814824","parentId":"29814552","level":3,"timePublished":"2026-04-11T20:04:47+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EЕсли коротко, то да, Podkop удобнее, но моя схема гибче.\u003C\u002Fp\u003E\u003Cp\u003EPodkop - это готовое решение, и для большинства задач его более чем хватает.\u003C\u002Fp\u003E\u003Cp\u003EУ меня же цель была собрать всё руками, чтобы полностью контролировать роутинг, DNS и понимать, что происходит под капотом. Это сложнее, но даёт больше предсказуемости и гибкости.\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"5437821","alias":"ShyDamn","fullname":"Шубин Данила","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F12a\u002Fc86\u002F6a6\u002F12ac866a6c98714b4d5f6847ea75880e.jpeg","speciality":"FullStack-разработчик, CEO Synapsea Agency","deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29819086"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29815056":{"id":"29815056","parentId":"29811206","level":6,"timePublished":"2026-04-11T22:16:29+00:00","timeChanged":"2026-04-11T22:17:38+00:00","isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EВопрос по xray: сейчас проходит через dpi? Я настраивал awg тоннель до роутера, из роутера в ssh или warp на заграничный vps. Работает на всех опсосах (пока что). Но! Вот кажется, что можно сделать пошустрее, но бодаться с dpi не охото\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"4583373","alias":"True_form","fullname":null,"avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29815140","29815238"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29815140":{"id":"29815140","parentId":"29815056","level":7,"timePublished":"2026-04-11T22:54:27+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":1,"votesCount":1,"message":"\u003Cp\u003EДа, с Xray (VLESS + Reality) сейчас в целом нормально проходит через DPI, если сервер и конфиг адекватные.\u003C\u002Fp\u003E\u003Cp\u003E Твоя схема с awg\u002Fssh\u002Fwarp - это несколько слоёв туннелей, поэтому она более устойчива, но добавляет задержку и оверхед. Xray более прямой вариант, обычно быстрее, но сильнее зависит от того, как именно настроен сервер и маскировка. \u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"5437821","alias":"ShyDamn","fullname":"Шубин Данила","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F12a\u002Fc86\u002F6a6\u002F12ac866a6c98714b4d5f6847ea75880e.jpeg","speciality":"FullStack-разработчик, CEO Synapsea Agency","deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":[],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29815160":{"id":"29815160","parentId":null,"level":0,"timePublished":"2026-04-11T23:05:28+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":2,"message":"\u003Cp\u003EКак я вижу все подобные статьи:\u003C\u002Fp\u003E\u003Cfigure class=\"full-width \"\u003E\u003Cimg src=\"https:\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fupload_files\u002F458\u002Fd15\u002F234\u002F458d152349e8f5d3043dae90d488398c.png\" width=\"1024\" height=\"1536\"\u003E\u003C\u002Ffigure\u003E","editorVersion":2,"author":{"id":"153258","alias":"tklim","fullname":null,"avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29823128"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29815238":{"id":"29815238","parentId":"29815056","level":7,"timePublished":"2026-04-11T23:55:58+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":-1,"votesCount":1,"message":"\u003Cp\u003Eвообще ничего непонятно, при чём тут ssh и warp? если клиент будет на роутере, то очень вряд ли будет быстрее чем awg\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"5500713","alias":"0ka","fullname":null,"avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":[],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29818332":{"id":"29818332","parentId":"29811222","level":2,"timePublished":"2026-04-12T18:47:23+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EКупил я на likevps впску с 3x-ui сборкой, ни черта она не работает снаружи из РФ. Банальный ssh даже блочится, только ping и работает. Попросил знакомого из-за рубежа, он смог в ssh. Так что рабочая vps - тот ещё квест.\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"986924","alias":"bankir1980","fullname":"Максим","avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":[],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29818952":{"id":"29818952","parentId":"29811950","level":3,"timePublished":"2026-04-13T00:17:48+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EНу почему же? Вполне можно иишечке подбросить эту статью как исходный пункт для размышлений и вдохновения. В частности, оно и инсталлятор сгенерить может - но, как по мне, всё же лучше несколько скриптов с ручным контролем.\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"130153","alias":"sundmoon","fullname":null,"avatarUrl":null,"speciality":"Пользователь","deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":[],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29818962":{"id":"29818962","parentId":null,"level":0,"timePublished":"2026-04-13T00:28:32+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EАвтор, не обижайтесь но покритикую. Без fakedns, который сейчас стандарт-дефакто, ваша схема выглядит как велосипед. Особенно с adguard, который нет-нет, да уже подставлял. Только на dot и doh полагаться нельзя, надо использовать оба, а еще лучше иметь failsafe на случай падения обоих. Убирать их схемы dnsmasq считаю неправильным, лучше понять его и полюбить, зато в случае чего у вас роутер не останется без dns. Качать чужие dat, тем более в \u002Ftmp - а если не скачается? А если битым скачается? А если авторы листов сойдут с ума и раздуют до размера не совместимого с жизнью? Не используйте чужие листы, да геморно, но составляйте свои. quic не страшный. udp тоже проксируется, нет в этом никакой проблемы. ipv6 точно так же легко добавляется в схему, для него только что надо тот же fakedns настроить. Под ipset можно написать собственные обработчики, тот же firewall позволяет вам использовать user скрипты. Ну и схема в кучей серверов - я не знаю, может у вас используется куча дохнущих серверов из подписки, но по-моему лучше использовать 1-2 своих. В идеале вообще каскад (я думаю вы сами в состоянии придумать)... Просто не рационально заводить 5-6 vps и по пингу решать какую использовать. Завтра может все заблочат, выбирать будет не из чего. Хорошо если роутер у вас один, но вы же небось друзьям и знакомым схему настроили.\u003Cbr\u003EЯ не знаю в каком сообществе вы состоите, может сами через документацию всю схему придумывали (хотя есть паттерны, которые говорят что точно вдохновлялись), но таки поищите в тг...\u003Cbr\u003EСтатья крутая для понимания xray, хотя документация на мой взгляд у xray хорошая. Для средней прокачености юзера обычно хватает подкопа. Кстати у xray есть свои неочевидные минусы, может еще столкнетесь. Желаю вам успехов.\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"51167","alias":"SantaClaus16","fullname":"Александр","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F11c\u002Fe8a\u002F728\u002F11ce8a728281206bbfe2935bab3c67b6.jpg","speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29820336"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29819080":{"id":"29819080","parentId":"29810156","level":3,"timePublished":"2026-04-13T02:56:01+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EМне иногда кажется, что мы не на техническом сайте, на котором следят специалисты в айти.\u003C\u002Fp\u003E\u003Cp\u003EОдни не в состоянии найти one-line аналоги, вторые городят свои нейровелосипеды.\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"1678019","alias":"alamer","fullname":null,"avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29821766"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29819086":{"id":"29819086","parentId":"29814824","level":4,"timePublished":"2026-04-13T02:59:58+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EА какой в этом смысл если ядро у вас не поддерживает альтернативные протоколы?\u003C\u002Fp\u003E\u003Cp\u003EКажется работа ради работы\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"1678019","alias":"alamer","fullname":null,"avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":[],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29819552":{"id":"29819552","parentId":null,"level":0,"timePublished":"2026-04-13T05:26:43+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EЗдравствуйте! Видел комменты про подкоп, но ни одного не видел про passwall 2. Что скажете по поводу него? Там в целом же возможно настроить примерно тоже самое и поставить нужный dns (doh, adguard)... \u003C\u002Fp\u003E\u003Cp\u003EИ отдельно хотел бы поинтересоваться как вы ищете возможные утечки? Я в этом новичок\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"5694303","alias":"Lockerm","fullname":null,"avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29820342"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29820336":{"id":"29820336","parentId":"29818962","level":1,"timePublished":"2026-04-13T08:02:33+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EСпасибо за развёрнутый фидбек, это правда полезно. По DNS согласен, fakedns и запасной вариант выглядят крепче, я тут сознательно упростил схему, чтобы не раздувать её и не тащить лишние состояния, но это действительно компромисс. С dat-файлами тоже согласен, это не идеальный путь, просто так пока было проще собрать рабочий вариант. QUIC, UDP и IPv6 тоже можно прикрутить, но тогда схема заметно усложняется в сопровождении, а с несколькими серверами у меня это скорее из практики с подписками. В общем, статья не про единственно правильное решение, а про мой рабочий вариант и то, что в нём пришлось допиливать руками :)\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"5437821","alias":"ShyDamn","fullname":"Шубин Данила","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F12a\u002Fc86\u002F6a6\u002F12ac866a6c98714b4d5f6847ea75880e.jpeg","speciality":"FullStack-разработчик, CEO Synapsea Agency","deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":[],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29820342":{"id":"29820342","parentId":"29819552","level":1,"timePublished":"2026-04-13T08:04:22+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EPassWall2 по возможностям реально близок к тому, что у меня собрано вручную: там уже есть transparent proxy, smart routing по доменам и geo, DNS control с DoH\u002FDoT, load balancing, subscription support, node testing и failover, плюс он умеет работать с Xray и Sing-Box. То есть для многих задач это вполне готовый и более простой путь.\u003C\u002Fp\u003E\u003Cp\u003EА утечки я обычно ищу просто: смотрю, какой IP видит внешний сервис, какой DNS уходит наружу, и сверяю это с логами роутера. У PassWall2 для этого прямо есть свои логи \u003Ccode\u003E\u002Ftmp\u002Flog\u002Fpasswall2.log\u003C\u002Fcode\u003E и \u003Ccode\u003E\u002Ftmp\u002Flog\u002Fpasswall2_server.log\u003C\u002Fcode\u003E, а у Xray есть access\u002Ferror logging.\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"5437821","alias":"ShyDamn","fullname":"Шубин Данила","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F12a\u002Fc86\u002F6a6\u002F12ac866a6c98714b4d5f6847ea75880e.jpeg","speciality":"FullStack-разработчик, CEO Synapsea Agency","deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":[],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29821766":{"id":"29821766","parentId":"29819080","level":4,"timePublished":"2026-04-13T12:58:54+00:00","timeChanged":"2026-04-13T12:59:31+00:00","isSuspended":false,"status":"published","score":1,"votesCount":1,"message":"\u003Cp\u003Eуже и готовые роутеры с потенциально встроенными бекдорами от Авито продаванов начали рассматривать к применению.\u003C\u002Fp\u003E\u003Cp\u003Eраньше трава была зеленей...\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"4421906","alias":"JTNeXuS","fullname":null,"avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":[],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29822404":{"id":"29822404","parentId":null,"level":0,"timePublished":"2026-04-13T14:44:33+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EВ нынешних реалиях такой подход обречен выдать IP вашего VPN, когда рандомное российское приложение на одном из устройств проверит доступность условного web.telegram.org\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"1452654","alias":"0xBADC0FFE","fullname":null,"avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29897812"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29823128":{"id":"29823128","parentId":"29815160","level":1,"timePublished":"2026-04-13T16:44:26+00:00","timeChanged":"2026-04-13T16:46:17+00:00","isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003Eвот именно. Тут некоторые комментаторы наперегонки пытаются предоставить РКН варианты решения блокировки обхода трафика. Зачем? Понты? Типа, смотрите как я много знаю. Глупо. Никто так не помогает РКН, как пользователи Хабра. \u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"2716047","alias":"leominder","fullname":null,"avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F7bb\u002Fe41\u002Fc91\u002F7bbe41c9123735a63909ba651064e629.png","speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":[],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29824510":{"id":"29824510","parentId":null,"level":0,"timePublished":"2026-04-13T22:42:30+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EКогда эти богомерзкие ВПН на роутерах вымрут, даже если все идёт напрямую, кроме YouTube, шпионские приложение (в скором времени все, что разрабатывается внутри РФ) могут имитируя браузер \"открыть\" любое видео и получить токен с внешней ip адресом\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"3593707","alias":"denisgrigoriev04","fullname":null,"avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":[],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29828760":{"id":"29828760","parentId":null,"level":0,"timePublished":"2026-04-14T14:01:18+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":1,"votesCount":1,"message":"\u003Cp\u003Eчасто вижу такие идеи на роутере, но проблема в том, что тема настолько динамически изменяемая, что времени роутер донастравивать может не быть, и это угроза всей инфраструктуры, роутинг упал, какие ваши действия? если так хочется централизировать, минипк, на нем винда, виртуалбокс, виртуалка линукс, нода одной ремноволны, вход и выход, добавить инбонд сокс, прокинуть в кинетик, там профили подключений;)\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"4805899","alias":"d1vetrov","fullname":null,"avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F51e\u002F889\u002F3cc\u002F51e8893cc91e49f0576a5217af01d25d.jpeg","speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":[],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29897774":{"id":"29897774","parentId":null,"level":0,"timePublished":"2026-04-28T10:33:04+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EНу очень костыльно это всё. Актуальные версии Xray поддерживают создание Tun-интерфейса, куда либо правилами PBR либо статик-дефаулт-роутом можно смело отправлять весь трафик локалки (кроме BOGUS сетей и адреса VPS, разве что), затем geosite:ru и geoip:ru правилами роутинга отправлять в direct и прицепить для резолва доменов днс провайдера, а для всего остального fakedns и в прокси, смело включать quic в сниффинге и прокидывать udp в прокси.\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"2732441","alias":"YaNeTot","fullname":null,"avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29897988"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29897812":{"id":"29897812","parentId":"29822404","level":1,"timePublished":"2026-04-28T10:39:57+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EРешение - на выходной ноде ставим wg cloudflare warp (в базовой версии бесплатен) и заворачиваем direct outbound трафик через него, тогда рандомное российское приложение на выходе увидит ип-адрес клаудфлары, а не vps, удачи.\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"2732441","alias":"YaNeTot","fullname":null,"avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":[],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29897988":{"id":"29897988","parentId":"29897774","level":1,"timePublished":"2026-04-28T11:12:02+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":1,"votesCount":1,"message":"\u003Cp\u003EЯ с вами согласен, уже многое переработал и готовлю статью со всеми изменениями в работе роутера, на след неделе планирую выпустить ч2\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"5437821","alias":"ShyDamn","fullname":"Шубин Данила","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F12a\u002Fc86\u002F6a6\u002F12ac866a6c98714b4d5f6847ea75880e.jpeg","speciality":"FullStack-разработчик, CEO Synapsea Agency","deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":[],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29914720":{"id":"29914720","parentId":"29811118","level":3,"timePublished":"2026-05-02T00:22:43+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EНу это дикий нейрослоп как статья так и ответы, чувак попробуй сам абзац прочесть свой или хотя бы ручками ответ накалаякать, жесть просто.\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"5438001","alias":"tspu","fullname":null,"avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":[],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29914726":{"id":"29914726","parentId":"29812562","level":1,"timePublished":"2026-05-02T00:29:32+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":-1,"votesCount":1,"message":"\u003Cp\u003EНиче у автора не тянет там и близко, у меня такой же тр3000, он конечно крутой, но если вешать на него аналог пакетов для RR типо зероблока + запрет он около 250-300 выдает в вг тунельчик, проц как бы физически не выжмет выше, тем более с роутингами, физика она такая.\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"5438001","alias":"tspu","fullname":null,"avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29916682"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29914730":{"id":"29914730","parentId":"29813168","level":1,"timePublished":"2026-05-02T00:33:02+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EХватает 44 метров там для всего, убут это если совсем смелый, зероблок аналог подкопа ест меньше него , все остальное решается флешкой в юсб 3.0\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"5438001","alias":"tspu","fullname":null,"avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":["29914774"],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29914774":{"id":"29914774","parentId":"29914730","level":2,"timePublished":"2026-05-02T01:19:32+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EНе могу найти никакой инфы про зероблок, где скачать и т.п.\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"5500713","alias":"0ka","fullname":null,"avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":[],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29916682":{"id":"29916682","parentId":"29914726","level":2,"timePublished":"2026-05-02T15:04:34+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":0,"votesCount":0,"message":"\u003Cp\u003EСравнение некорректно из-за различной нагрузки на процессор. WireGuard шифрует весь трафик, тогда как XTLS-Vision оптимизирует работу с TLS, исключая двойное шифрование. Моя конфигурация также ограничивает QUIC, торренты и UDP, снижая общую нагрузку.\u003C\u002Fp\u003E\u003Cp\u003EПри обычном домашнем использовании TR3000 загружен на 5-8% ЦПУ, обеспечивая скорость выше 300 Мбит\u002Fс. При полноценном туннелировании всего трафика, включая торренты, показатели меняются.\u003C\u002Fp\u003E\u003Cp\u003EКонфигурации с полным туннелем, как Зероблок, имеют иные задачи и быстрее упираются в ограничения ЦПУ.\u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"5437821","alias":"ShyDamn","fullname":"Шубин Данила","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F12a\u002Fc86\u002F6a6\u002F12ac866a6c98714b4d5f6847ea75880e.jpeg","speciality":"FullStack-разработчик, CEO Synapsea Agency","deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":[],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false},"29929478":{"id":"29929478","parentId":"29811118","level":3,"timePublished":"2026-05-05T10:27:34+00:00","timeChanged":null,"isSuspended":false,"status":"published","score":1,"votesCount":1,"message":"\u003Cp\u003EДочитал статью до конца и даже не один раз. И знаете - вопросы примерно такие же как у автора выше. Именно структура статью жутко плавает. Разъяснение логики это прекрасно, но многим нужен именно структурированный мануал. А вот с ним беда.\u003C\u002Fp\u003E\u003Cp\u003EЯ понимаю, что многие вещи у вас просто в голове и вы просто не замечаете, что им нужно уделить внимание или как-то отметить. Но со стороны это вызывает ступор. К примеру самое, практически начало. Настройка конфигов Inbound и Outbound для Xray из статьи даже не очевидно, что блок Inbound относится к удаленному серверу с поднятым Xray на нем. При этом в Inbount у нас слушает порт 12345, а в outbound - запросы на 443. И вот сидишь и думаешь - ты где-то что-то проглядел или это автор забыл сменил порт-заглушку? \u003C\u002Fp\u003E\u003Cp\u003EТ.е. проблематика не в том, что нужна кнопка \"все работает\". Проблематика в общей структуре из которой не получается собрать готовы мануал для работы, что резко снижает ценность всей прочей информации. \u003C\u002Fp\u003E","editorVersion":2,"author":{"id":"114661","alias":"khulster","fullname":null,"avatarUrl":null,"speciality":null,"deleted":false},"isAuthor":false,"isPostAuthor":false,"isNew":false,"isFavorite":false,"isCanEdit":false,"timeEditAllowedTill":null,"children":[],"vote":null,"votePlus":null,"voteMinus":null,"isPinned":false}},"root":["29807138","29807522","29807556","29807770","29807898","29808936","29809174","29809552","29811084","29811254","29811264","29811778","29811944","29812386","29812520","29812522","29812562","29813060","29813168","29813342","29813418","29813542","29815160","29818962","29819552","29822404","29824510","29828760","29897774"],"cacheKey":"c4071f92-9bd0-443d-855d-d2a8c6c68ba5"}},"articlePinnedComments":{"1020866":{"refs":{},"commentIds":[]}},"searchCommentsResults":null,"pagesCount":null,"commentAccess":{},"scrollParents":{}},"publicationStats":{"statsInfo":{},"statsFunnels":{},"statsGraph":{},"defaultSuggest":{},"suggest":{},"timeTracker":{},"isUserActive":true,"otherPublicationStats":{}}};(function(){var s=document.currentScript||document.scripts[document.scripts.length-1];s.parentNode.removeChild(s);}());
Обновить

Прозрачный прокси-шлюз на роутере: VLESS + Reality + TPROXY на OpenWrt от А до Я

Уровень сложностиСложный
Время на прочтение29 мин
Охват и читатели97K
Всего голосов 97: ↑93 и ↓4+97
Комментарии112

Комментарии 112

Пробовал похожую тему с tproxy..правда не vless а другой протокол..в итоге были две проблемы ..перехват трафика в raw и зависающие сессии .. Потом перешёл с tproxy на tun..и стало лучше )

У меня схема отличается - я не использую raw вообще, у меня TPROXY через nftables в mangle/prerouting + policy routing.

Сессии не висят: Xray стабильно принимает соединения и маршрутизирует (и direct, и proxy), это видно по логам.

Так что, скорее всего, у тебя проблема была в конкретной реализации (raw/маршрутизация/loop), а не в TPROXY как таковом :)

Вполне возможно) реализация была адовая просто)

Да боже мой...
Статья очередной нейрослоп.
Сравнения, противопоставления, выводы, разрыв повествования, отсутствие структуры, ни одного скриншота.
А куда ставиться пакеты? А по какому пути лежат конфиги? Где команды для редактирования их?
А "Проверка что всё работает" вообще гениален. Никто и никогда в виде "кода" выкладывать набор команд, да еще с комментариями не будет.

ps пишу под первым комментовм чтобы мой комментарий увидели побольше читающих.

Если бы вы дочитали статью, то увидели бы и пути, и команды: /etc/xray/config.json, /etc/init.d/xray-tproxy, /etc/hotplug.d/iface/99-xray-fix, /usr/bin/adguardhome, nft list table ip xray, ip rule show - это всё там есть.

Скриншоты для SSH/nftables-конфига тут не обязательны: важнее рабочие команды и понятная схема. Если нужен формат «одна кнопка и всё само», то это просто не тот жанр статьи.

Ага части конфига /etc/xray/config.json размазаны рандомно по всей статьи, а путь конфига указан только в файле Init скрипта
А по ответу мне кажется что и ИИ бот отвечает :)
ps А как на вашем роуторе пожарить яичницу? :)

Путь к конфигу есть в статье, просто он не вынесен в отдельный “список путей”, а показан там, где это нужно по смыслу.

Статья - не справочник по OpenWrt, а разбор рабочей схемы. Поэтому конфиг, init-скрипт, nft и диагностика разбросаны по соответствующим разделам, а не сведены в один блок ради галочки.

Про “ИИ-бота” удобно писать, когда не хочется читать внимательнее.

А яичницу на этом роутере, к сожалению, не жарю :)

Я воспользовался поиском и путь где находлится config.json указан ровно в одном месте, в инит скрипте.
А настройки которорые в нем содержатся начинаются с самого начала статьи, с заголовка "Конфиг Xray: разбор по частям", сразу как установили пакеты, но узнаем где же этот конфиг находится мы из скрипта запуска, все очень логично

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

Дочитал статью до конца и даже не один раз. И знаете - вопросы примерно такие же как у автора выше. Именно структура статью жутко плавает. Разъяснение логики это прекрасно, но многим нужен именно структурированный мануал. А вот с ним беда.

Я понимаю, что многие вещи у вас просто в голове и вы просто не замечаете, что им нужно уделить внимание или как-то отметить. Но со стороны это вызывает ступор. К примеру самое, практически начало. Настройка конфигов Inbound и Outbound для Xray из статьи даже не очевидно, что блок Inbound относится к удаленному серверу с поднятым Xray на нем. При этом в Inbount у нас слушает порт 12345, а в outbound - запросы на 443. И вот сидишь и думаешь - ты где-то что-то проглядел или это автор забыл сменил порт-заглушку?

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

Боже мой, какие нафиг скриншоты (ещё бы в ворд их предложили вставить)??? Текст и только текст, который легко скопировать, сохранить, переписать, а не голимый скриншот непонятно чего непонятного качества, который завтра на хостинге протухнет и ищи-свищи, чего там было «выставляем галочки как на скриншоте».

Вы настраивали на роуторе что-нибудь похожее как в статье?
Вот возьмите статью и читая ее и пользуюсь информацией из нее попробуйте настроить.
Не прочитать и положить на полочку, а прочитать и по статье настроить.
Сразу поймете что с статьей чтото не так, информации нахватает, огромная часть информации о настройки, о действияфх с роутерами, с конфигами, почему это так просто отсутствует.
Я думаю на этапе прошивки возникнут вопросы (на точно таком же роуторе), так как роуторы Cude шьются на openwrt через переходную прошивку насколько помню.

 

В статье есть отдельный блок про прошивку, включая переходную firmware и sysupgrade, как раз под Cudy TR3000.

Если на этом этапе «возникают вопросы», значит дело не в отсутствии информации, а в том, как читается статья.

Ну так и скажите конкретно, чего не хватает. А не серчайте на отсутствие скриншотов. У меня нет роутера, который бы я мог настроить по этой статье, но как появится, я ей воспользуюсь.

Про переходную прошивку в статье сказано. И какую надо брать тоже. Вы бы сами ещё раз её внимательно перечитали, м? Но статья не про прошивку роутера, ей простительно. А то мы докатимся до того, что будем обсуждать, где: на Озоне, в DNS или на каком-нибудь Али этот роутер лучше купить.

Я на ВБ заказывал, если интересно :)

Но да, сделаю вторую часть: разложу спорные моменты подробнее и учту комментарии.

Изначально статья была про саму схему (TPROXY + Xray + routing), а не про полный гайд «с нуля до продакшена», поэтому какие-то вещи оставил за рамками.

...а ещё они почему-то обожают вместо запятых ставить тире. Иногда это выглядит уместно. Видимо "учитель" так делал, а теперь они друг у друга нахватались и стали все так делать, в большинстве случаев даже игнорируя официальные правила русского языка.

Вопрос по xray: сейчас проходит через dpi? Я настраивал awg тоннель до роутера, из роутера в ssh или warp на заграничный vps. Работает на всех опсосах (пока что). Но! Вот кажется, что можно сделать пошустрее, но бодаться с dpi не охото

Да, с Xray (VLESS + Reality) сейчас в целом нормально проходит через DPI, если сервер и конфиг адекватные.

Твоя схема с awg/ssh/warp - это несколько слоёв туннелей, поэтому она более устойчива, но добавляет задержку и оверхед. Xray более прямой вариант, обычно быстрее, но сильнее зависит от того, как именно настроен сервер и маскировка.

вообще ничего непонятно, при чём тут ssh и warp? если клиент будет на роутере, то очень вряд ли будет быстрее чем awg

REDIRECT (DNAT) — подменяет адрес назначения на 127.0.0.1:порт. Проблема: оригинальный адрес теряется. 

Вообще-то нет. Точно не знаю как оно работает, но проходит любой TCP трафик. Ядро как-то сохраняет оригинальный адрес и передаёт xray. Для UDP трафика почему-то не работает и нужен tproxy

Он не «сохраняется сам».

При REDIRECT адрес реально теряется (DNAT на 127.0.0.1), а то, что у тебя работает с TCP - это либо sniffing (SNI/Host), либо SO_ORIGINAL_DST. Это не универсально.

TPROXY как раз и нужен, чтобы получать оригинальный адрес нативно

Да нету у меня сниффинга

iptables -t nat -A PREROUTING -p tcp -j REDIRECT --to-ports 10

sing-box redirect inbound видит айпи адрес любого tcp протокола, xray тоже, нормальная универсальность. Если нужен только TCP то настраивается в 10 раз проще чем tproxy (можно прямо из веб интерфейса openwrt добавить правило).

*

Скорее всего у тебя это через SO_ORIGINAL_DST работает, а не потому что ядро само «сохраняет адрес».

С REDIRECT это в целом ок для TCP, но всё равно не совсем универсально и зависит от реализации. Поэтому TPROXY обычно используют, когда нужна более предсказуемая прозрачная схема.

"network": "tcp"

Я думаю 90% читателей будут ожидать проксирование и UDP трафика в том числе. А тут такая подстава.

Кстати QUIC блочат даже при рабочем UDP в целях увеличения производительности vless:

  1. Xtls не делает двойное шифрование https трафика, т.е. quic трафик будет жрать ресурсы проца на шифрование

  2. Quic имеет свой congestion control, ваш прокси сервер тоже, получается два congestion control что даёт производительность ниже

  3. UDP over TCP потребляет больше ресурсов проца

Тут только TCP сделан специально.

QUIC (UDP 443) я режу, чтобы весь трафик уходил в TCP и нормально проксировался. UDP в прозрачной схеме - отдельный уровень сложности.

Так что это не «подстава», а осознанное решение :)

я и так из статьи понял зачем вы блокируете quic. здесь речь не о вас, а о читателях.

напишите в самом верху что весь UDP трафик пропущен напрямую.

и вообще, вроде бы не хватает 1 строчки nft чтобы UDP проксился, но точно не уверен

*

Да, хорошее замечание, можно это явнее подчеркнуть, позднее сверху помечу про UDP, спасибо :)

Но также замечу, что там не совсем «1 строчка»: для UDP нужно ещё inbound в Xray, отдельные правила и нюансы с тем же QUIC. Я поэтому решил не усложнять и оставить только TCP.

для UDP нужно ещё inbound в Xray

network: tcp поменять на network: tcp,udp или вообще убрать строчку, по дефолту вроде оба слушает. quic как блокировался так пусть и блокируется (ниже писал почему)

Спасибо, подумаю над этим

Транспорт — чистый TCP (не WebSocket, не gRPC). TCP даёт минимальную задержку и не добавляет лишних заголовков.

а так же даёт потенциальную сибирскую блокировку (моя последняя статья), стоило бы добавить что лучше иметь в запасе gRPC траспорт (из-за встроенного мультиплекса).

кстати TCP транспорт так-то не даёт минимальную задержку, тратится много времени на tcp и tls хендшейки, если впска где-то далеко в США, то это очень заметно (ещё одна причина быть фанатом протоколов с мультиплексом, хотя там есть минусы)

Да, тут согласен - TCP не серебряная пуля, особенно если сервер далеко, хендшейки начинают чувствоваться.

Я скорее имел в виду, что TCP без WS/gRPC даёт минимальный оверхед в рамках самой схемы (без лишних слоёв), а не вообще минимальную задержку в любых условиях.

Про запасной транспорт тоже хорошее замечание :)
gRPC/WS с мультиплексом действительно могут быть полезны как fallback, особенно если начинаются блокировки или высокий RTT, спасибо, добавлю это в схему позднее

P.S. из практики: основная проблема, с которой столкнулся - забивающийся overlay.

В итоге вынес Xray и AdGuard в /tmp, а при загрузке разворачиваю их из архивов через init-скрипт и запускаю. Так удалось разгрузить overlay и всё работает стабильно.

Простите, не могу не написать)

телевизор вообще не умеет в VLESS

умеет

колонка — тем более

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

У меня Яндекс Алиса с выходом на TV, которая поддерживает ютуб. Но при этом с момента блокировки ютуба она не смогла загрузить мне ни одного видео толком. Теперь может :)

Ааа. Тогда логично. Я подумал у вас Станция без видео и ТВ/приставка на Android TV.

Судя по роутингу, запрос 2ip.io выдает адрес впн, и любой подключенный к роутеру телефон с максом может спокойно слить ip. Лучше роутинг "перевернуть" и geosite:ru-blocked заворачивать в впн, а по умолчанию сделать путь в директ. Хотя лучше не лениться и прописать категории нужных сайтов руками (geosite:youtube, geosite:telegram и т.д.). Вдруг список geosite:ru-blocked просто бесконечно разрастается и старые адреса никто не проверяет, и ушлый ркнщик найдет уже неиспользуемый домен из этого списка и запилит на нем ip чекер? А приложения встроят к себе обращения на него, и поймают всех с простым роутингом geosite:ru-blocked -> vpn. Он конечно может и новый домен создать и заблокировать, но вроде при добавлении в geosite:ru-blocked есть какая-то модерация сообществом? И свежий ноунейм сайт надеюсь не пропустят

Да, замечание справедливое :)

У меня сейчас действительно схема proxy-by-default, так что любой домен, который не вынесен в direct, может уйти через VPN - в том числе и 2ip-подобные сервисы. Для более строгого privacy-first подхода логичнее делать default direct и отдельно перечислять нужные категории.

Про geosite тоже верно: списки комьюнити-поддерживаемые и со временем меняются, так что здесь лучше держать политику маршрутизации осознанно, а не только полагаться на один большой блок.

Отличный гайд. Но я не могу пока придумать решение против активного пробинга по разным ip со стороны МАХ и т.п. И я пока перестал маршрутизировать трафик на роутере, пока не найдется решение. Поставил ip MAX в блок, домашних научил выключать wifi, если нужен MAX

У меня все телефоны, на которых стоит МАХ, имеют фиксированный IP и маршрутизируются по нему в direct. А следующее правило - блокировка МАХ, как и у вас.

на компьютере в браузере сайты озона-валбериса и т.д. не открываете? Там тоже может присутствовать несложный js который сделает пару запросов к сайтам и отправит оба ip в базу пользователей квн.

Мужчина, можно у вас роутер со всем этим купить? :)

Предложение, кстати, на полном серьёзе.

Это как-то разом можно накатить на новый роутер или каждый раз руками ставить?

А то готовая бизнес-идея.

Понятно - до первого не штатного случая (там разберемся).

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

Тоже приобрел бы готовый комплект -)

Я за вами в очереди)

На Авито подобного добра навалом.

Вот не поверите - реально всю текущую неделю именно на Авито искал роутер под работу блок-сайтов.

Пообщался, наверное, с 12-15 продавцами.

Из них 2-ое в теме (на мой взгляд).

Один прям достаточно глубоко в теме (но явно проигрывает автору этой статьи).

Остальные продавцы - полное ощущение - по какому-то гайду прошивку накатили и дальше кто во что горазд.

Глубокого понимания нет (я сам для себя тоже и WireGuard и Amnesia по "букварю" поставлю - но глубокого понимания нюансов у меня нет).

Я к чему - предложений такого уровня (читаю и перевожу со словарем) - много и я сам примерно так и могу.

А вот некая система с подходом как выше - такое редко вижу.

Со своей стороны я это называю "профессионализм" и готов за это платить.

При этом и у меня (а главное - у автора) есть понимание, что может у него и не идеальное Retail-издание, но он слушает и слышит - готов следовать дельным советам.

Поэтому - я за такое бы платил.

Ничем не хуже скилла "заменить смеситель", "установить розетки/УЗО", "сварить кофе вкусно".

Точно стоит денег.

Мне иногда кажется, что мы не на техническом сайте, на котором следят специалисты в айти.

Одни не в состоянии найти one-line аналоги, вторые городят свои нейровелосипеды.

уже и готовые роутеры с потенциально встроенными бекдорами от Авито продаванов начали рассматривать к применению.

раньше трава была зеленей...

Конкретно за модель Cudy TR3000, которая упоминается в статье, есть даже целые видео-обзоры, к которым приложены ссылки на готовые прошивки. Прошить сам аппарат несложно, хоть и какие-то знания для этого нужны. Другое дело, насколько эти прошивки в плане ошибок обкатаны. Я списывался с человеком, который сейчас допиливает OpenWrt под этот аппарат. Недавно он мне написал, что выловил следующий баг - "при отсутствие интернета V2rayA перезапускается и пишет лог, после заполнения лога, роутер выходит в режим аварии на низком уровне, переходит в режим “кирпич”.

По этому готовые решения не всегда подойдут. Если в них нет ошибок (а если есть?), то можно покупать готовое.

Сам жду TR3000. Буду пробовать. Если с vless на уровне роутера сложно, то для того же СмартТВ можно прикрутить ТВ-приставку на Android и туда накатить клиенты V2ray (и много чего ещё) и раздавать по кабелю уже с неё на ТВ. Я так около года смотрел Тюбик (без рекламы, бесплатно) на СмартТВ. На ПК тоже есть свои клиенты, на свою довольно-таки старую Windows 7, да ещё с поломанным .NET Framework, смог найти клиент. Недавно купил Mesh-систему Cudy M1200, в ней протокол WG работает из коробки, СмартТВ показывает и таким образом, даже меньше кнопок нажимать перед просмотром. Приставка теперь не нужна. Решил с роутером эксперимент провести.

Да, готовые решения есть, но там главный вопрос - насколько они понятны и поддерживаемы.

Я как раз хотел уйти от истории «прошил по гайду и надеюсь, что всё ок», потому что при любом нестандартном баге (как ты описал) без понимания дальше уже тяжело.

А так да, через приставку или клиенты на устройствах тоже вполне рабочий вариант, просто менее централизованный.

Идете на озон, заказываете Routerich AX3000, он там 5к стоил. В нем уже с завода настроен WARP и Opera Turbo, стоит Zapret 2 и ZeroBlock. AWG, кстати, тоже.
Все, можно смотреть, хоть и медленно.
Если хотите не медленно - покупаете у той же amnesia премиум-ключ - смотрите быстро. Все в веб-интерфейсе, с подробными инструкциями и консультациями в чате в телеге.

Если еще чуть времени потратить, купить VPS, поставить на него awg 2.0 одной командой, все.
Хочется больше контроля - 3X-UI (одной командой в консоли), настроить vless + XTLS + Reality прямо в вебе, получить ключ, вставить в роутер и все.

P.S. Маршрутизация из коробки в ZeroBlock (который форк podkop, как я понял) - тоже есть.

Вот спасибо за совет.

Вот в этом и дело - вы так круто и понятно расписали, что даже ради интереса хочется купить этот роутер.

А вот ни в описании этого продукта, ни в тысяча коментах - ничего подобного нет.

Максимум - поддержка молодцы, смотрю теперь ютуб (что не сильно отличает этот продукт от других в глазах покупателя).

Так что снова приходим к важности понятного продукта, который закрывает потребности/боли человека.

Купил я на likevps впску с 3x-ui сборкой, ни черта она не работает снаружи из РФ. Банальный ssh даже блочится, только ping и работает. Попросил знакомого из-за рубежа, он смог в ssh. Так что рабочая vps - тот ещё квест.

Или как принято в виндовс-среде - скачать 1 файл инсталлятора, проставить галочки, Далее, Далее, Готово. 21-й век давно, уже даже ИИ создан, а здесь всё как в 90-е, какие-то магические заклинания в командной строке, недоступные большинству пользователей интернета.

Всё так.

Или готовый роутер (с обновлениями) или понятный инсталятор all-in-one ))

Ну почему же? Вполне можно иишечке подбросить эту статью как исходный пункт для размышлений и вдохновения. В частности, оно и инсталлятор сгенерить может - но, как по мне, всё же лучше несколько скриптов с ручным контролем.

Возникло несколько вопросов после прочтения статьи:

  1. Правильно ли я понимаю, что списки серверов VPN и базы данных geoip и geosite скачиваются не через этот самый VPN, а потому провайдер спокойно видит, что вы их качаете, и, соответственно, может понять, что сейчас его будут дурить?

  2. Вроде как IPv6 более лучший протокол (все предпочитают использовать его из статьи), но вы сознательно его выключаете. В чём с ним сложность, почему нельзя всё то же самое настроить и для IPv6?

  3. Будут ли работать торренты в этой схеме? Там же peer-to-peer соединения, всё будет заворачиваться на VPN всё равно?

Хорошие вопросы :)

  1. Да, всё это качается напрямую. Провайдер может это видеть, но это обычный HTTPS-трафик и редкие запросы.

  2. IPv6 можно настроить, но там сильно больше нюансов и легко словить утечку - я поэтому его просто отключил.

  3. Торренты будут работать, но пойдут через VPN и без входящих соединений раздача может быть хуже.

По пункту 2: вот интересно было бы почитать, что это за «куча нюансов» и как «легко словить утечку». И почему через IPv4 нет этой «кучи» и «тяжело».

Кстати, забыл ещё спросить про категории в geoip и geosite. Как и откуда вообще узнать, какие существуют? Как решить практические вопросы: в какую категорию попадает этот домен / IP (ну или хотя бы более простой: попадает ли этот домен / IP в эту категорию)? Как добавить домен / IP в категорию? Как создать свою категорию?

По IPv6 - да, там реально больше нюансов. В Xray при IPIfNonMatch / IPOnDemand домен может резолвиться и в IPv4, и в IPv6, а встроенный DNS работает с A и AAAA-записями, так что IPv6 нужно отдельно учитывать в DNS, firewall и маршрутизации; OpenWrt прямо отдельно предупреждает про отключение ISP prefix delegation, чтобы не ловить IPv6 leaks на VPN-клиенте. Я поэтому и упростил схему, отключив IPv6, а не потому что он “плохой” сам по себе.

По geoip/geosite: geosite - это список доменных наборов из репозитория domain-list-community, где каждый файл в data/ превращается в правило вида geosite:filename, а внутри используются include:, domain:, full:, keyword:, regexp: и атрибуты вроде @ads / @cn; geoip - отдельный проект с месячными релизами и CLI для сборки своих баз. Практически проще всего смотреть исходные списки и plain-экспорт (dlc.dat_plain.yml, текстовый вывод geoip CLI), а свою категорию делать либо отдельным файлом в data/, либо через CLI-сборку своих geoip-файлов.

ну и после всех настроек роутера надо запустить в локальную сеть маха чтобы он разобрался куда роутер валит трафик к заблокированному контенту.

Впрочем теперь этим будет заниматься не только мах но и валберисы с озонами и т.д. Хотя никто не мешает в js наших маркетплейсов внести небольшой код который будет пробивать внешний (зарубежный) ip и на компьютере при открытии сайта в браузере.

те кто считает что раздельное маршрутизирование спасает могут поэкспериментировать - https://api.ipify.org или https://ipinfo.io/json

Очень круто и многое уже продумано, респект :) На гитлаб или около того планируете выкладывать? У вас сейчас изложено в порядке как думали и проблемы решали - это познавательно, погружает в контекст и будет здорово итоговый вариант для развертывания ) И да, про ipv6 имхо все-таки стоит проработать, через него обходы зачастую эффективнее работают.

Спасибо! Да, сейчас хочу сначала довести всё до более-менее стабильного состояния, а потом уже, возможно, выложить в более удобном для развёртывания виде, пока продумываю, как будет лучше.

Про IPv6 согласен, тема важная - я отдельно это ещё добью, но в текущей схеме сознательно упростил и отключил его, чтобы не ловить утечки и лишние сюрпризы.

Насколько безопасно пропускать трафик банков и госуслуг через кастомные прошивки наподобие OpenWRT ?

скажу банальность, но самое безопасное сейчас не пользоваться вообще никакими vpn, openwrt и полностью погрузится в заботливые обьятия ркн. Все остальное в той или иной мере не безопасно.

а так из боле-менее безопасного - что-то "xray" в режиме прокси, firefox с расширением "firefox мульти-аккаунт контейнер" и настройка проксирования для разных контейнеров. Ну а затем нужные сайты закреплять за выбранными контейнерами.

Всё это красиво конечно но влес уже устаревший и его активно блочат.

Что есть из современного?

Если я не ошибаюсь, все же в каком-то отношении использование локальных средств обхода выигрывает по безопасности за счет возможности настройки раздельной маршрутизации для разных приложений, конечно, при условии отсутствия уязвимостей SOCKS5 без авторизации. Проблема может возникнуть, например, если у жены / ребенка / гостя на устройстве есть вредоносное ПО, которое может пингануть ресурсы из реестра РКН, обнаружить факт использования средств обхода и скомпрометировать ваш ВПН. Хотя эту проблему можно частично решить с помощью каскадного ВПН (так, по крайней мере, впн сервер не попадет под подозрение) и польностью - с помощью белого списка устройств, трафик с которых нужно проксировать

А как обстоят дела с поставщиками подписок, у которых требуется передача HWID клиента? В этом решении получится получить подписку или каким-то образом передать HWID? Понимаю, что из подписки можно выдернуть ключи для каждого сервера, а потом их добавить, но подписка все же удобнее, тк могут добавляться, убираться серверы.

Да, у меня подписка как раз тянется с передачей HWID - через заголовок x-hwid в скрипте обновления.

То есть если провайдеру нужен HWID, это уже поддержано на уровне fetch-скрипта; роутерная схема тут не мешает.

Насколько хорошим решением будет развернуть все это дело на NanoPi?

Да, если речь про R5S/R6S - это уже хороший вариант под такую схему. У R5S нормальный запас по CPU и 2/4 ГБ RAM, у R6S запас ещё больше.

Для моего стека критична именно память: Xray + geodata + AdGuard уже ощутимо едят RAM, так что 1-2 ГБ хватит спокойно.

Удивительно, как у вас Filogic 820 тянет с такой низкой загрузкой tproxy + pppoe. Xiaomi AX3000T с таким же процем и активным tproxy дает 350-400 мбит в лучшем случае с маской распределения нагрузки на все ядра (правда mihomo, не xray, но суть одна). Поэтому 2.5 гбит wan с таким userspace-проксированием невозможно, да даже гигабит нереально. А под торрентами этот проц ложится даже на 300 мбитах. С таким конфигом лучше перейти на x86.

Да, тут всё очень зависит от конкретной схемы и профиля нагрузки. У меня не “просто tproxy”, а TCP-only стек с Xray+Reality, QUIC отдельно режется, и в статье я как раз показывал, что роутер живёт без заметной нагрузки в простое и без проблем тянет обычный домашний трафик.

Под торренты и сотни коротких соединений картина, конечно, хуже - это уже совсем другой сценарий. Но из этого не следует, что Filogic 820 “в принципе не тянет” такую схему: в моём случае узкое место сейчас скорее не CPU, а память/overlay и обвязка.

По моим тестам самый производительный впн на ax3000t это ядерный ipsec с шифром aes. Выдавал 900мбит и потреблял всего 40% проца если правильно помню. На втором месте openvpn с новым DCO (которого пока нет в репе openwrt), выдаёт около 600мбит. На 3 месте wireguard, выдаёт около 300мбит. (Возможно немного ошибся, точно не помню)

Ниче у автора не тянет там и близко, у меня такой же тр3000, он конечно крутой, но если вешать на него аналог пакетов для RR типо зероблока + запрет он около 250-300 выдает в вг тунельчик, проц как бы физически не выжмет выше, тем более с роутингами, физика она такая.

Сравнение некорректно из-за различной нагрузки на процессор. WireGuard шифрует весь трафик, тогда как XTLS-Vision оптимизирует работу с TLS, исключая двойное шифрование. Моя конфигурация также ограничивает QUIC, торренты и UDP, снижая общую нагрузку.

При обычном домашнем использовании TR3000 загружен на 5-8% ЦПУ, обеспечивая скорость выше 300 Мбит/с. При полноценном туннелировании всего трафика, включая торренты, показатели меняются.

Конфигурации с полным туннелем, как Зероблок, имеют иные задачи и быстрее упираются в ограничения ЦПУ.

ТС, у меня один вопрос! А зачем так усложнять? Есть же пакет V2RayA и все можно сделать без отдельных скриптов и прочего и главное - в 10 раз легче

Можно и через V2RayA, если нужен простой рабочий вариант.

Я же специально пошёл в более сложную схему: чтобы был контроль над роутингом, DNS, QUIC, автоперезапуском, обновлением подписок и чтобы было понятно, что где ломается. Для домашнего роутера это уже не только “включить прокси”, а отдельная система.

Так это все настраивается в v2RayA)

> Flash: 128 МБ NAND (overlay ~44 МБ)

В сети есть мануалы прошивки c u-boot, после чего доступно около 95 Мб, и хватит места для ADH, Podkop, ещё и останется с запасом.

Кстати, этот роутер есть с флешем 256 Мб(китайская версия, либо перепаивают память), есть ещё Cudy TR30 - это то-же самое что и TR 3000 (вроде как коллаборация Cudy и Wildberries)

Да, вариант с 256 МБ и расширением overlay встречается, но это уже не базовая TR3000 из коробки, а отдельная ревизия/модификация. У Cudy для TR3000 официально указаны 128 МБ flash, а в OpenWrt Wiki есть отдельные techdata и для 128 МБ, и для 256 МБ версии.

Поэтому в статье я бы оставил цифры для обычной ревизии, а про 256 МБ и U-Boot-правки упомянул бы как про отдельный вариант. TR30, кстати, у Cudy в каталоге идёт как отдельная модель, а не просто другое название TR3000.

Кстати, если уж упоминули подкоп, почему не подкоп?

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

Ниже уже отвечал на этот вопрос

потому что без u-boot прошивки для Podkop и AGH не хватит места на флеше

Agh не нужен

Хватает 44 метров там для всего, убут это если совсем смелый, зероблок аналог подкопа ест меньше него , все остальное решается флешкой в юсб 3.0

Не могу найти никакой инфы про зероблок, где скачать и т.п.

Обращу внимание, что бывают домены, например 17.doramalive.la, контент которых работает только из рф, либо блочится некоторыми странами, поэтому полезно иметь еще список исключений доменов и ip, которые отправлять напрямую в ру-сегнент. Список доменов нужен потому, что на одном серваке могут находиться разные сайты, какие-то работают только из ру сети, несмотря на то, что находятся на сервере вне ру сети, а какие-то размещены могут быть там же, но блочить уже клиентов из ру сети.

Да, это хороший аргумент, поэтому я как раз и добавлял исключения по доменам, а не только по IP.

На практике одного geoip:ru мало: сервис может жить на внешнем IP, но при этом нормально работать только из ру-сегмента, либо наоборот - блокировать клиентов из РФ. Так что доменные исключения тут реально нужны.

Приветствую. Я конечно не эксперт. Но чем это принципиально отличается от какого нибудь подкопа, который устанавливается и настраивается минут за 10?

Разница в контроле.

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

Простите, но у меня все еще нет ответа на вопрос комментатора выше. Потому что я уже 1.5 года сижу на podkop и все прекрасно контролирую там. Включая geosite, списки, конфиг и роутинг. В сочетании с VPS + autoXRAY - 10 минут и у тебя готовое решение.
Выглядит пока просто как попытка написать свой собственный альтернативный способ, потому что "было интересно".

Если коротко, то да, Podkop удобнее, но моя схема гибче.

Podkop - это готовое решение, и для большинства задач его более чем хватает.

У меня же цель была собрать всё руками, чтобы полностью контролировать роутинг, DNS и понимать, что происходит под капотом. Это сложнее, но даёт больше предсказуемости и гибкости.

А какой в этом смысл если ядро у вас не поддерживает альтернативные протоколы?

Кажется работа ради работы

Везде у этого роутера в описании и на фото только 1 wan и 1 lan порт. совсем не сходится с

  • Порты: 1× WAN 2.5GbE, 3× LAN 1GbE

Что-то как-то слишком скромно для его цены. вот у меня в моем два лан порта используется - это мне рядом с ним еще свич ставить?

Тут опечатка в тексте. Спасибо, что обратили внимание.

У него действительно 1 WAN + 1 LAN, так как данная модель - это по сути Travel-роутер, компактный для того, чтобы брать в путешествия. Если нужно больше портов, то без свича не обойтись, да.

Как я вижу все подобные статьи:

вот именно. Тут некоторые комментаторы наперегонки пытаются предоставить РКН варианты решения блокировки обхода трафика. Зачем? Понты? Типа, смотрите как я много знаю. Глупо. Никто так не помогает РКН, как пользователи Хабра.

Автор, не обижайтесь но покритикую. Без fakedns, который сейчас стандарт-дефакто, ваша схема выглядит как велосипед. Особенно с adguard, который нет-нет, да уже подставлял. Только на dot и doh полагаться нельзя, надо использовать оба, а еще лучше иметь failsafe на случай падения обоих. Убирать их схемы dnsmasq считаю неправильным, лучше понять его и полюбить, зато в случае чего у вас роутер не останется без dns. Качать чужие dat, тем более в /tmp - а если не скачается? А если битым скачается? А если авторы листов сойдут с ума и раздуют до размера не совместимого с жизнью? Не используйте чужие листы, да геморно, но составляйте свои. quic не страшный. udp тоже проксируется, нет в этом никакой проблемы. ipv6 точно так же легко добавляется в схему, для него только что надо тот же fakedns настроить. Под ipset можно написать собственные обработчики, тот же firewall позволяет вам использовать user скрипты. Ну и схема в кучей серверов - я не знаю, может у вас используется куча дохнущих серверов из подписки, но по-моему лучше использовать 1-2 своих. В идеале вообще каскад (я думаю вы сами в состоянии придумать)... Просто не рационально заводить 5-6 vps и по пингу решать какую использовать. Завтра может все заблочат, выбирать будет не из чего. Хорошо если роутер у вас один, но вы же небось друзьям и знакомым схему настроили.
Я не знаю в каком сообществе вы состоите, может сами через документацию всю схему придумывали (хотя есть паттерны, которые говорят что точно вдохновлялись), но таки поищите в тг...
Статья крутая для понимания xray, хотя документация на мой взгляд у xray хорошая. Для средней прокачености юзера обычно хватает подкопа. Кстати у xray есть свои неочевидные минусы, может еще столкнетесь. Желаю вам успехов.

Спасибо за развёрнутый фидбек, это правда полезно. По DNS согласен, fakedns и запасной вариант выглядят крепче, я тут сознательно упростил схему, чтобы не раздувать её и не тащить лишние состояния, но это действительно компромисс. С dat-файлами тоже согласен, это не идеальный путь, просто так пока было проще собрать рабочий вариант. QUIC, UDP и IPv6 тоже можно прикрутить, но тогда схема заметно усложняется в сопровождении, а с несколькими серверами у меня это скорее из практики с подписками. В общем, статья не про единственно правильное решение, а про мой рабочий вариант и то, что в нём пришлось допиливать руками :)

Здравствуйте! Видел комменты про подкоп, но ни одного не видел про passwall 2. Что скажете по поводу него? Там в целом же возможно настроить примерно тоже самое и поставить нужный dns (doh, adguard)...

И отдельно хотел бы поинтересоваться как вы ищете возможные утечки? Я в этом новичок

PassWall2 по возможностям реально близок к тому, что у меня собрано вручную: там уже есть transparent proxy, smart routing по доменам и geo, DNS control с DoH/DoT, load balancing, subscription support, node testing и failover, плюс он умеет работать с Xray и Sing-Box. То есть для многих задач это вполне готовый и более простой путь.

А утечки я обычно ищу просто: смотрю, какой IP видит внешний сервис, какой DNS уходит наружу, и сверяю это с логами роутера. У PassWall2 для этого прямо есть свои логи /tmp/log/passwall2.log и /tmp/log/passwall2_server.log, а у Xray есть access/error logging.

В нынешних реалиях такой подход обречен выдать IP вашего VPN, когда рандомное российское приложение на одном из устройств проверит доступность условного web.telegram.org

Решение - на выходной ноде ставим wg cloudflare warp (в базовой версии бесплатен) и заворачиваем direct outbound трафик через него, тогда рандомное российское приложение на выходе увидит ип-адрес клаудфлары, а не vps, удачи.

Когда эти богомерзкие ВПН на роутерах вымрут, даже если все идёт напрямую, кроме YouTube, шпионские приложение (в скором времени все, что разрабатывается внутри РФ) могут имитируя браузер "открыть" любое видео и получить токен с внешней ip адресом

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

Ну очень костыльно это всё. Актуальные версии Xray поддерживают создание Tun-интерфейса, куда либо правилами PBR либо статик-дефаулт-роутом можно смело отправлять весь трафик локалки (кроме BOGUS сетей и адреса VPS, разве что), затем geosite:ru и geoip:ru правилами роутинга отправлять в direct и прицепить для резолва доменов днс провайдера, а для всего остального fakedns и в прокси, смело включать quic в сниффинге и прокидывать udp в прокси.

Я с вами согласен, уже многое переработал и готовлю статью со всеми изменениями в работе роутера, на след неделе планирую выпустить ч2

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации