12610
Обучающий канал по сетевому и системному администрированию. Сотрудничество: @dad_admin Биржа: https://telega.in/c/networkadm РКН: https://bit.ly/4ioc61C
ZeroTier: глобальная L2 сеть с кастомными ACL и настройкой MTU
ZeroTier позволяет объединять устройства по всему миру в одну виртуальную L2 сеть без VPN и проброса портов.
Всё, что нужно — установить клиент на хосты и подключить их к одной виртуальной сети через контроллер (my.zerotier.com).
{
"rules": [
{
"type": "accept",
"source": "192.168.192.101/32",
"destination": "192.168.192.102/32",
"protocol": "tcp",
"port": "22"
},
{
"type": "drop",
"source": "192.168.192.0/24",
"destination": "192.168.192.0/24"
}
]
}192.168.192.101 может подключаться по SSH к VPS 192.168.192.102, остальные узлы внутри сети друг друга не видят.sudo zerotier-cli set <network_id> mtu=1400
sudo systemctl restart zerotier-one
Port Isolation (Private VLAN) на Linux через bridge vlan
В классических коммутаторах для этого есть Private VLAN: клиенты сидят в одном L2-сегменте, но не могут общаться друг с другом напрямую.
Они видят только «uplink» (обычно шлюз в интернет).
На Linux такую схему можно собрать с помощью bridge vlan.
Схема
⏺У нас есть bridge br0, в который включены клиентские порты veth1, veth2, veth3.
⏺Порт eth0 — это uplink (роутер/интернет).
⏺Задача: запретить L2-взаимодействие клиентов между собой, но оставить доступ к eth0.
Настройка
Создаём мост и добавляем интерфейсы:
ip link add name br0 type bridge vlan_filtering 1
ip link set eth0 master br0
ip link set veth1 master br0
ip link set veth2 master br0
ip link set veth3 master br0
ip link set br0 up
# uplink видит всех
bridge vlan add dev eth0 vid 1 pvid untagged
# клиентские порты только к uplink
bridge vlan add dev veth1 vid 1 pvid untagged isolated
bridge vlan add dev veth2 vid 1 pvid untagged isolated
bridge vlan add dev veth3 vid 1 pvid untagged isolated
ping -I veth1 192.168.1.2 # Не работает
ping -I veth1 8.8.8.8 # Работает
VRRP на чистом Linux без keepalived
Обычно VRRP на Linux поднимают через keepalived. Но начиная с iproute2 ≥ 5.10, появился встроенный объект ip link add type vrrp, позволяющий работать с VRRP напрямую.
Это позволяет обойтись без демонов, если задача простая: резервировать шлюз в небольшой сети.
Настройка
Предположим, у нас есть два узла:
⏺R1 (Master): 192.168.10.1
⏺R2 (Backup): 192.168.10.2
⏺VIP (Virtual IP): 192.168.10.254
Оба смотрят в сегмент 192.168.10.0/24 через интерфейс eth0.
На R1 (Master):
# Создаём VRRP-интерфейс
ip link add vrrp0 type vrrp id 42 dev eth0 \
vrid 42 \
priority 200 \
addr 192.168.10.254
# Поднимаем
ip link set vrrp0 up
ip link add vrrp0 type vrrp id 42 dev eth0 \
vrid 42 \
priority 100 \
addr 192.168.10.254
ip link set vrrp0 up
ip -d link show vrrp0
ping 192.168.10.254
ip link set eth0 down
Linux XDP для подсчёта пакетов по портам
XDP (eXpress Data Path) позволяет обрабатывать пакеты прямо в драйвере сетевой карты, до того как они попадут в сетевой стек.
Это даёт минимальные задержки и позволяет собирать статистику или фильтровать трафик на лету.
В этом посте мы покажем, как посчитать пакеты по UDP-портам с минимальной XDP-программой.
1️⃣Минимальная XDP-программа
Создаём файл xdp_counter.c:
#include <linux/bpf.h>
#include <bpf/bpf_helpers.h>
struct bpf_map_def SEC("maps") port_counter = {
.type = BPF_MAP_TYPE_HASH,
.key_size = sizeof(__u16),
.value_size = sizeof(__u64),
.max_entries = 65535,
};
SEC("xdp")
int count_udp_ports(struct xdp_md *ctx) {
void *data = (void *)(long)ctx->data;
void *data_end = (void *)(long)ctx->data_end;
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_counter, &port);
__u64 one = 1;
if (value)
__sync_fetch_and_add(value, 1);
else
bpf_map_update_elem(&port_counter, &port, &one, BPF_ANY);
return XDP_PASS;
}
char _license[] SEC("license") = "GPL";
clang -O2 -target bpf -c xdp_counter.c -o prog.o
sudo ip link set dev eth0 xdp obj prog.o sec xdp
sudo bpftool map dump id <MAP_ID> # ID карты можно узнать через bpftool map show
IPv6 Privacy Extensions — временные адреса для безопасности и конфиденциальности
IPv6 даёт каждому устройству уникальный адрес на основе MAC (EUI-64).
Это удобно, но есть проблема: такие адреса постоянные, и их можно использовать для трекинга пользователя в сети.
Чтобы решить эту проблему, в IPv6 есть Privacy Extensions. Они позволяют системе генерировать временные случайные адреса, которые периодически меняются, сохраняя при этом основной (permanent) адрес для подключения к сервисам.
Как это работает
Система может иметь два типа адресов на одном интерфейсе:
⏺Stable (постоянный) — генерируется на основе префикса сети и EUI-64. Используется для серверов и сервисов, которые должны быть всегда доступны.
⏺Temporary (временный) — случайный, меняется каждые несколько часов, используется для исходящего трафика, чтобы скрыть реальный идентификатор устройства.
Включение и проверка на Linux
Чтобы посмотреть текущие настройки IPv6 Privacy Extensions:
cat /proc/sys/net/ipv6/conf/all/use_tempaddr
sudo sysctl -w net.ipv6.conf.eth0.use_tempaddr=2
ip -6 addr show dev eth0
inet6 2001:db8:1:1::abcd/64 scope global temporary dynamic
inet6 2001:db8:1:1::1234/64 scope global dynamic
net.ipv6.conf.all.use_tempaddr = 2
net.ipv6.conf.default.use_tempaddr = 2
Контейнерные сети без Kubernetes: ручная настройка CNI-плагинов
Контейнеры требуют сетевой связности между собой. Обычно Kubernetes берёт это на себя через CNI-плагины, но что если нам нужен просто Docker или Podman без кластера?
В этом случае можно вручную настроить CNI-плагины вроде Weave Net или Cilium и обеспечить L2/L3 соединение между контейнерами.
Настройка Weave Net
Скачиваем и запускаем Weave Net на хосте:
curl -L git.io/weave -o /usr/local/bin/weave
chmod +x /usr/local/bin/weave
weave launch
weave status
weave run 10.32.0.2/16 -ti alpine sh
weave run 10.32.0.3/16 -ti alpine sh
ping 10.32.0.3 # с контейнера 10.32.0.2
ping 10.32.0.2 # с контейнера 10.32.0.3
curl -L --remote-name https://github.com/cilium/cilium-cli/releases/latest/download/cilium-linux-amd64.tar.gz
tar xzvf cilium-linux-amd64.tar.gz
sudo mv cilium /usr/local/bin/
cilium install
cilium status
docker network create cilium-net
docker run --net cilium-net --name c1 -it alpine sh
docker run --net cilium-net --name c2 -it alpine sh
ping <IP_другого_контейнера>
❓ Когда инфраструктура IT-отдела опирается на Windows, вы чувствуете себя ограниченным в возможностях?
Linux уже давно стал стандартом для серверных решений, контейнеров и облаков.
💪 Курс «Administrator Linux. Basic» погрузит вас в мир администрирования «с нуля»: от работы в терминале и Bash-скриптов до настройки веб- и MySQL-серверов, Docker-контейнеров, мониторинга через Grafana, Prometheus и ELK. На живых вебинарах вы посмотрите реальные сценарии — от установки Ubuntu в VirtualBox до развертывания микросервисов.
🚀 После курса вы сможете:
– уверенно работать в Bash и управлять пользователями, правами и пакетами;
– настраивать и оптимизировать Nginx/Apache, MySQL, создавать Docker-контейнеры и CI/CD-потоки через Git;
– подключать системы мониторинга: Grafana, Prometheus, ELK и настраивать тревоги;
– анализировать сетевой трафик и фильтровать пакеты через iptables.
👉 Пройдите бесплатное вступительное тестирование и получите персональную скидку на обучение: https://otus.pw/dzLd4/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Обзор Cisco Unified Communications Manager (CUCM)
Cisco Unified Communications Manager (CUCM) — это программная АТС для корпоративных IP-сетей, обеспечивающая маршрутизацию вызовов, управление голосовыми и видео-звонками, поддержку голосовой почты, конференц-связи и интеграцию с другими сервисами.
Первая версия CallManager 1.0 вышла в 1997 году.
Основные протоколы CUCM
CUCM поддерживает как собственные, так и открытые протоколы:
• SCCP (Skinny Client Control Protocol) – фирменный протокол Cisco для телефонов
• SIP (Session Initiation Protocol) – стандартный протокол для VoIP
• H.323 – используется для взаимодействия с другими VoIP-сетями
• MGCP (Media Gateway Control Protocol) – для управления шлюзами
Как работает CUCM
CUCM управляет сигнализацией вызовов, но сами аудио- и видеопотоки (RTP) передаются напрямую между устройствами.
Это значит, что если CUCM выйдет из строя, разговор продолжится, но функции управления вызовом (удержание, перевод, конференция) будут недоступны.
Дополнительно доступен CLI (Command Line Interface) для управления через консоль.
P4 и программируемые коммутаторы: кастомная обработка пакетов
P4 (Programming Protocol-independent Packet Processors) — язык для описания поведения сетевых устройств на уровне пакетов.
С его помощью можно создавать кастомные правила маршрутизации, фильтрации, модификации заголовков и многое другое без перепрошивки железа.
В отличие от классических коммутаторов, где поведение фиксировано, P4-коммутаторы позволяют:
• самостоятельно определять, какие заголовки и поля пакетов обрабатывать;
• писать собственные таблицы маршрутизации и фильтров;
• экспериментировать с сетевой логикой в учебных или тестовых сетях.
Эмуляция с bmv2
Чтобы попробовать P4 без физического железа, используют эмулятор BMv2. Он имитирует P4-коммутатор и позволяет загружать ваши программы.
Пример простой программы, которая меняет MAC-адрес назначения для всех входящих пакетов:
header ethernet_t {
bit<48> dstAddr;
bit<48> srcAddr;
bit<16> etherType;
}
parser MyParser(packet_in pkt,
out ethernet_t hdr) {
pkt.extract(hdr);
}
control MyIngress(inout ethernet_t hdr) {
apply {
hdr.dstAddr = 0x00_11_22_33_44_55;
}
}
control MyEgress() { apply { } }
control MyVerifyChecksum() { apply { } }
control MyComputeChecksum() { apply { } }
V1Switch(MyParser(), MyVerifyChecksum(), MyIngress(), MyEgress(), MyComputeChecksum()) main;sudo apt install bmv2
p4c-bm2-ss simple_program.p4 -o simple_program.json
simple_switch --log-console simple_program.json
🚀⚙️ Хотите упростить свою работу в Linux? Научитесь писать скрипты с помощью Bash!
👉 Присоединяйтесь к открытому вебинару 25 августа в 20:00 МСК и разберитесь, как с помощью Bash автоматизировать рутинные задачи в Linux. Мы объясним, как работать с интерпретатором Bash, создавать переменные, использовать условия и циклы.
💪 Этот вебинар поможет быстро освоить базовые навыки Bash и научиться автоматизировать простые операции, что значительно упростит рабочий процесс.
🎁 Запишитесь на вебинар и получите индивидуальное предложение на курс «Administrator Linux. Basic».
👉 Для участия зарегистрируйтесь: https://otus.pw/eYKF/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
По мере того, как сети становятся сложнее и масштабнее, организации сталкиваются с растущими трудностями в поддержании точной, динамичной и безопасной сетевой инвентаризации.
Устаревшие системы, гибридные инфраструктуры и развивающиеся угрозы безопасности усложняют решение таких задач.
Готовые решения существуют, и, как всегда, есть различные “но”, вынуждающие либо идти на компромиссы или вложения дополнительных ресурсов, либо же раздувать штат соответствующих специалистов для увеличения охвата текущих задач по сетевой инфраструктуре.
В первой части статьи мы рассказали о нашей идеологии в инструментарии для поддержки и конфигурирования сети.
В этой части мы хотим детальнее рассказать о реализованных нами решениях по поднятым вопросам и размышлениям и поделиться результатами.
Прочитать можно здесь:⬇️
https://dzen.ru/a/aJx4knpIYn5Ct87m
VRF-lite: простая изоляция трафика без сложного оборудования
VRF-lite — способ изолировать трафик в одной сети без дорогого оборудования.
По сути, это создание нескольких виртуальных маршрутизаторов на одном устройстве, каждый со своей таблицей маршрутизации.
ip link add vrf-blue type vrf table 10
ip link set dev vrf-blue up
ip link set dev eth1 master vrf-blue
ip route add 192.168.10.0/24 dev eth1 table 10
NAT Hairpinning — что это и зачем нужно?
NAT Hairpinning (или loopback NAT) — это способ доступа к своим локальным сервисам по их внешнему (публичному) IP адресу изнутри локальной сети.
Например, у вас есть сервер в локальной сети с внутренним IP 192.168.1.100, и у него проброшен внешний IP (скажем, 203.0.113.10) через NAT на роутере.
# Проброс порта с внешнего IP на локальный сервер
iptables -t nat -A PREROUTING -d 203.0.113.10 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:80
# Разрешаем возвратный трафик
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -d 192.168.1.100 -p tcp --dport 80 -j MASQUERADE
Топ-5 ошибок при настройке EtherChannel (LACP/PAgP)
+ как быстро диагностировать
EtherChannel — мощный инструмент агрегации каналов, но одна мелочь в конфиге может убить весь бандл или снизить производительность.
1️⃣Разные настройки на портах
Разные speed/duplex или MTU ломают агрегацию. Разное VLAN-назначение (trunk/access) приводит к непредсказуемым сбоям.
Пример ошибки:
switchport mode trunk
switchport trunk allowed vlan 10,20
show etherchannel summary ! Статус каналов
show running-config interface ! Проверить одинаковость настроек
show lacp neighbor ! Состояние LACP
MACsec в дата-центрах: используем шифрование на уровне канального слоя
В современных дата-центрах требования к безопасности и производительности пересекаются с необходимостью шифрования трафика внутри самой инфраструктуры.
MACsec (IEEE 802.1AE) становится оптимальным решением для защиты Layer 2 трафика без влияния на верхние протоколы и с минимальной задержкой.
network={
key_mgmt=IEEE8021X
eap=TLS
identity="user@example.com"
ca_cert="ca.pem"
client_cert="client.pem"
private_key="client.key"
macsec_policy=1
}ip link add link eth0 macsec0 type macsec
ip link set macsec0 up
wpa_supplicant -i eth0 -c /etc/wpa_supplicant.conf -D wired
Почему протоколы маршрутизации работают не только на сетевом уровне?
Понимание позиционирования сетевых протоколов позволяет на качественно новом уровне рассмотреть работу сетей передачи данных.
Также анализ дампов трафика сетевых протоколов позволяет лучше понять принципы работы этих протоколов.
В результате вебинара:
✔️ Сможете разобраться, как именно работает стек сетевых протоколов в разрезе data / control / management plane.
✔️ Сможете на практике использовать анализ дампов трафика сетевых протоколов.
👉 Регистрация и подробности о курсе Network Engineer. Professional: https://otus.pw/11KX/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Как настроить и использовать SFTP для безопасной передачи файлов
SFTP (Secure File Transfer Protocol) — это протокол для безопасной передачи файлов между клиентом и сервером, работающий через SSH (Secure Shell).
Он позволяет зашифровать данные, поддерживает аутентификацию пользователей и предоставляет удобный интерактивный шелл для управления файловой системой.
Установка SFTP-сервера
На Linux
Установите OpenSSH-сервер, который включает SFTP:
sudo apt install openssh-server
sudo systemctl status ssh
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH.Server*' | Add-WindowsCapability –Online
Start-Service sshd
sftp -P [порт] [пользователь]@[хост]
sftp -P 22 user@192.168.1.100
pwd # Текущая директория на сервере
lpwd # Текущая локальная директория
ls # На сервере
lls # Локально
put local-file remote-directory/ # Загрузка файла на сервер
get remote-file local-directory/ # Скачивание с сервера
put -R local-folder remote-folder/
get -R remote-folder local-folder/
Создание L2 VPN через GRE/VXLAN без OVS
Иногда нужно объединить две удалённые Linux-машины в единую L2-сеть, чтобы сервисы работали как будто «в одной локалке».
Для этого подойдут туннели GRE или VXLAN. Можно обойтись без Open vSwitch и собрать всё на обычных bridge-интерфейсах.
1️⃣Подготовка
На обоих хостах включаем форвардинг и загружаем модули:
sysctl -w net.ipv4.ip_forward=1
modprobe ip_gre
modprobe vxlan
ip tunnel add gre1 mode gre remote 2.2.2.2 local 1.1.1.1 ttl 255
ip link set gre1 up
brctl addbr br0
ip link set gre1 master br0
ip tunnel add gre1 mode gre remote 1.1.1.1 local 2.2.2.2 ttl 255
ip link set gre1 up
brctl addbr br0
ip link set gre1 master br0
ip link add vxlan100 type vxlan id 100 dev eth0 remote 2.2.2.2 dstport 4789
ip link set vxlan100 up
brctl addbr br0
ip link set vxlan100 master br0
ip link add vxlan100 type vxlan id 100 dev eth0 remote 1.1.1.1 dstport 4789
ip link set vxlan100 up
brctl addbr br0
ip link set vxlan100 master br0
ip netns add test
ip link add veth0 type veth peer name veth1
ip link set veth0 netns test
ip netns exec test ip addr add 10.10.10.1/24 dev veth0
ip netns exec test ip link set veth0 up
ip link set veth1 master br0
ip link set veth1 up
ip netns exec test ping 10.10.10.2
XDP/eBPF для QoS: приоритизация UDP-трафика в Linux
В реальном времени аудио и видео сильно чувствительны к задержкам и джиттеру.
Даже небольшие перегрузки сети могут испортить VoIP или RTP-поток.
XDP — это точка входа пакета в Linux, прямо в драйвере NIC. eBPF-программа, загруженная в XDP, может:
➖маркировать пакеты (skb->mark) для последующей обработки tc/qdisc
➖отбрасывать или редиректить трафик
➖собирать статистику по IP, портам или протоколам
В связке с tc или iptables можно реализовать приоритизацию UDP-трафика для VoIP/RTP без изменения приложений.
⏺Например: приоритизация UDP-порта 5004 (RTP) и сбор статистики
Создаём простую eBPF карту для подсчёта пакетов по IP/портам:
struct bpf_map_def SEC("maps") packet_count = {
.type = BPF_MAP_TYPE_HASH,
.key_size = sizeof(struct flow_key),
.value_size = sizeof(__u64),
.max_entries = 1024,
};if (udp->dest == bpf_htons(5004)) {
__u64 *cnt, zero = 0;
cnt = bpf_map_lookup_elem(&packet_count, &key);
if (!cnt)
bpf_map_update_elem(&packet_count, &key, &zero, BPF_NOEXIST);
else
__sync_fetch_and_add(cnt, 1);
skb->mark = 46; // DSCP EF для QoS
}ip link set dev eth0 xdp obj rtp_qos.o sec xdp
bpftool map dump id <map_id>
mDNS/Avahi: автоматическая локальная сеть без DNS
В небольших сетях часто хочется, чтобы устройства находили друг друга без настройки DNS.
Тут на помощь приходит mDNS (Multicast DNS) — протокол, позволяющий хостам объявлять свои имена и находить другие устройства по имени в локальной сети. В Linux это обычно реализуется через Avahi.
mDNS работает через multicast на адрес 224.0.0.251 (IPv4) или ff02::fb (IPv6). Устройства отправляют запросы «кто такой host.local?» и получают ответ от нужного устройства без центрального DNS.
sudo apt install avahi-daemon avahi-utils
sudo systemctl enable --now avahi-daemon
ping myhost.local
avahi-browse -a
<?xml version="1.0" standalone='no'?>
<service-group>
<name>My SSH Server</name>
<service>
<type>_ssh._tcp</type>
<port>22</port>
</service>
</service-group>
sudo systemctl restart avahi-daemon
TTL и Hop Limit: ограничиваем зоны действия пакетов
TTL (Time To Live) в IPv4 и Hop Limit в IPv6 — это механизм ограничения «жизни» пакета в сети.
Каждому пакету при отправке присваивается число, которое уменьшается на каждом маршрутизаторе. Когда значение достигает нуля, пакет уничтожается.
Проверка TTL исходящего пакета:
ping -c 3 -t 5 8.8.8.8 # IPv4, TTL=5
ping6 -c 3 -m 5 google.com # IPv6, Hop Limit=5
traceroute -m 5 8.8.8.8 # IPv4
traceroute6 -m 5 google.com # IPv6
# IPv4
sudo ip route add 192.168.100.0/24 via 192.168.1.1 ttl 2
# IPv6
sudo ip -6 route add 2001:db8::/64 via fe80::1 hoplimit 3
Loopback-адрес 127.0.0.1: что реально происходит при ping
Loopback-адрес — это специальный адрес в диапазоне 127.0.0.0/8, который всегда ссылается на сам хост.
127.0.0.1:ip addr show lo
ip link show lo
ping 127.0.0.1
ping ::1 # для IPv6
sudo tcpdump -i lo icmp
sudo iptables -L -v -n
sudo nft list ruleset
SR-IOV и DPDK: ускоряем сеть виртуальных машин
SR-IOV (Single Root I/O Virtualization) позволяет делить физическую сетевую карту на несколько виртуальных функций (VF), которые напрямую пробрасываются в виртуальные машины.
Это даёт почти нативную производительность и снижает нагрузку на гипервизор.
lspci | grep -i eth
echo 4 > /sys/class/net/ens1f0/device/sriov_numvfs
virt-install \
--name vm1 \
--memory 4096 \
--vcpus 2 \
--disk size=20 \
--import \
--host-device 0000:81:00.1
sudo apt install dpdk dpdk-dev dpdk-doc
sudo testpmd -l 0-3 -n 4 --socket-mem 1024,1024 \
--file-prefix pg0 -- -i
testpmd> start
testpmd> show port stats
lscpu | grep NUMA
numactl --show
LISP для изоляции IoT-подсетей: тестовая сеть с инкапсуляцией
LISP (Locator/ID Separation Protocol) разделяет идентификаторы устройств (EID, Endpoint ID) и их физическое расположение в сети (RLOC, Routing Locator).
Для IoT это удобно: можно изолировать подсети устройств и одновременно обеспечивать маршрутизацию и масштабируемость.
sudo apt install openlisp
eid_table office
add 10.0.1.0/24
rloc add 192.168.100.1
eid_table warehouse
add 10.0.2.0/24
rloc add 192.168.200.1
lispctl map-register office 192.168.100.1
lispctl map-register warehouse 192.168.200.1
ping 10.0.2.5
traceroute 10.0.2.5
BFD для быстрого failover: мгновенная детекция отказов в BGP и OSPF
BFD (Bidirectional Forwarding Detection) — протокол, который позволяет обнаруживать недоступность соседних маршрутизаторов за миллисекунды.
Он работает поверх UDP и совместим с основными протоколами маршрутизации, такими как BGP и OSPF.
router ospf
bfd
network 10.0.0.0/24 area 0
neighbor 10.0.0.2 bfd
bfd
interval 50 min_rx 50 multiplier 3
router bgp 65001
neighbor 192.0.2.2 remote-as 65002
neighbor 192.0.2.2 bfd
Контейнерные сети: обзор CNI Beyond Flannel и Calico
В Kubernetes и других платформах контейнеризации CNI (Container Network Interface) отвечает за организацию сети между контейнерами — назначение IP, маршрутизацию и связь между подами и внешним миром.
Flannel и Calico долгое время были стандартом. Flannel прост в настройке, создаёт оверлей на базе VXLAN, но ограничен в производительности и сетевой политике.
L2 Loop Prevention без STP: PortFast и BPDU Guard на Cisco и Linux
Петли на уровне L2 могут серьёзно повредить сети. STP — классика борьбы с ними, но иногда избыточна и замедляет подключение устройств.
Для простых случаев используют PortFast и BPDU Guard.
interface Gi1/0/10
spanning-tree portfast
spanning-tree bpduguard enable
spanning-tree portfast default
spanning-tree portfast bpduguard default
brctl setfd br0 0
brctl setageing br0 0
ebtables -A INPUT -p 0x42 -j DROP
Научим находить атаки в трафике до того, как они нанесут ущерб 🕵️♂️
Злоумышленники действуют скрытно, используя сложные методы проникновения. Без должных средств защиты они могут оставаться незамеченными до тех пор, пока не становится слишком поздно. Любая атака оставляет след в сети, но не все специалисты знают, как их найти и использовать, — им не хватает практики и знаний.
Уже 25 августа у Positive Education стартует практикум «Анализ сетевого трафика», в который включили максимум практики с фокусом на разборе реальных атак.
⭐️ Его готовили эксперты Positive Technologies. За их плечами — десятки обнаруженных атак, сложные кейсы и работа с трафиком в боевых условиях.
🎓 Вас ждут практические материалы, вобравшие в себя многолетний опыт экспертов, которые можно изучать в удобном темпе, а также обширная практика на облачном стенде: вы будете воспроизводить хакерские атаки и исследовать их при помощи средств защиты, проверяя те на прочность.
👉 Больше подробностей — на странице практикума.
Когда ICMP нужен: как его отсутствие ломает MSS и PMTU discovery
Во многих инфраструктурах ICMP считают «ненужным» и отрубaют его на периметре — мол, безопасность, чтобы никто не пинговал.
В результате получаем баги, которые тяжело отлаживать: от медленного SSH до обрыва TLS.
ip link | grep mtu
ip route get <dst>
ping -M do -s 1472 <dst> # для MTU 1500 с учетом IP+ICMP
tcpdump -i eth0 icmp or tcp port 443
iptables -A INPUT -p icmp --icmp-type fragmentation-needed -j ACCEPT
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN \
-j TCPMSS --clamp-mss-to-pmtu
sysctl net.ipv4.ip_no_pmtu_disc
Динамическая маршрутизация в IoT-сетях: RPL протокол
RPL (Routing Protocol for Low-Power and Lossy Networks) — это протокол маршрутизации, созданный специально для IoT-сетей с ограниченными ресурсами и нестабильным соединением.
Он строит DAG (направленный ациклический граф) для эффективной передачи данных с минимальным энергопотреблением.
RPL активно используется в 6LoWPAN, Zigbee, Thread и других LPWAN-технологиях.
Практические команды для работы с RPL
1️⃣Запуск border-router (корня DAG) в Contiki-NG:
cd contiki-ng/examples/rpl-border-router
make TARGET=cooja
rpl-print-parent
rpl-print-routes
icmp6.type == 155