TGViewer
Серверная Админа | Компьютерные сети Серверная Админа | Компьютерные сети @school_network · 26.6K subscribers
Post #2836 3.28K
👋 Привет, сетевой друг!

Сегодня разберём eBPF vs iptables/nftables. По факту это два подхода к фильтрации трафика, которые сейчас активно конкурируют в Kubernetes и просто в Linux-окружениях.

🟣Классический стек iptables/nftables: правила обрабатываются последовательно через цепочки netfilter в ядре. Каждый пакет проходит через все правила пока не найдёт совпадение. При тысячах правил (типичная ситуация в Kubernetes) это становится узким местом - каждое новое правило добавляет линейную сложность O(n).

Посмотреть текущие правила и статистику:

iptables -L -n -v --line-numbers
nft list ruleset
iptables -t filter -L -n -v | grep -v "0 0"


🟣Что меняет eBPF: вместо обхода цепочек правил программа на eBPF выполняется прямо в ядре при каждом пакете - без копирования в userspace, без обхода длинных цепочек. Решение принимается за O(1) через hash-таблицы вместо O(n) через правила:

# Простой XDP-дроппер через eBPF
cat > drop_icmp.c << 'EOF'
#include <linux/bpf.h>
#include <linux/if_ether.h>
#include <linux/ip.h>

SEC("xdp")
int drop_icmp(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;
struct iphdr *ip = (void *)(eth + 1);
if ((void *)(ip + 1) > data_end) return XDP_PASS;
if (ip->protocol == 1) return XDP_DROP;
return XDP_PASS;
}
EOF

clang -O2 -target bpf -c drop_icmp.c -o drop_icmp.o
ip link set dev eth0 xdp obj drop_icmp.o sec xdp


🟣Почему Kubernetes переходит на eBPF через Cilium: kube-proxy генерирует тысячи iptables-правил для service routing - по несколько правил на каждый сервис и эндпоинт. При 10000 сервисов это десятки тысяч правил, обновление которых занимает секунды и блокирует пакетную обработку. Cilium заменяет всё это на eBPF-программы с hash-таблицами:

# Проверяем что Cilium использует eBPF вместо iptables
cilium status | grep -i datapath
cilium bpf lb list # вся load balancing таблица
cilium bpf policy get --all # политики как eBPF программы


🟣Эмулируем разницу под нагрузкой - добавляем 10000 iptables-правил и меряем деградацию:

# Генерируем 10000 правил
for i in $(seq 1 10000); do
iptables -A INPUT -s 10.$((i/256)).$((i%256)).0/24 -j ACCEPT
done

# Меряем пропускную способность
iperf3 -c target -t 30

# Чистим и меряем без правил для сравнения
iptables -F INPUT
iperf3 -c target -t 30


🟣Когда iptables/nftables всё ещё правильный выбор: небольшие сети с сотнями правил, классические серверы без Kubernetes, когда команда не готова к eBPF-отладке. eBPF побеждает при тысячах правил, высоком pps и динамически меняющейся конфигурации как в Kubernetes.

Серверная Админа | Zeroday | #eBPF #iptables
  • 👍 4
  • ❤ 3
  • 🤯 2
  • 👾 2
  • 🥱 1
More from @school_network
  1. Oct 1, 2026👋 Привет, сетевой друг! Сегодня про UUCP - протокол и набор утилит, через которые Unix-ма…
  2. Sep 30, 2026👋 Привет, сетевой друг! Давай разберём несколько TCP-флагов и состояний, которые особенно…
  3. Sep 29, 2026👋 Привет, сетевой друг! Сегодня про webcensus - инструмент для довольно специфичной задач…
  4. Sep 28, 2026Почему SAML снова и снова ломается на одном и том же месте? SAML больше 20 лет отвечает за…
  5. Sep 26, 2026👨‍💻Серверная Админа | #мем
  6. Sep 25, 2026👋 Привет, сетевой друг! Сегодня про Ethernet, который мы привыкли воспринимать как обычны…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →