Сегодня побывал на подкасте у Андрея Соколова! 🎙️
Обсудили множество IT-тем, но спойлерить не буду — ждите выпуск на его YouTube-канале! 🔥
Для меня это был первый подобный опыт, и, думаю, для дебюта вышло неплохо. Мне даже понравилось.
Обсудили множество IT-тем, но спойлерить не буду — ждите выпуск на его YouTube-канале! 🔥
Для меня это был первый подобный опыт, и, думаю, для дебюта вышло неплохо. Мне даже понравилось.
🔥25👍6👏5 3❤🔥2❤1
Сегодня на BEER в Минске я рассказывал о нашем OkkoCDN и о том, как мы достигли раздачи в 6 Tb/s. Записи не будет, так что придется поверить на слово.
Что касается организации, мероприятие, конечно, уступает конференциям и митапам в СПб и Москве, но коллеги старались, и я благодарен за возможность выступить.
Несколько нюансов: перед моим выступлением сломался кликер, на презентации у части текста слетела кодировка, и шрифты «поехали». Аудитория не была целевой для тематики CDN, и ровно посередине доклада один из слушателей (он же следующий спикер) решил уточнить, не собираюсь ли я учить его, как правильно оптимизировать серверы под высокие нагрузки. 🤷♂️
Эх, знать бы, как всё правильно настраивается, и как взять и сразу всё сделать верно! 😅
Все мои выступления направлены на то, чтобы поделиться нашей историей развития. Я понимаю, что можно было бы сделать всё более оптимально и надежно, но мне нравится обсуждать с коллегами их решения до или после выступления, брать идеи для реализации или просто вступать с кем-то в дискуссию (в хорошем смысле этого слова).
P.S. Если кто-то точно знает, как сделать что-то правильно (неважно что), напишите мне! 😅
Что касается организации, мероприятие, конечно, уступает конференциям и митапам в СПб и Москве, но коллеги старались, и я благодарен за возможность выступить.
Несколько нюансов: перед моим выступлением сломался кликер, на презентации у части текста слетела кодировка, и шрифты «поехали». Аудитория не была целевой для тематики CDN, и ровно посередине доклада один из слушателей (он же следующий спикер) решил уточнить, не собираюсь ли я учить его, как правильно оптимизировать серверы под высокие нагрузки. 🤷♂️
Эх, знать бы, как всё правильно настраивается, и как взять и сразу всё сделать верно! 😅
Все мои выступления направлены на то, чтобы поделиться нашей историей развития. Я понимаю, что можно было бы сделать всё более оптимально и надежно, но мне нравится обсуждать с коллегами их решения до или после выступления, брать идеи для реализации или просто вступать с кем-то в дискуссию (в хорошем смысле этого слова).
P.S. Если кто-то точно знает, как сделать что-то правильно (неважно что), напишите мне! 😅
🔥15👍7🗿4🤯1
Пишет мне тут HR из одной компании X, название которой не имеет никакого значения. Пишет, конечно, с предложением пройти собеседование на должность Y.
HR оказался настойчивый, стандартные ответы вроде «спасибо, но сейчас для меня не актуально» не сработали. У меня было время, поэтому еще немного пообщались.
По описанию вакансии все звучало просто великолепно: налаженные процессы, автоматизация, много свободы в выборе архитектурных решений, вся команда профессионалы и тд. В общем, казалось, что стоит только прийти и получать деньги, ведь должность пустует.
Но вспомнил про теорию Жоп:
Чем все закончилось? Ничем особенным. Я немного расспросил о процессах найма, чтобы, возможно, что-то перенять для себя. Но, к сожалению, HR не знает, как на самом деле все работает внутри компании(оно и понятно), а тратить дальше время не хотелось.
А про теорию Жоп рекомендую почитать, периодически возвращаюсь к этому размышлению.
P.S. Я не HR, но пользуясь случаем напишу, что наш CDN растет и мы ищем инженера растить его дальше. Кому интересно - пишете в личку или откликайтесь на сайте.
HR оказался настойчивый, стандартные ответы вроде «спасибо, но сейчас для меня не актуально» не сработали. У меня было время, поэтому еще немного пообщались.
По описанию вакансии все звучало просто великолепно: налаженные процессы, автоматизация, много свободы в выборе архитектурных решений, вся команда профессионалы и тд. В общем, казалось, что стоит только прийти и получать деньги, ведь должность пустует.
Но вспомнил про теорию Жоп:
Если Вам предлагают возглавить новый проект, либо занять какую то должность, да что угодно - знайте, там Вас ждет Жопа. Иначе не предложили бы, а сами бы справились. Равно как и если Вы ожидаете избавиться от надоевшей Вам сейчас деятельности, надеясь вырваться из "этого ада" и заняться "чем то новеньким" - будьте готовы встретиться с Большой Жопой.
Чем все закончилось? Ничем особенным. Я немного расспросил о процессах найма, чтобы, возможно, что-то перенять для себя. Но, к сожалению, HR не знает, как на самом деле все работает внутри компании(оно и понятно), а тратить дальше время не хотелось.
А про теорию Жоп рекомендую почитать, периодически возвращаюсь к этому размышлению.
P.S. Я не HR, но пользуясь случаем напишу, что наш CDN растет и мы ищем инженера растить его дальше. Кому интересно - пишете в личку или откликайтесь на сайте.
Хабр
[Пятничное] Теория Жоп
Эту полу-шуточную теорию о проектном управлении я излагал коллегам по ИТ цеху лет 15 назад, и тогда же неоднократно слышал советы загрузить этот текст на Хабр, но руки не дошли. На днях, разгребая...
👍16❤3🦄3😁1
Отличный доклад о том, что происходит с HTTP-запросом до того, как он доберется до вашего бэкенда.
Автор разбирает весь жизненный цикл HTTP-запроса — от отправки клиентом до обработки сервером, но с акцентом на то, что происходит до выполнения бизнес-логики.
Основные этапы:
1. TCP handshake
2. TLS handshake
3. Отправка запроса на клиенте
4. Обработка запроса на сервере
В конце — несколько практических советов по оптимизации.
Да, темы базовые, но, как верно замечает автор, фундаментальные знания — ключ к реальной производительности.
Автор разбирает весь жизненный цикл HTTP-запроса — от отправки клиентом до обработки сервером, но с акцентом на то, что происходит до выполнения бизнес-логики.
Основные этапы:
1. TCP handshake
2. TLS handshake
3. Отправка запроса на клиенте
4. Обработка запроса на сервере
В конце — несколько практических советов по оптимизации.
Да, темы базовые, но, как верно замечает автор, фундаментальные знания — ключ к реальной производительности.
HAProxy Technologies
Anatomy of a Request: Beyond backend processing
The request journey: TCP handshakes, TLS encryption, user/kernel space interaction, decryption, parsing, decoding, processing, and their associated hardware resource costs.
👍15🔥5
Распределение HTTP-запросов по версиям протокола
(данные по России за последние 6 месяцев, источник: radar.cloudflare.com)
🟢 HTTP/1: 32% (▼4%)
🟢 HTTP/2: 45% (▲4%)
🟢 HTTP/3: 23% (без изменений)
Рост доли HTTP/2 свидетельствует о постепенном отказе от HTTP/1. Однако HTTP/3 пока не показывает динамики, несмотря на его казалось бы «очевидные» преимущества.
Порассуждаем, почему в РФ не растет доля HTTP/3:
1️⃣ Ограниченная поддержка клиентов: не все старые устройства и браузеры поддерживают HTTP/3.
2️⃣ Инфраструктурные сложности: требуется обновление серверного ПО (например, модуль HTTP/3 для Nginx/Apache), необходима настройка TLS 1.3 и проверка корректной работы UDP-трафика. Некоторые провайдеры блокируют UDP на порту 443 (включая домашние сети и даже публичный Wi-Fi, например, в «Сапсане»).
3️⃣ Вопрос целесообразности: затраты на внедрение могут не окупаться, особенно если текущие решения (HTTP/2) работают стабильно
4️⃣ Блокировки РКН
Мое мнение: кто хотел уже внедрили, остальные не сильно торопятся по причинам выше.
P.S. Только начинаю погружаться в HTTP/3, буду рад услышать про ваш опыт.
(данные по России за последние 6 месяцев, источник: radar.cloudflare.com)
Рост доли HTTP/2 свидетельствует о постепенном отказе от HTTP/1. Однако HTTP/3 пока не показывает динамики, несмотря на его казалось бы «очевидные» преимущества.
Порассуждаем, почему в РФ не растет доля HTTP/3:
Мое мнение: кто хотел уже внедрили, остальные не сильно торопятся по причинам выше.
P.S. Только начинаю погружаться в HTTP/3, буду рад услышать про ваш опыт.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥3 3
NETWORK_ENGINEER_MOST_ASKED_INTERVIEW_QUESTIONS_WITH_DETAILED_ANSWERS.pdf
6.2 MB
Нашёл в сети крутой файлик - NETWORK ENGINEER MOST ASKED INTERVIEW QUESTIONS.
Пригодится и тем, кто ищет работу, и тем, кто её предлагает. Также работает как сжатый справочник по ключевым темам (TCP/IP, L2, L3, протоколы маршрутизации, DHCP, DNS, безопасность и др).
Рекомендую к сохранению.
Пригодится и тем, кто ищет работу, и тем, кто её предлагает. Также работает как сжатый справочник по ключевым темам (TCP/IP, L2, L3, протоколы маршрутизации, DHCP, DNS, безопасность и др).
Рекомендую к сохранению.
🔥21
В блоге HAProxy рассказывают, как их балансировщик нагрузки впервые обработал более 2 миллионов HTTP-запросов в секунду на одном сервере!
Что использовали для теста:
🟢 AWS инстанс c6gn.16xlarge (64 ядра, 100 Gb/s сеть)
🟢 HAProxy версии 2.4
🟢 Процессор ARM (Graviton2)
Ключевые результаты:
🟢 2,08 млн запросов/сек без шифрования
🟢 2,01 млн запросов/сек с TLSv3-шифрованием
🟢 Добавочная задержка от Haproxy — менее 0,4 мс
Отдельно отмечу про привязку сетевых прерываний (IRQ) к отдельным ядрам, чтобы они не мешали обработке запросов самим HAProxy. Мы к этому тоже пришли в свое время на кэш-серверах CDN, когда пытались разогнать производительность на максимум.
Что использовали для теста:
Ключевые результаты:
Отдельно отмечу про привязку сетевых прерываний (IRQ) к отдельным ядрам, чтобы они не мешали обработке запросов самим HAProxy. Мы к этому тоже пришли в свое время на кэш-серверах CDN, когда пытались разогнать производительность на максимум.
Please open Telegram to view this post
VIEW IN TELEGRAM
HAProxy Technologies
HAProxy Exceeds 2 Million RPS on a Single Arm Instance
First ever software load balancer exceeds 2 million RPS on a single Arm instance! We're near an era where you get the world’s fastest load balancer for free.
👍11🔥4 3 1
В марте 2026 года Cisco запускает новый трек экзаменов в области беспроводных технологий - Wireless (CCNP + CCIE).
В рамках нового трека будут проверяться знания по Wi-Fi 6/7, Meraki и др., а из CCNP Enterprise уберут все, что связано с Wi-Fi.
Если кто-то этого ждал, возможно, это хорошие новости, но я таких не знаю🤷
Лично я никогда не любил ни экзамены Cisco, ни Wi-Fi, хотя пару контроллеров и десяток точек доступа настроил (домашний не в счет) - этой участи редко удается избежать сетевику.
P.S. Актуально для кого? 😅
https://www.networkworld.com/article/4046928/cisco-launches-dedicated-wireless-certification-track.html
В рамках нового трека будут проверяться знания по Wi-Fi 6/7, Meraki и др., а из CCNP Enterprise уберут все, что связано с Wi-Fi.
Если кто-то этого ждал, возможно, это хорошие новости, но я таких не знаю
Лично я никогда не любил ни экзамены Cisco, ни Wi-Fi, хотя пару контроллеров и десяток точек доступа настроил (домашний не в счет) - этой участи редко удается избежать сетевику.
P.S. Актуально для кого? 😅
https://www.networkworld.com/article/4046928/cisco-launches-dedicated-wireless-certification-track.html
Please open Telegram to view this post
VIEW IN TELEGRAM
Network World
Cisco launches dedicated wireless certification track
The new track introduces CCNP and CCIE Wireless certifications, with updated exams focused on Wi-Fi 6/7, Meraki, and advanced wireless design.
👍12🔥5😐5
Отчет curator: DDoS, боты и BGP-инциденты во 2 квартале 2025 года
Основные моменты:
🟢 Максимальный битрейт атаки UDP flood - 965 Гбит/с, SYN flood - 229 Гбит/с, IP flood - 214 Гбит/с и TCP flood - 169 Гбит/с.
🟢 Самая продолжительная DDoS-атака длилась 65.5 часов
🟢 Установлен рекорд по размеру DDoS-ботнета - 4.6 млн устройств
🟢 Самая популярная L7-атака - Request Rate Patterns
🟢 Инциденты BGP: 4 hijack, 10 route leaks
🟢 Лидеры среди источников атак: Россия, США, Бразилия
Основные моменты:
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤1
На одном из наших проектов используется VMware NSX-T, но с нашей стороны есть доступ только к Cloud Director, т.е. все «кишки» недоступны. Тем не менее, чтобы общаться с поддержкой на одном языке, нам пришлось разобраться в архитектуре: что такое DR, SR, T0/T1 и т.д.
Ниже приведены ссылки, где можно ознакомиться с основами NSX-T. Для общего понимания его работы этого будет достаточно:
🟢 Что такое NSX-T
🟢 NSX-T Component Overview
🟢 NSX-T Series Part 1-16
Ниже приведены ссылки, где можно ознакомиться с основами NSX-T. Для общего понимания его работы этого будет достаточно:
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🥰2
Пока готовился к внутреннему рассказу о сетевой инфраструктуре, вспомнил про доклад Сереги Овинцовского о том, как мы в 2021 году переехали с классической трехуровневой модели сети на IP Fabric.
Пересмотрел и ностальгия накрыла! 🥲
Пересмотрел и ностальгия накрыла! 🥲
YouTube
Rambler&Okko DevOps Meetup
25 ноября 2021 года состоялся первый совместный митап двух гигантов – Rambler&Okko DevOps Meetup. Топовые технические специалисты медиахолдинга Rambler&Co и мультимедийного сервиса Okko рассказали о собственных файерволах, потравили байки про PostgreSQL,…
👍6🔥5
Kubernetes - 100 Questions and Answers.pdf
247.6 KB
Kubernetes: 100 Questions and Answers
Довольно специфичный документ без какой-либо структуры, который точно не даст полного понимания работы K8s, но может быть полезен в качестве справочника.
Довольно специфичный документ без какой-либо структуры, который точно не даст полного понимания работы K8s, но может быть полезен в качестве справочника.
👍15🔥5
250 Linux Questions and Answers.pdf
502 KB
Linux Scenario Based Interview 250 Questions and Answers.
Ничего не могу с собой поделать - нравятся мне такие файлики. В этот раз этот раз попался по Linux.
Матерые Linux-админы точно могут проходить мимо, а для остальных в целом может быть полезен.
Ничего не могу с собой поделать - нравятся мне такие файлики. В этот раз этот раз попался по Linux.
Матерые Linux-админы точно могут проходить мимо, а для остальных в целом может быть полезен.
👍20🔥6
В Junos существуют различные типы Next-hop:
🟢 broadcast (bcst)—Broadcast.
🟢 deny—Deny.
🟢 discard (dscd) —Discard.
🟢 hold—Next hop is waiting to be resolved into a unicast or multicast type.
🟢 indexed (idxd)—Indexed next hop.
🟢 indirect (indr)—Indirect next hop.
🟢 local (locl)—Local address on an interface.
🟢 routed multicast (mcrt)—Regular multicast next hop.
🟢 multicast (mcst)—Wire multicast next hop (limited to the LAN).
🟢 multicast discard (mdsc)—Multicast discard.
🟢 multicast group (mgrp)—Multicast group member.
🟢 receive (recv)—Receive.
🟢 reject (rjct)—Discard. An ICMP unreachable message was sent.
🟢 resolve (rslv)—Resolving the next hop.
🟢 unicast (ucst)—Unicast.
🟢 unilist (ulst)—List of unicast next hops. A packet sent to this next hop goes to any next hop in the list.
🟢 VxLAN Local—EVPN Type 5 route in kernel.
Также можно встретить тип dead.
Пример вывода команды:
▎Инструкция чтобы увидеть dead своими глазами:
1. Необходим маршрутизатор Juniper MX.
2. Должен быть установлен софт 20.4R2.7. Да, он довольно старый.
3. Необходимо изменить MTU глобально на irb-интерфейсе: set interfaces irb mtu 9000.
Это приведет к флапу BGP-сессий и, как следствие, к неверно запрограммированным маршрутам на PFE с Next-hop "dead". Проблема воспроизводится 100%.
▎Что с этим делать:
1. Обновиться до более свежей версии, например, до 23.4R2-S3.9 - в этой версии проблема точно устранена.
2. Перед глобальным изменением MTU на irb-интерфейсе явно задать IP MTU для BGP-пиров, тогда также будет все в порядке.
В интернете можно найти примеры похожих багов, но точного совпадения найти не удалось.
Также можно встретить тип dead.
Пример вывода команды:
show route forwarding-table vpn internet destination 42.119.54.0/24 extensive
Routing table: internet.inet [Index 17]
Internet:
Destination: 42.119.54.0/24
Route type: user
Route reference: 0 Route interface-index: 0
Multicast RPF nh index: 0
P2mpidx: 0
Flags: sent to PFE, rt nh decoupled
Next-hop type: dead Index: 1102 Reference: 21
▎Инструкция чтобы увидеть dead своими глазами:
1. Необходим маршрутизатор Juniper MX.
2. Должен быть установлен софт 20.4R2.7. Да, он довольно старый.
3. Необходимо изменить MTU глобально на irb-интерфейсе: set interfaces irb mtu 9000.
Это приведет к флапу BGP-сессий и, как следствие, к неверно запрограммированным маршрутам на PFE с Next-hop "dead". Проблема воспроизводится 100%.
▎Что с этим делать:
1. Обновиться до более свежей версии, например, до 23.4R2-S3.9 - в этой версии проблема точно устранена.
2. Перед глобальным изменением MTU на irb-интерфейсе явно задать IP MTU для BGP-пиров, тогда также будет все в порядке.
В интернете можно найти примеры похожих багов, но точного совпадения найти не удалось.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👍8
Еще про next-hop’ы.
В EVNP для префикса можно увидеть такую картину по next-hop - ulst и два comp:
Есть посмотреть детальней, то выглядит вообще страшно:
Зачем нужен каждый из них?
▎Unicast next-hop
"Обычный" next hop, который указывает на физический интерфейс, через который доступен префикс. Для каждого префикса создается отдельная запись.
▎Unilist next-hop
"Список" из next hop.'ов Появляется, когда до префикса есть несколько альтернативных путей (ECMP), т.е. просто перечисление next-hop.
▎Indirect next-hop
Indirect next-hop позволяет для всех next-hop, которые доступны через один protocol next-hop(в нашей случае это лупбеки соседних лифов), использовать один indirect next-hop, который будет ссылаться на unicast next-hop.
▎Chained-composite next-hop
Дополнительный уровень над indirect next-hop, который объединяет в себе нижестоящие next-hop. Chained-composite next-hop обязателен для EVPN и начиная с версии Junos 14.1R4 включается автоматически. Он нужен для сокращения количества next-hop. В доках пишут просто: Chained composite next hops are required for EVPN and allow the ingress PE to take multiple actions before forwarding.
Подробней про next-hop можно почитать в нестареющей классике на Хабре.
В EVNP для префикса можно увидеть такую картину по next-hop - ulst и два comp:
# run show route forwarding-table destination 10.14.89.0
-- часть вывода опущена --
Routing table: prod-infrastructure.inet
Internet:
Destination Type RtRef Next hop Type Index NhRef Netif
10.14.89.0/24 user 0 ulst 524311 6
comp 1833 6
comp 1822 6
Есть посмотреть детальней, то выглядит вообще страшно:
# run show pfe route ip prefix 10.14.89.0/24 detail
-- часть вывод опущена --
IPv4 Route Table 6, prod-infrastructure.6, 0x41000:
Destination NH IP Addr Type NH ID Interface
--------------------------------- --------------- -------- ----- ---------
10.14.89/24 Unilist 524311 RT-ifl 0
Nexthop details:
524311(Unilist, IPv4, ifl:0:-, pfe-id:0)
1833(Compst, IPv4, ifl:0:-, pfe-id:0, comp-fn:Tunnel)
524286(Indirect, IPv4, ifl:544:ae1.0, pfe-id:0, i-ifl:0:-)
524383(Unilist, IPv4, ifl:0:-, pfe-id:0)
1957(Unicast, IPv4, ifl:544:ae1.0, pfe-id:0)
1951(Unicast, IPv4, ifl:545:ae2.0, pfe-id:0)
1822(Compst, IPv4, ifl:0:-, pfe-id:0, comp-fn:Tunnel)
524304(Indirect, IPv4, ifl:544:ae1.0, pfe-id:0, i-ifl:0:-)
524383(Unilist, IPv4, ifl:0:-, pfe-id:0)
1957(Unicast, IPv4, ifl:544:ae1.0, pfe-id:0)
1951(Unicast, IPv4, ifl:545:ae2.0, pfe-id:0)
RT flags: 0x00008000, Ignore: 0x00000000, COS index: 0
DCU id: 0, SCU id: 0, RPF ifl list id: 0, SGID:0, Flow Id: 0
Cookie: 0x00000000
Зачем нужен каждый из них?
▎Unicast next-hop
"Обычный" next hop, который указывает на физический интерфейс, через который доступен префикс. Для каждого префикса создается отдельная запись.
▎Unilist next-hop
"Список" из next hop.'ов Появляется, когда до префикса есть несколько альтернативных путей (ECMP), т.е. просто перечисление next-hop.
▎Indirect next-hop
Indirect next-hop позволяет для всех next-hop, которые доступны через один protocol next-hop(в нашей случае это лупбеки соседних лифов), использовать один indirect next-hop, который будет ссылаться на unicast next-hop.
▎Chained-composite next-hop
Дополнительный уровень над indirect next-hop, который объединяет в себе нижестоящие next-hop. Chained-composite next-hop обязателен для EVPN и начиная с версии Junos 14.1R4 включается автоматически. Он нужен для сокращения количества next-hop. В доках пишут просто: Chained composite next hops are required for EVPN and allow the ingress PE to take multiple actions before forwarding.
Подробней про next-hop можно почитать в нестареющей классике на Хабре.
👍9❤4🔥4
Задача: на виртульной машине с Ubuntu 24 изолировать два сетевых интерфейса между собой.
Мы боролись с ассиметрией в виртуальной среде NSX-T, где distributed firewall к ней совсем нетерпим, необходимо было разнести маршруты 0/0 и 10/8 по разным интерфейсам, при это было важно, чтобы они не были в одной таблице маршрутизации.
И когда сетевик слышит, что нужно что-то «изолировать» - он идет натягивать VRF. По официальной документации netplan поддерживает VRF - то, что надо, берем.
Адаптируем под себя:
Интерфейсы разнесены по VRF, всё выглядит корректно:
Проверяем доступ извне до IP-адреса внутри VRF - ping работает! А для сетевика полученный ICMP-ответ - это как документ с печатью, подтверждающий наличие доступа. Проверяем SSH, получаем «connection refused», перезагружаем VM(на всякий), доступа нет, интересно. Отключаем iptables(в любой непонятной ситуации), но и это не помогает. Любые дальнейшие эксперименты показывают, что и другие сервисы, привязанные к IP-адресу eth0 (который внутри VRF) также недоступны 🤷
Я не знал, что все сервисы работают в контексте VRF по умолчанию, т.е. процессы используют таблицу маршрутизации по умолчанию и имеют доступ к прослушиваемым IP-адресам только в этом дефолтном VRF, если не указано иное.
Если для ping внутри VRF мы можем использовать опцию -I, которая указывает src-интерфейс внутри VRF и ping начинает работать, то сервису SSH необходимо явно указать - используй контекст vrf-mgmt! Это будет касаться и других сервисов, которые должны работать с IP-адресами внутри VRF.
Решение для SSH: в systemd для юнита sshd изменить ExecStart с указанием использования VRF. Пока идет отладка изменим сразу /lib/systemd/system/ssh.service. (Напрямую лучше не изменять системные файлы, потому что любое обновление перезатрет изменения, нужно использовать override)
Команда ip vrf exec запускает процесс sshd в контексте vrf-mgmt.
После изменения файла службы нужно перезагрузить конфигурацию systemd и службу SSH, чтобы изменения вступили в силу:
Проверяем SSH извне на IP внутри VRF - доступ есть!
Если цель вынести только управление VM в отдельный VRF, то в принципе, на этом можно остановиться. Но в нашем случае были и другие сервисы, которым нужен доступ к VRF.
Идем дальше.
Есть решение, в котором все сервисы будут работать со всеми VRF в системе - L3 Master Device, известный как l3mdev:
Проверим наличие модуля CONFIG_NET_L3_MASTER_DEV в конфигурационном файле ядра:
Если видим CONFIG_NET_L3_MASTER_DEV=y, значит модуль встроен в ядро.
Включаем для tcp/udp:
Проверяем, убеждаемся что все сервисы начинают работать внутри VRF. Успех😮💨
По документации, l3mdev ухудшает производительность на 2-3%. Попробую разобраться как он работает.
#Задача
Мы боролись с ассиметрией в виртуальной среде NSX-T, где distributed firewall к ней совсем нетерпим, необходимо было разнести маршруты 0/0 и 10/8 по разным интерфейсам, при это было важно, чтобы они не были в одной таблице маршрутизации.
И когда сетевик слышит, что нужно что-то «изолировать» - он идет натягивать VRF. По официальной документации netplan поддерживает VRF - то, что надо, берем.
Адаптируем под себя:
network:
version: 2
renderer: networkd
ethernets:
eth0: # -> vrf-mgmt
addresses:
- 10.10.8.101/23
routes:
- to: 10.0.0.0/8
via: 10.10.8.1
routing-policy:
- from: 10.10.8.101/23
eth1: # -> main
addresses:
- 10.11.8.3/29
gateway4: 10.11.8.1
vrfs:
vrf-mgmt:
table: 101
interfaces: [eth0]
Интерфейсы разнесены по VRF, всё выглядит корректно:
# ip route
default via 10.11.8.1 dev eth1 proto static
10.11.8.0/29 dev eth1 proto kernel scope link src 10.11.8.3
# ip route show vrf vrf-mgmt
10.0.0.0/8 via 10.10.8.1 dev eth0 proto static
10.10.8.0/23 dev eth0 proto kernel scope link src 10.10.8.101
Проверяем доступ извне до IP-адреса внутри VRF - ping работает! А для сетевика полученный ICMP-ответ - это как документ с печатью, подтверждающий наличие доступа. Проверяем SSH, получаем «connection refused», перезагружаем VM(на всякий), доступа нет, интересно. Отключаем iptables(в любой непонятной ситуации), но и это не помогает. Любые дальнейшие эксперименты показывают, что и другие сервисы, привязанные к IP-адресу eth0 (который внутри VRF) также недоступны 🤷
Я не знал, что все сервисы работают в контексте VRF по умолчанию, т.е. процессы используют таблицу маршрутизации по умолчанию и имеют доступ к прослушиваемым IP-адресам только в этом дефолтном VRF, если не указано иное.
Если для ping внутри VRF мы можем использовать опцию -I, которая указывает src-интерфейс внутри VRF и ping начинает работать, то сервису SSH необходимо явно указать - используй контекст vrf-mgmt! Это будет касаться и других сервисов, которые должны работать с IP-адресами внутри VRF.
Решение для SSH: в systemd для юнита sshd изменить ExecStart с указанием использования VRF. Пока идет отладка изменим сразу /lib/systemd/system/ssh.service. (Напрямую лучше не изменять системные файлы, потому что любое обновление перезатрет изменения, нужно использовать override)
Было
ExecStart=/usr/sbin/sshd -D $SSHD_OPTS
Стало
ExecStart=/bin/ip vrf exec vrf-mgmt /usr/sbin/sshd -D $SSHD_OPTS
Команда ip vrf exec запускает процесс sshd в контексте vrf-mgmt.
После изменения файла службы нужно перезагрузить конфигурацию systemd и службу SSH, чтобы изменения вступили в силу:
systemctl daemon-reload
systemctl restart ssh
Проверяем SSH извне на IP внутри VRF - доступ есть!
Если цель вынести только управление VM в отдельный VRF, то в принципе, на этом можно остановиться. Но в нашем случае были и другие сервисы, которым нужен доступ к VRF.
Идем дальше.
Есть решение, в котором все сервисы будут работать со всеми VRF в системе - L3 Master Device, известный как l3mdev:
Official reference
Enables child sockets to inherit the L3 master device index. Enabling this option allows a “global” listen socket to work across L3 master domains (e.g.,VRFs) with connected sockets derived from the listen socket to be bound to the L3 domain in which the packets originated. Only valid when the kernel was compiled with CONFIG_NET_L3_MASTER_DEV
Проверим наличие модуля CONFIG_NET_L3_MASTER_DEV в конфигурационном файле ядра:
grep CONFIG_NET_L3_MASTER_DEV /boot/config-$(uname -r)
Если видим CONFIG_NET_L3_MASTER_DEV=y, значит модуль встроен в ядро.
Включаем для tcp/udp:
sysctl -w net.ipv4.tcp_l3mdev_accept=1
sysctl -w net.ipv4.udp_l3mdev_accept=1
Проверяем, убеждаемся что все сервисы начинают работать внутри VRF. Успех
По документации, l3mdev ухудшает производительность на 2-3%. Попробую разобраться как он работает.
#Задача
Please open Telegram to view this post
VIEW IN TELEGRAM
👍27🔥12❤3🫡2✍1
Forwarded from Патчкорд
Стоит напомнить, спасибо за подсказку нашему подписчику, что когда сетевик слышит про сетевую изоляцию он думает про
VRF, а когда линуксоид про неё слышит, то он думает про NETNS. Имейте ввиду эту опцию то же, там изоляция поизолированней.👍9🔥3 2
Поразбирался с l3mdev.
Продолжение предыдущего поста
L3mdev (Layer 3 Master Device) - это механизм в ядре Linux, который обеспечивает поддержку VRF, т.е. основное назначение l3mdev - это изоляция таблиц маршрутизации.
В контексте l3mdev есть два вида устройств(devices):
1️⃣ Master - это собственно и есть VRF. Пример: создаем VRF ip link add dev vrf-mgmt type vrf table 101, где vrf-mgmt и будет мастер устройством.
2️⃣ Slave - устройство, которое «подчинено» мастеру, т.е. сетевой интерфейс, привязанный к VRF. Пример: ip link set dev eth0 master vrf-mgmt, где eth0 - slave
У каждого сетевого интерфейса есть индекс, который можно посмотреть с помощью команды ip link show.
Вывод сокращен:
[1-4] - это индексы, при этом в зависимости от направления они могут быть:
🟢 iif - Input Interface Index, индекс сетевого устройства, на которое пришел пакет
🟢 oif - Output Interface Index, индекс сетевого устройства, через которое пакет будет отправлен
Задача l3mdev сводится к тому, чтобы перенаправить сетевые интерфейсы на L3 мастер-устройство для маршрутизации через правильную таблицу. То есть он меняет oif или iif со slave-устройства на master-устройство.
На примере нашего конфига netplan это работает так:
Пакет -> eth0(slave) -> 3lmdev делает update iif -> vrf-mgmt(master) -> table 101
Чтобы l3mdev мог заменять iif/oif на master (VRF), используется специальная таблица, которая создается автоматически при создании VRF - [l3mdev-table].
Команда для просмотра правил маршрутизации: ip rule show
Вывод:
Числа слева - это приоритеты, возможный диапазон от 0 до 32767. Чем меньше число, тем выше приоритет. Задача l3mdev-table - динамически указывать на правильную таблицу VRF на основе сетевого интерфейса (iif или oif).
Как это работает:
И посмотрим, где l3mdev находится в сетевом стеке(упрощенно):
1️⃣ Пакет из сети попадает на сетевую карточку, далее в драйвер сетевой карты
2️⃣ Ядро создает skb (socket buffer), проверяет пакет на валидность, заголовки и тд.
3️⃣ Любой входящий трафик запускает хук Netfiler - NF_IP_PRE_ROUTING (обрабатывается до принятия решения о том, куда отправлять пакет). Про Netfilter и хуки можно почитать тут. Происходит первый поиск в RIB - проверяется принадлежит ли dst IP локальному интерфейсу.
4️⃣ Хук l3mdev_l3_rcv меняет skb->dev(eth0) на vrf-mgmt
5️⃣ На основе нового skb->dev происходит повторный поиск в RIB в VRF
6️⃣ И если пакет предназначен локальному хосту, вызывается хук NF_INET_LOCAL_IN и передается приложению.
Обработка исходящих пакетов по своей сути похожа, но будут вызываться разные хуки Netfiler и l3mdev.
Стоит отметить, что l3mdev никак не влияет на L2-трафик.
Из необычного, статистика по интерфейсу vrf-mgmt будет выглядеть так:
Счетчик TX на интерфейсе vrf-mgmt всегда равен 0.
Свою версию, почему так происходит, я напишу в следующем посте. Если у вас есть свои идеи или вы считаете, что в моих рассуждениях выше есть неточности, то можем обсудить в комментах.
——————————————
Документ с описанием: What is an L3 Master Device?
Нашел еще доклад + презу
🎤 Будни сетевика 😊
Продолжение предыдущего поста
L3mdev (Layer 3 Master Device) - это механизм в ядре Linux, который обеспечивает поддержку VRF, т.е. основное назначение l3mdev - это изоляция таблиц маршрутизации.
В контексте l3mdev есть два вида устройств(devices):
1️⃣ Master - это собственно и есть VRF. Пример: создаем VRF ip link add dev vrf-mgmt type vrf table 101, где vrf-mgmt и будет мастер устройством.
2️⃣ Slave - устройство, которое «подчинено» мастеру, т.е. сетевой интерфейс, привязанный к VRF. Пример: ip link set dev eth0 master vrf-mgmt, где eth0 - slave
У каждого сетевого интерфейса есть индекс, который можно посмотреть с помощью команды ip link show.
Вывод сокращен:
1: lo: <LOOPBACK,UP,LOWER_UP>
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> master vrf-mgmt state UP
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> state UP
4: vrf-mgmt: <NOARP,MASTER,UP,LOWER_UP> state UP
[1-4] - это индексы, при этом в зависимости от направления они могут быть:
Задача l3mdev сводится к тому, чтобы перенаправить сетевые интерфейсы на L3 мастер-устройство для маршрутизации через правильную таблицу. То есть он меняет oif или iif со slave-устройства на master-устройство.
На примере нашего конфига netplan это работает так:
Пакет -> eth0(slave) -> 3lmdev делает update iif -> vrf-mgmt(master) -> table 101
Чтобы l3mdev мог заменять iif/oif на master (VRF), используется специальная таблица, которая создается автоматически при создании VRF - [l3mdev-table].
Команда для просмотра правил маршрутизации: ip rule show
Вывод:
0: from all lookup local
1000: from all lookup [l3mdev-table] <— вот она
32765: from 10.10.8.101/23 lookup main proto static
32766: from all lookup main
32767: from all lookup default
Числа слева - это приоритеты, возможный диапазон от 0 до 32767. Чем меньше число, тем выше приоритет. Задача l3mdev-table - динамически указывать на правильную таблицу VRF на основе сетевого интерфейса (iif или oif).
Как это работает:
Приходит пакет
↓
Приоритет 0: lookup local
↓
Приоритет 1000: lookup [l3mdev-table]
Вот тут начинает работать l3mdev
1. Определяет интерфейс (iif/oif) исходя из флоу трафика
2. Проверяет принадлежит ли интерфейс VRF
3. Определяет ID таблицы VRF и перенаправляет в нее
↓
Приоритет 32765: from 10.10.8.101/23 lookup main
↓
Приоритет 32766: lookup main
↓
Приоритет 32767: lookup default
И посмотрим, где l3mdev находится в сетевом стеке(упрощенно):
1️⃣ Пакет из сети попадает на сетевую карточку, далее в драйвер сетевой карты
2️⃣ Ядро создает skb (socket buffer), проверяет пакет на валидность, заголовки и тд.
3️⃣ Любой входящий трафик запускает хук Netfiler - NF_IP_PRE_ROUTING (обрабатывается до принятия решения о том, куда отправлять пакет). Про Netfilter и хуки можно почитать тут. Происходит первый поиск в RIB - проверяется принадлежит ли dst IP локальному интерфейсу.
4️⃣ Хук l3mdev_l3_rcv меняет skb->dev(eth0) на vrf-mgmt
5️⃣ На основе нового skb->dev происходит повторный поиск в RIB в VRF
6️⃣ И если пакет предназначен локальному хосту, вызывается хук NF_INET_LOCAL_IN и передается приложению.
Обработка исходящих пакетов по своей сути похожа, но будут вызываться разные хуки Netfiler и l3mdev.
Стоит отметить, что l3mdev никак не влияет на L2-трафик.
Из необычного, статистика по интерфейсу vrf-mgmt будет выглядеть так:
vrf-mgmt: flags=1217<UP,RUNNING,NOARP,MASTER> mtu 65575
ether 22:20:a7:a8:7f:f8 txqueuelen 1000 (Ethernet)
RX packets 36707747 bytes 26433447694 (26.4 GB)
TX packets 0 bytes 0 (0.0 B)
Счетчик TX на интерфейсе vrf-mgmt всегда равен 0.
Свою версию, почему так происходит, я напишу в следующем посте. Если у вас есть свои идеи или вы считаете, что в моих рассуждениях выше есть неточности, то можем обсудить в комментах.
——————————————
Документ с описанием: What is an L3 Master Device?
Нашел еще доклад + презу
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥8❤1
Forwarded from linkmeup
Думаю не ошибусь, если скажу что на минувшем линкмитапе это был самый срачеобразующий доклад. Прям начиная с темы и так до упора.
Собственно, Дмитрий Ипатов и его рассказ о том как подготовиться к масштабной трансляции, насобирать разного, попробовать удивительного и выйти из ситуации победителем, на примере организации трансляции Евро24.
https://youtu.be/WJHBkAXhyW4
Собственно, Дмитрий Ипатов и его рассказ о том как подготовиться к масштабной трансляции, насобирать разного, попробовать удивительного и выйти из ситуации победителем, на примере организации трансляции Евро24.
https://youtu.be/WJHBkAXhyW4
YouTube
Как мы в Окко готовились транслировать Евро24. Дмитрий Ипатов
В прошлом году Okko транслировал Евро24. Подготовка и проведение события такого масштаба — это настоящий вызов как для инфраструктуры, так и для команды.
В своем докладе я расскажу о сложностях, с которыми мы столкнулись на разных этапах, о том, как адаптировались…
В своем докладе я расскажу о сложностях, с которыми мы столкнулись на разных этапах, о том, как адаптировались…
🔥21👏6 4🏆2❤1
Сегодня стартовала оффлайн часть ключевой отраслевой конференции по технологиям видео VideoTech 2025
СПб, 7-8 октября.
Отличная возможность обменяться опытом, рад буду пообщаться.
🎤 Будни сетевика 😊
СПб, 7-8 октября.
Отличная возможность обменяться опытом, рад буду пообщаться.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15