12610
Обучающий канал по сетевому и системному администрированию. Сотрудничество: @dad_admin Биржа: https://telega.in/c/networkadm РКН: https://bit.ly/4ioc61C
Считаем пакеты с помощью XDP и eBPF
Теперь разберём, как практически посчитать количество входящих пакетов на интерфейсе с помощью XDP.
1️⃣Установка инструментов
На Ubuntu или Debian потребуется установить eBPF-инструменты и библиотеку libbpf:
sudo apt update
sudo apt install clang llvm libbpf-dev linux-headers-$(uname -r) bpftool
#include <linux/bpf.h>
#include <bpf/bpf_helpers.h>
struct {
__uint(type, BPF_MAP_TYPE_PERCPU_ARRAY);
__uint(max_entries, 1);
__type(key, u32);
__type(value, u64);
} pkt_cnt SEC(".maps");
SEC("xdp")
int xdp_counter(struct xdp_md *ctx) {
u32 key = 0;
u64 *value = bpf_map_lookup_elem(&pkt_cnt, &key);
if (value)
__sync_fetch_and_add(value, 1);
return XDP_PASS;
}
char LICENSE[] SEC("license") = "GPL";
clang -O2 -target bpf -c xdp_count.c -o xdp_count.o
sudo ip link set dev eth0 xdp obj xdp_count.o sec xdp
sudo bpftool net
sudo bpftool map dump id $(sudo bpftool map show | grep pkt_cnt | awk '{print $1}' | cut -d: -f1)sudo ip link set dev eth0 xdp off
Привязка DHCP к MAC (Static Lease)
В DHCP-сетях устройства обычно получают IP-адрес динамически из пула.
Иногда важно, чтобы конкретное устройство всегда получало один и тот же IP — например, сервер, принтер или VoIP-телефон.
/ip dhcp-server lease print
/ip dhcp-server lease add mac-address=AA:BB:CC:DD:EE:FF address=192.168.1.50 comment="Printer"
/ip dhcp-server lease print where address=192.168.1.50
/ip dhcp-server lease add mac-address=AA:BB:CC:DD:EE:FF address=192.168.1.50 server=dhcp1
IGMP Snooping для контроля мультикаст-трафика
IGMP (Internet Group Management Protocol) используется для управления членством устройств в мультикаст-группах IPv4.
Без контроля мультикаст-трафик будет рассылаться на все порты L2-сегмента, что создаёт ненужную нагрузку.
sudo ip link add name br0 type bridge
sudo ip link set dev eth1 master br0
sudo ip link set dev eth2 master br0
sudo ip link set br0 upsudo apt install igmpproxy
sudo nano /etc/igmpproxy.confphyint eth0 upstream ratelimit 0 threshold 1
phyint eth1 downstream
phyint eth2 downstreamsudo systemctl restart igmpproxy
sudo systemctl status igmpproxy
Вы знаете, что service mesh — решение, но мысль о внедрении пугает 🤯
Команда растёт, микросервисов всё больше, а трафик идёт не туда. Сбои становятся головоломкой, безопасность вызывает тревогу.
Мы понимаем эти боли. Поэтому приглашаем на онлайн-интенсив, на котором вы:
✅ Запустите service mesh: от установки Istio до работы с реальными сценариями.
✅ Получите рабочие практики: observability, traffic management, mTLS.
✅ Поймёте, как повысить надёжность и безопасность без переписывания кода.
✅ Научитесь находить и устранять узкие места в микросервисах.
✅ Разберёте типичные ошибки внедрения и подводные камни в реалиях рынка РФ.
Чтобы научиться быстро и безопасно внедрять service mesh, ждем вас тут 👈
📘 На Stepik вышел курс — «DevOps-инженер: От основ до продакшена»
Хотите автоматизировать деплой, управлять инфраструктурой как кодом и выстраивать надёжные CI/CD процессы? Этот курс — полный путь DevOps-инженера.
• CI/CD: Jenkins, GitLab CI/CD, GitHub Actions, стратегии развёртывания (Blue-Green, Canary), rollback
• Контейнеризация: Docker (образы, Compose, networking), Podman, оптимизация и безопасность контейнеров
• Kubernetes: архитектура, Pods, Services, Deployments, Helm, RBAC, Service Mesh (Istio/Linkerd)
• Infrastructure as Code: Terraform, Ansible (playbooks, vault), Packer, ArgoCD и Flux для GitOps
• Облака: AWS (EC2, EKS, Lambda), GCP, Azure, Yandex Cloud, cost optimization• Мониторинг: Prometheus, Grafana, ELK Stack, Jaeger, OpenTelemetry, SLI/SLO/SLA
• Безопасность: SAST/DAST, Vault, Zero Trust, Policy as Code, incident response
• Продакшен практики: High Availability, Disaster Recovery, Chaos Engineering, on-call management
🎓 Сертификат — добавьте в резюме или LinkedIn
🚀 Скидка 25%, действует 48 часов
👉 Пройти курс на Stepik
Обзор Cisco Identity Services Engine (ISE)
Cisco Identity Services Engine (ISE) — это платформа для управления доступом к сети, аутентификации пользователей и устройств, а также обеспечения политики безопасности на уровне сети.
ISE позволяет реализовать Network Access Control (NAC), управлять VLAN и политиками доступа для разных групп пользователей и устройств.
Реально, если ISE временно недоступен, пользователи, уже аутентифицированные, продолжают работать в сети, но новые подключения могут быть заблокированы, а политика доступа — не применяться.
Ограничение скорости пользователей через PCQ на MikroTik
В офисной или домашней сети иногда нужно делить интернет между пользователями так, чтобы никто не «съедал» весь канал.
Вместо того чтобы вручную создавать отдельные очереди для каждого IP, можно использовать PCQ — Per Connection Queue.
/queue type add name=PCQ_download kind=pcq pcq-classifier=dst-address pcq-rate=5M pcq-limit=50
/queue type add name=PCQ_upload kind=pcq pcq-classifier=src-address pcq-rate=2M pcq-limit=50
/queue simple add name="Office Download" target=192.168.1.0/24 max-limit=10M/10M queue=PCQ_download/PCQ_upload
/queue simple print
/queue simple monitor 0
Подсчёт пакетов с XDP на Linux
Иногда необходимо быстро понять, какой трафик проходит через интерфейс, и на каких портах возникают пиковые нагрузки.
XDP позволяет обрабатывать пакеты на самом низком уровне, почти до того, как они попадут в сетевой стек Linux.
В этой части покажем, как написать простую XDP-программу, которая будет подсчитывать UDP-пакеты на определённом интерфейсе.
1️⃣Установка инструментов:
sudo apt install clang llvm libbpfcc-dev linux-headers-$(uname -r) bpftool
#include <linux/bpf.h>
#include <bpf/bpf_helpers.h>
struct bpf_map_def SEC("maps") port_count = {
.type = BPF_MAP_TYPE_HASH,
.key_size = sizeof(__u16),
.value_size = sizeof(__u64),
.max_entries = 1024,
};
SEC("xdp")
int count_udp_ports(struct xdp_md *ctx) {
void *data_end = (void *)(long)ctx->data_end;
void *data = (void *)(long)ctx->data;
struct ethhdr *eth = data;
if ((void*)(eth + 1) > data_end) return XDP_PASS;
if (eth->h_proto != htons(ETH_P_IP)) return XDP_PASS;
struct iphdr *ip = data + sizeof(*eth);
if ((void*)(ip + 1) > data_end) return XDP_PASS;
if (ip->protocol != IPPROTO_UDP) return XDP_PASS;
struct udphdr *udp = (void*)ip + ip->ihl*4;
if ((void*)(udp + 1) > data_end) return XDP_PASS;
__u16 port = udp->dest;
__u64 *value = bpf_map_lookup_elem(&port_count, &port);
__u64 one = 1;
if (value) __sync_fetch_and_add(value, 1);
else bpf_map_update_elem(&port_count, &port, &one, BPF_ANY);
return XDP_PASS;
}
char _license[] SEC("license") = "GPL";
clang -O2 -target bpf -c xdp_port_count.c -o xdp_port_count.o
sudo ip link set dev eth0 xdp obj xdp_port_count.o sec xdp
sudo bpftool map show
sudo bpftool map dump id <id_map>
Диагностика QinQ (двойных VLAN) на Linux
QinQ (или VLAN stacking) позволяет вложить клиентский VLAN (C-tag, inner) в провайдерский VLAN (S-tag, outer).
Это часто используется у операторов, когда нужно «пронести» несколько VLAN клиентов через магистраль.
Проверка пакетов с двойными тегами
Через tcpdump:
sudo tcpdump -i eth0 -nn -e vlan and vlan
ethertype 802.1Q (0x8100), VLAN 200, p 0, ethertype 802.1Q (0x8100), VLAN 100, p 0, IP 10.10.10.2 > 10.10.10.1
# Создаём подинтерфейс для outer VLAN
sudo ip link add link eth0 name eth0.200 type vlan id 200
# Добавляем inner VLAN (QinQ)
sudo ip link add link eth0.200 name eth0.200.100 type vlan id 100
# Настраиваем IP
sudo ip addr add 192.168.100.10/24 dev eth0.200.100
sudo ip link set eth0.200.100 up
ping -I eth0.200.100 192.168.100.1
Как спустить миллионы ИТ-бюджета на апдейт серверной впустую? Да легко!
Покупаете оборудование, внедряете ПО, а первоначальная проблема так и не решена. Всё продолжает тормозить, те же простои в сервисах, и безопасность - на нуле.
А вот чтобы избежать такого провала - надо решать эту задачу с надежным партнером-интегратором, который делал это уже не раз, как Константин Сизов.
Константин работает в ИТ невообразимых 17 лет, и всё это время строит серверные инфраструктуры. Да ещё и защищает их от киберугроз. Сразу. By design.
В своем блоге «Давайте об IT» он простыми словами рассказывает о том как построить у себя крутую серверную инфраструктуру и делится реальным опытом импортозамещения в ЦОДе.
Так что подписывайтесь прямо сейчас, такой полезный опыт и такую живую подачу редко встретишь:
@lets_about_it
#реклама
О рекламодателе
🔥dad_admin&utm_term=phystech">Прими участие в Хакатоне от ИТ-холдинга Т1 в Новосибирске и поборись за призовой фонд 800 000 рублей!
Когда: 23–26 октября
Формат: онлайн + финал на площадке
Участвуй, если ты:
🔹обучаешься на технической или ИТ-специальности;
🔹развиваешься в направлении разработки, аналитики, CV, ML или DevOps;
🔹сможешь быть в Новосибирске 26 октября.
Выбери свой кейс:
✴️Цифровой дресс-код: фон, который выделяет вас. Создай локальный ML-модуль сегментации видео и генератор персонализированных фонов.
✴️CodeMetrics: метрики, которые помогают расти. Разработай систему автооценки эффективности команд через анализ Git-метрик.
Все надоело и пропал интерес, чувствуешь себя амебой и хочется только залипать в телефоне. Бывает?
Homo Manifestans — канал для айтишников, у которых периодически опускаются руки и отключается мозг, ибо переработки и постоянная тревожность не приводят к другим исходам 🤗
✓ Как научиться отвлекаться от работы и отдыхать?
✓ Как совместить кучу рабочих задач и время с семьей?
✓ Как справиться с прокрастинацией?
✓ Как не растерять запал, даже если начальник и коллеги 💩 и кажется, что ничего не выходит?
Подписывайтесь на канал @vadimpetrovpsi и научитесь работать без упахивания, выгорания и ущерба для личной жизни!
Псс. Заходите в закреп — там много полезного, и даже бесплатный мини-курс по выходу из апатии:
👉 /channel/+kAvguZoxBUM2ZGYy
Классическая виртуализация и контейнеры под управлением Kubernetes
Команда Deckhouse выпустила релиз платформы виртуализации (Deckhouse Virtualization Platform) версии 1.0, готовой к самым требовательным продакшен-нагрузкам. В основе платформы лежит KubeVirt. Был переработан сетевой стек и повышена производительность, добавлена полноценная система мониторинга, а вся сложность скрыта «под капотом».
DVP закрывает ключевые требования для реального продакшена:
— поддержка VLAN, сетевая мультитенантность и несколько интерфейсов для одной ВМ;
— высокая доступность. Живая миграция между узлами кластера без остановки;
— бэкапы и экспорт дисков без агентов внутри гостевой ОС;
— управление через API или интуитивный веб-интерфейс.
Протестировать DVP можно бесплатно в Open Source-платформе DKP CE. Она позволяет управлять через веб-интерфейс до 1000 серверов и 50 000 виртуальных машин, поддерживая основные типы хранилищ (NFS, Ceph и др.).
Для решения enterprise-задач рекомендуем получить консультацию на сайте.
Мониторинг реального PPS (Packets Per Second) на Linux
Когда мы думаем о производительности сети, обычно смотрим на Mbps или Gbps.
Но для диагностики и оптимизации сетевых интерфейсов не менее важен PPS — количество пакетов в секунду, которое проходит через сетевую карту.
Особенно критично для систем с высокой нагрузкой: VoIP, микросервисы, сетевые функции (NFV) или DPDK-приложения.
Простые способы мониторинга
1️⃣ethtool — статусы NICethtool -S eth0 | grep -i pack
Выведет счётчики, включая rx_packets и tx_packets. Снимайте их с интервалом в секунду, чтобы видеть PPS:
watch -n 1 "ethtool -S eth0 | grep -i pack"
ip -s link show eth0
sudo apt install sysstat
sar -n DEV 1 10
sudo tcpdump -i eth0 udp port 5060 -nn -c 1000
Простой rate-limit на Linux с помощью tc
Иногда нужно ограничить скорость — например, чтобы протестировать приложение при «медленном интернете» или эмулировать канал клиента.
Делается это очень просто через встроенный в Linux traffic control (tc).
Настройка TBF (Token Bucket Filter)
Допустим, у нас есть интерфейс eth0, и мы хотим ограничить его до 10 Мбит/с:
# Очистим старые правила
sudo tc qdisc del dev eth0 root 2>/dev/null
# Задаем ограничение
sudo tc qdisc add dev eth0 root tbf rate 10mbit burst 32kbit latency 400ms
tc -s qdisc show dev eth0
sudo tc qdisc del dev eth0 root
🔥 БЕСПЛАТНЫЙ КУРС ПО СОЗДАНИЮ НЕЙРО-СОТРУДНИКОВ НА GPT И ДРУГИХ LLM 🔥
Ищете практический и углубленный курс, чтобы освоить создание нейро-сотрудников? Мы создали курс из 5 объемных занятий. Это именно то, что нужно, чтобы прокачать свои навыки абсолютно бесплатно!
📌 Темы занятий:
1. Введение в мир нейро-сотрудников
2. Как работают LLM и их аналоги
3. Создание базы знаний для нейро-сотрудника (RAG)
4. Тестирование и отладка нейро-сотрудников
5. Интеграция нейро-сотрудников в Production
Вот 5 тем курса - он максимально простой и доступный, общеобразовательный, без какого-либо сложного программирования 📚Прохождение этого курса, скорее всего, займет у вас от 1 до 3 часов
🤖 Присоединяйтесь к нашему бесплатному курсу и разберитесь в этой увлекательной теме с нами!
Встречайте AIOps в INFRAX — виртуального инженера, который работает прямо внутри карточки инцидента:
- анализирует логи,
- предлагает команды,
- помогает устранять неполадки быстрее и надёжнее.
🔐 Все действия прозрачны и безопасны: журналируются в инциденте и выполняются строго в рамках ваших политик доступа.
Что такое INFRAX? Это:
🖥 Мультиметричный мониторинг — CPU, память, диски, трафик, доступность узлов, интерактивные графики и гибкие алерты.
🎫 Helpdesk — управление тикетами, статусы, приоритеты, исполнители и комментарии, портал самообслуживания для пользователей.
🤖 Автоматизация — агенты для Windows/Linux, запуск скриптов по расписанию, планировщик задач, автодетект узлов.
🔐 Удалённые подключения — RDP, SSH, VNC прямо из веба или нативных клиентов, видеозапись сессий для аудита.
📚 База знаний — статьи, категории, контроль публикаций, статистика по популярности.
👥 Управление пользователями — детальная система прав, интеграция с IAM, аудит действий, изоляция данных.
📊 Дашборды — мониторинг, техподдержка, удалённые подключения с realtime-обновлением.
🔥 Infrax — это ситуационный центр вашей ИТ-инфраструктуры. Всё, что нужно для стабильной и безопасной работы сервисов, в одном решении.
#реклама
О рекламодателе
Сегментация L2-сети с Private VLAN
В крупных или средних сетях бывает нужно, чтобы устройства в одном VLAN не могли напрямую общаться друг с другом, но при этом им был доступен шлюз в интернет или к сервисам.
Как работает Private VLAN
Private VLAN (PVLAN) — это расширение обычного VLAN, которое позволяет разделять трафик на уровне канального слоя:
⏺Promiscuous port — порт, который может общаться со всеми. Обычно это шлюз или маршрутизатор.
⏺Isolated port — порт, который может общаться только с promiscuous портом, но не с другими isolated портами.
⏺Community port — порты внутри одной группы могут общаться друг с другом и с promiscuous портом, но не с портами другой community.
Так можно изолировать клиентов, оставляя при этом доступ к общим ресурсам.
Практикуемся на Linux с bridge и VLAN
Создадим bridge с PVLAN-подобной логикой:
# Создаём главный bridge
ip link add name br0 type bridge
ip link set br0 up
# Создаём VLAN-подсети
ip link add link br0 name br0.10 type vlan id 10
ip link add link br0 name br0.20 type vlan id 20
ip link set br0.10 up
ip link set br0.20 up
# Настраиваем iptables, чтобы isolated VLAN не видел друг друга
iptables -I FORWARD -i br0.10 -o br0.10 -j DROP
iptables -I FORWARD -i br0.20 -o br0.20 -j DROP
# Разрешаем доступ к шлюзу (eth0)
iptables -A FORWARD -i br0.10 -o eth0 -j ACCEPT
iptables -A FORWARD -i br0.20 -o eth0 -j ACCEPT
Настройка NTP-синхронизации на MikroTik
Для корректной работы журналов, сертификатов и сетевых сервисов крайне важно, чтобы время на всех устройствах в сети совпадало.
Даже расхождение в несколько минут может привести к ошибкам аутентификации или сбоям в логах.
❌ NTP (Network Time Protocol) — это протокол синхронизации времени по сети. Он использует иерархию уровней (stratum), где:
⏺Stratum 1 — это серверы, синхронизированные напрямую с атомными часами или GPS.
⏺Stratum 2+ — устройства, которые получают время от вышестоящих серверов.
Клиенты обращаются к ближайшему NTP-серверу, получают точное время и корректируют свои локальные часы.
На MikroTik это можно сделать встроенными средствами — пакетом system ntp client.
Настройка NTP Client на MikroTik
/system ntp client set enabled=yes \
primary-ntp=0.pool.ntp.org \
secondary-ntp=1.pool.ntp.org
/system clock print
/system ntp client print
/tool ntp client monitor
/system ntp server set enabled=yes broadcast=yes manycast=yes
Настроим DHCP Relay на Cisco
Когда клиенты находятся в разных VLAN, но DHCP-сервер — в одной общей сети, прямые broadcast-запросы до него не доходят.
В этом случае используется DHCP Relay (или IP Helper), который пересылает DHCP-запросы на сервер через маршрутизатор.
Как это работает
Клиент отправляет DHCP Discover в виде широковещательного пакета (broadcast) в своей VLAN.
192.168.10.0/24192.168.100.5 (в другой сети)# Настраиваем интерфейс VLAN 10
interface vlan 10
ip address 192.168.10.1 255.255.255.0
ip helper-address 192.168.100.5
no shutdown
# Проверяем
show ip interface vlan 10
show ip helper-address
ipconfig /renew
debug ip dhcp server packet
show ip dhcp binding
OSPF на MikroTik с одной Area
OSPF (Open Shortest Path First) — протокол динамической маршрутизации, который быстро адаптируется к изменениям сети.
Даже в небольшой сети полезно объединять несколько подсетей в одну OSPF-область (Area 0), чтобы маршруты автоматически распространялись между роутерами.
⏺Настройка на MikroTik
Задаём Router ID и включаем OSPF:
/routing ospf instance set default router-id=1.1.1.1
/routing ospf network add network=192.168.10.0/24 area=backbone
/routing ospf network add network=192.168.20.0/24 area=backbone
/routing ospf neighbor print
/ip route print
BGP Route Reflector на Cisco: уменьшение количества iBGP-сессий
В больших автономных системах прямое соединение между всеми iBGP-пирами быстро становится неудобным: количество сессий растёт как n(n-1)/2.
Route Reflector (RR) решает эту проблему — маршрутизатор принимает маршруты от iBGP-пиров и рассылает их другим пирами внутри AS.
router bgp 65000
neighbor 10.0.12.1 remote-as 65000
neighbor 10.0.12.1 route-reflector-client
neighbor 10.0.12.2 remote-as 65000
neighbor 10.0.12.2 route-reflector-client
router bgp 65000
neighbor 10.0.12.254 remote-as 65000
10.0.12.254 — IP RR1. Настройка route-reflector-client указывает, что пир является клиентом RR.show ip bgp summary ! Проверка установленных сессий
show bgp ipv4 unicast ! Смотрим распространённые маршруты
ping <сеть_клиента> ! Проверяем reachability между клиентами
Linux XDP и подсчёт пакетов
XDP (eXpress Data Path) — это механизм обработки пакетов на самом низком уровне сетевого драйвера Linux.
Например, подсчёт UDP-пакетов на определённом порту для мониторинга VoIP, игровых серверов или тестирования сетевых приложений.
Проверка VLAN-тегов в сети
Когда трафик не проходит через свичи или маршрутизаторы, одна из частых причин — ошибка в настройке VLAN. Пакеты могут теряться, если:
⏺порт настроен как access, а мы отправляем трафик с тегами;
⏺тег VLAN не совпадает с конфигурацией на другом конце;
⏺свич отбрасывает кадры из «неразрешённого» VLAN.
Смотрим теги через tcpdump
sudo tcpdump -i eth0 -nn -e vlan
12:30:45.123456 ethertype 802.1Q (0x8100), VLAN 100, IP 192.168.10.2 > 192.168.10.1: ICMP echo request
sudo tcpdump -i eth0 vlan 200
sudo arping -I eth0.100 192.168.100.1
sudo ip link add link eth0 name eth0.100 type vlan id 100
sudo ip addr add 192.168.100.10/24 dev eth0.100
sudo ip link set eth0.100 up
Виртуализация – зачем она нужна?
Современные серверы и рабочие станции часто используют лишь 15-20% своих ресурсов.
Это значит, что значительная часть мощностей простаивает, но при этом требует затрат на электроэнергию, обслуживание и место в серверных.
Отслеживание и анализ ARP-трафика с tcpdump
Чтобы понять, как ARP-запросы и ответы реально ходят по сети, можно использовать tcpdump.
Это особенно полезно, если нужно проверить, доходит ли пакет до нужного интерфейса или где теряется.
Примеры:
Смотрим все ARP-пакеты на интерфейсе eth0:
sudo tcpdump -i eth0 arp
sudo tcpdump -i eth0 arp and dst host 192.168.1.1
ARPing для диагностики сетевых проблем
Обычный ping работает на уровне IP, но если есть подозрение, что проблема на канальном уровне (L2), пригодится arping.
Он напрямую отправляет ARP-запросы и показывает, отвечает ли сосед своим MAC-адресом.
Примеры использования:
Проверка доступности соседа по Ethernet:
arping -I eth0 192.168.1.1
arping -I eth0 -D 192.168.1.10
arping -c 5 -I eth0 192.168.1.1
arping -I eth0 -f 192.168.1.1
Быстрая проверка RPF (reverse path filtering)
Linux иногда «мешает» при тестах, когда трафик приходит на один интерфейс, а ответ уходит через другой.
Причина часто в включённом RPF — ядро проверяет, совпадает ли путь ответа с интерфейсом, на котором пришёл пакет.
cat /proc/sys/net/ipv4/conf/all/rp_filter
cat /proc/sys/net/ipv4/conf/eth0/rp_filter
sysctl -w net.ipv4.conf.eth0.rp_filter=0
Собрали топ-30 бесплатных курсов для Python-разработчиков 🐍
Эксперты Академии Selectel собрали более 30 онлайн-программ для IT-специалистов с тестами и заданиями для проверки знаний. Среди них вы найдете:
🔹 обучающие подборки по программированию на Go и JavaScript;
🔹 гайды и инструкции для создания собственных pet-проектов на Python, Flask и Django;
🔹 курсы для тех, кто хочет освоить новый навык — Linux или работу с PostgreSQL: в процессе учебы вы получите промокод для практики в панели управления Selectel, а после — сертификат о прохождении.
Курсы доступны в любое время, проходите их в комфортном темпе. А главное — все бесплатные!
Выберите нужную программу и начните обучение прямо сейчас ➡️
Реклама. АО "Селектел". erid:2W5zFGhpZFW
В нашем канале нет историй про вайти вайти за 2 недели и зарплату 300к/наносек.
Только свежие мемы, костыли и коллективная терапия от Двоичного Кота.
Если узнал себя, то ты знаешь, что делать (подписаться).
Если не узнал, то тоже подпишись. 😌
🐱 /start @binarcat