00 L2 ağ mimarisi — temel kavramlar
Katman 2 (L2), OSI modelinin veri bağlantı katmanıdır. MAC adresleme, çerçeve iletimi ve yayın alanı (broadcast domain) bu katmanda yönetilir. Embedded gateway tasarımında L2 kararları ağ topolojisini doğrudan belirler.
MAC iletimi ve FDB
Bir Ethernet switch, gelen çerçevenin kaynak MAC adresini giriş portunun kimliğiyle birlikte Forwarding Database (FDB)'ye öğrenir. Hedef MAC FDB'de varsa doğrudan hedefe iletilir; yoksa tüm portlara yayın (flood) yapılır. Linux yazılım bridge de aynı mantıkla çalışır.
Gelen çerçeve (src MAC-A, dst MAC-B)
│
▼
Kaynak öğrenme: FDB[MAC-A] = port P1
│
▼
Hedef arama: FDB[MAC-B] var mı?
├── EVET → sadece hedef porta ilet
└── HAYIR → tüm portlara flood (broadcast, multicast, unknown-unicast)
Broadcast domain ve VLAN
Aynı broadcast domain'deki tüm cihazlar ARP, DHCP gibi yayın trafiğini alır. Bu durum büyük ağlarda hem bant genişliği hem güvenlik sorunu yaratır. VLAN bu sorunu çözer: her VLAN ayrı bir broadcast domain'dir.
| Kavram | Açıklama | Linux karşılığı |
|---|---|---|
| Broadcast domain | Yayın trafiğinin ulaştığı cihaz kümesi | Bridge arayüzü veya VLAN |
| VLAN (802.1Q) | Mantıksal ağ bölümleme, 12-bit VID (1–4094) | ip link add eth0.10 type vlan id 10 |
| Tagged port | VLAN etiketi taşıyan çerçeveler — trunk link | VLAN arayüz, bridge vlan tagged |
| Untagged port | Etiketsiz çerçeveler — access/erişim bağlantısı | PVID ile bridge vlan untagged |
| FDB | Forwarding Database — MAC → port eşlemesi | bridge fdb show |
| STP | Spanning Tree Protocol — döngü önleme | bridge stp_state 1 |
iproute2 vs brctl/vconfig/ifenslave
Modern Linux dağıtımlarında tüm L2 yapılandırması ip link komutuyla yapılır. Eski araçlar hâlâ çalışsa da önerilmez:
ip link type vlan ile değiştirildiip link type bond ile değiştirildiBu bölümde
- L2 anahtar: FDB öğrenimi, flood ve MAC iletimi
- VLAN broadcast domain'leri böler — güvenlik ve bant genişliği için kritik
- Tüm modern L2 yapılandırması
ip link+bridgearaçlarıyla yapılır
01 802.1Q VLAN — etiketleme ve yapılandırma
IEEE 802.1Q standardı, Ethernet çerçevesine 4 baytlık VLAN etiketi ekler. Linux bu etiketi 8021q modülü aracılığıyla çekirdek içinde işler.
802.1Q çerçeve yapısı
┌────────────┬───────────┬──────────┬────────────────────────┬─────┐
│ Dst MAC │ Src MAC │ 0x8100 │ TCI (PCP 3b+DEI 1b+ │ │
│ (6 bayt) │ (6 bayt) │(EtherType│ VID 12b) │... │
│ │ │ 2 bayt) │ (2 bayt) │ │
└────────────┴───────────┴──────────┴────────────────────────┴─────┘
▲ ▲
VLAN etiketi VID: 1–4094
0x8100 (0=untagged, 4095=rezerve)
VLAN arayüzü oluşturma
# 8021q modülünü yükle
modprobe 8021q
# eth0 üzerinde VLAN 10 arayüzü oluştur
ip link add link eth0 name eth0.10 type vlan id 10
# Arayüzü etkinleştir
ip link set eth0.10 up
# IP adresi ata
ip addr add 192.168.10.1/24 dev eth0.10
# Birden fazla VLAN
ip link add link eth0 name eth0.20 type vlan id 20
ip link add link eth0 name eth0.30 type vlan id 30
ip link set eth0.20 up
ip link set eth0.30 up
# Tüm VLAN arayüzleri listele
ip -d link show type vlan
# VLAN arayüzünü sil
ip link del eth0.10
VLAN filtreleme ve egress seçenekleri
# VLAN arayüzü ayrıntıları
ip -d link show eth0.10
# Örnek çıktı:
# 4: eth0.10@eth0: mtu 1500 qdisc noqueue state UP
# vlan protocol 802.1Q id 10 <REORDER_HDR>
# VLAN QoS eşlemesi (ingress: wire priority → Linux skb priority)
ip link add link eth0 name eth0.10 type vlan id 10 \
ingress-qos-map 0:0 1:1 2:2 3:3 4:4 5:5 6:6 7:7
# Egress QoS: Linux priority → wire 802.1p PCP
ip link add link eth0 name eth0.10 type vlan id 10 \
egress-qos-map 0:0 1:1 2:2 6:6 7:7
# GVRP (GARP VLAN Registration Protocol) etkinleştir
ip link add link eth0 name eth0.10 type vlan id 10 gvrp on
# MVRP etkinleştir
ip link add link eth0 name eth0.10 type vlan id 10 mvrp on
Q-in-Q (802.1ad) — iç içe VLAN
# Dış VLAN (S-Tag, 0x88a8 — provider etiketi)
ip link add link eth0 name eth0.100 type vlan \
id 100 proto 802.1ad
# İç VLAN (C-Tag, 0x8100 — müşteri etiketi)
ip link add link eth0.100 name eth0.100.10 type vlan \
id 10 proto 802.1Q
ip link set eth0.100 up
ip link set eth0.100.10 up
ip addr add 192.168.10.1/24 dev eth0.100.10
Bu bölümde
- 802.1Q etiketi: EtherType 0x8100 + TCI (PCP 3b + DEI 1b + VID 12b)
ip link add link eth0 name eth0.VID type vlan id VID— standart VLAN oluşturma- Q-in-Q: dış tag 802.1ad (0x88a8), iç tag 802.1Q (0x8100)
02 Linux bridge — FDB, STP, RSTP
Linux yazılım köprüsü (bridge), ağ arayüzlerini Katman 2'de birleştiren sanal bir switch gibi davranır. Donanım switch olmayan sistemlerde ya da ek esneklik gerektiren durumlarda kullanılır.
Bridge oluşturma ve port ekleme
# Bridge oluştur
ip link add name br0 type bridge
ip link set br0 up
# Portları bridge'e ekle
ip link set eth0 master br0
ip link set eth1 master br0
ip link set eth0 up
ip link set eth1 up
# Bridge'e IP adresi ata (yönetim)
ip addr add 192.168.1.1/24 dev br0
# Bridge bilgisi
ip -d link show type bridge
ip -d link show master br0
# Bridge slave port durumu
ip link show master br0
Bridge parametreleri
# STP etkinleştir
ip link set br0 type bridge stp_state 1
# STP önceliği ayarla (root bridge için düşük)
ip link set br0 type bridge priority 4096
# Forward delay (STP geçiş süresi, saniye)
ip link set br0 type bridge forward_delay 4
# Hello time
ip link set br0 type bridge hello_time 2
# Max age
ip link set br0 type bridge max_age 12
# FDB ageing süresi (saniye)
ip link set br0 type bridge ageing_time 300
# Multicast snooping
ip link set br0 type bridge mcast_snooping 1
# Tüm parametreleri görüntüle
ip -d link show br0
Port düzeyinde STP ayarları
# Port path cost (düşük = tercihli)
ip link set eth0 type bridge_slave cost 2
ip link set eth1 type bridge_slave cost 4
# Port önceliği
ip link set eth0 type bridge_slave priority 32
# PortFast (edge port — STP gecikme yok)
ip link set eth0 type bridge_slave state 3
# Guard port — BPDU'ları reddet
ip link set eth0 type bridge_slave guard 1
# Root guard — bu porttan root bridge reklamı engelle
ip link set eth0 type bridge_slave root_block 1
# Flood modu
ip link set eth0 type bridge_slave flood 1
FDB (Forwarding Database) yönetimi
# Tüm FDB girdileri
bridge fdb show
# Belirli bridge için
bridge fdb show br br0
# Belirli port için
bridge fdb show dev eth0
# Statik FDB girdisi ekle
bridge fdb add 00:11:22:33:44:55 dev eth0 static
# FDB girdisini sil
bridge fdb del 00:11:22:33:44:55 dev eth0
# Perma girdi (ageing'den muaf)
bridge fdb add 00:11:22:33:44:55 dev eth0 permanent
# Yerel (local) girdi — bridge kendi MAC'i
bridge fdb show | grep permanent
Bu bölümde
ip link add name br0 type bridge+ip link set ethX master br0- STP:
stp_state 1ile etkinleştirilir; port cost ve öncelik ayarlanabilir - FDB: dinamik öğrenme (ageing ile silinir) + statik/permanent girdiler
03 Bridge + VLAN aware mod
Linux bridge'in VLAN aware modu, her port için bağımsız VLAN üyeliği ve PVID tanımına izin vererek donanım switch gibi davranmasını sağlar.
VLAN aware bridge oluşturma
# VLAN filtreleme etkin bridge
ip link add name br0 type bridge vlan_filtering 1
ip link set br0 up
# Port ekle
ip link set eth0 master br0
ip link set eth1 master br0
ip link set eth2 master br0
ip link set eth0 up
ip link set eth1 up
ip link set eth2 up
# Mevcut VLAN yapılandırması
bridge vlan show
VLAN üyeliği senaryosu
Tipik bir senaryo: eth0 ve eth1 LAN erişim portu (VLAN 10, untagged), eth2 uplink trunk portu (VLAN 10 ve VLAN 20, tagged).
# Varsayılan VID 1'i tüm portlardan kaldır
bridge vlan del dev eth0 vid 1
bridge vlan del dev eth1 vid 1
bridge vlan del dev eth2 vid 1
bridge vlan del dev br0 vid 1 self
# eth0: erişim portu — VLAN 10, untagged, PVID
bridge vlan add dev eth0 vid 10 pvid untagged
# eth1: erişim portu — VLAN 20, untagged, PVID
bridge vlan add dev eth1 vid 20 pvid untagged
# eth2: trunk — VLAN 10 ve 20, tagged
bridge vlan add dev eth2 vid 10
bridge vlan add dev eth2 vid 20
# CPU (br0 kendisi) her iki VLAN'a dahil
bridge vlan add dev br0 vid 10 self
bridge vlan add dev br0 vid 20 self
# Yapılandırmayı doğrula
bridge vlan show
VLAN interface ile yönetim erişimi
# VLAN 10 için bridge VLAN arayüzü oluştur
ip link add link br0 name br0.10 type vlan id 10
ip link set br0.10 up
ip addr add 192.168.10.1/24 dev br0.10
# VLAN 20 için
ip link add link br0 name br0.20 type vlan id 20
ip link set br0.20 up
ip addr add 192.168.20.1/24 dev br0.20
PVID ve egress untagged tablo
| Port tipi | Gelen (ingress) | Çıkan (egress) | Komut |
|---|---|---|---|
| Erişim (access) | Etiketlenmemiş → PVID'ye atanır | Etiket soyulur | pvid untagged |
| Trunk | Tagged çerçeve kabul | Etiket korunur | vid N (etiket yok) |
| Hibrit | Hem tagged hem untagged | Konfigürasyona göre | pvid + ek vid'ler |
| CPU (self) | Kernel yığınına yönlendirilir | Kernel'den gönderilir | vid N self |
Bu bölümde
- VLAN aware bridge:
vlan_filtering 1parametresiyle oluşturulur - Erişim portu:
pvid untagged— trunk portu: sadecevid N - CPU portuna (
self) eklenmesi gereken VLAN'lar bridge'den trafik alabilmek için zorunludur
04 macvlan ve ipvlan
macvlan ve ipvlan, tek bir fiziksel arayüz üzerinden birden fazla bağımsız ağ kimliği oluşturmayı sağlayan sanal arayüz türleridir. Konteyner ve sanal makine ağ yapılandırmalarında yaygınca kullanılır.
macvlan modları
# macvlan BRIDGE modunda oluştur
ip link add link eth0 name macvlan0 type macvlan mode bridge
ip link set macvlan0 up
ip addr add 192.168.1.10/24 dev macvlan0
# macvlan PRIVATE modunda
ip link add link eth0 name macvlan1 type macvlan mode private
ip link set macvlan1 up
# macvlan VEPA modunda (harici switch VEPA destekli olmalı)
ip link add link eth0 name macvlan2 type macvlan mode vepa
ip link set macvlan2 up
# macvlan bilgisi
ip -d link show type macvlan
# Silme
ip link del macvlan0
ipvlan — MAC paylaşımlı sanal arayüz
ipvlan, macvlan'dan farklı olarak aynı MAC adresini paylaşır; bunun yerine IP adresine göre ayrım yapar. Bu, bazı switch'lerin MAC sınırı kısıtlamasını aşar.
# ipvlan L2 modunda (katman 2 yalıtım)
ip link add link eth0 name ipvlan0 type ipvlan mode l2
ip link set ipvlan0 up
ip addr add 192.168.1.11/24 dev ipvlan0
# ipvlan L3 modunda (katman 3 yönlendirme)
ip link add link eth0 name ipvlan1 type ipvlan mode l3
ip link set ipvlan1 up
ip addr add 10.0.0.1/24 dev ipvlan1
# ipvlan L3s modunda (L3 + src-ip seçici — source validation)
ip link add link eth0 name ipvlan2 type ipvlan mode l3s
macvlan ve ipvlan karşılaştırması
| Özellik | macvlan | ipvlan |
|---|---|---|
| MAC adresi | Her arayüze ayrı MAC | Fiziksel MAC paylaşılır |
| Switch MAC sınırı | Etkilenir | Etkilenmez |
| ARP davranışı | Her arayüz kendi ARP'ı yanıtlar | IP'ye göre yönlendirme |
| L3 modda routing | Hayır | Evet (ipvlan L3/L3s) |
| Promiscuous mod | Gerektirir | Gerekmez |
| Kullanım senaryosu | Konteyner ağı, test arayüzü | Çok-IP, network namespace |
Bu bölümde
- macvlan: her sanal arayüze ayrı MAC — BRIDGE/PRIVATE/VEPA/PASSTHRU modları
- ipvlan: MAC paylaşımlı, IP bazlı ayrım — switch MAC limiti aşılır
- Konteyner ağında macvlan BRIDGE modu, sanal makinede PASSTHRU yaygın kullanılır
05 Bonding — aktif-pasif, LACP, balance-rr
Linux bonding, birden fazla fiziksel ağ arayüzünü tek bir mantıksal arayüzde birleştirerek yedeklilik (redundancy) ve/veya bant genişliği birleştirme (link aggregation) sağlar.
Bonding modları
| Mod | Adı | Açıklama | Switch gereksinimi |
|---|---|---|---|
| 0 | balance-rr | Round-robin — paket başına sıralı iletim; yük dengeleme | LAG/LACP değil, sadece flood |
| 1 | active-backup | Bir aktif, diğerleri yedek; failover | Gereksiz — standart switch |
| 2 | balance-xor | XOR hash — src/dst MAC bazlı yük dengeleme | Static LAG |
| 3 | broadcast | Tüm portlardan aynı paket gönderilir | Özel — genellikle kullanılmaz |
| 4 | 802.3ad (LACP) | Dinamik LAG — IEEE 802.3ad, switch ile müzakere | LACP destekli switch zorunlu |
| 5 | balance-tlb | Uyarlanabilir TX yük dengeleme; RX tek porttan | Gereksiz |
| 6 | balance-alb | Uyarlanabilir yük dengeleme; TX+RX dağıtım | Gereksiz |
active-backup (mod 1) kurulumu
# Bond arayüzü oluştur — mod 1 active-backup
ip link add name bond0 type bond mode active-backup
# Miimon: link izleme aralığı ms cinsinden
ip link set bond0 type bond miimon 100
# Slave portları ekle (önce down yapılmalı)
ip link set eth0 down
ip link set eth1 down
ip link set eth0 master bond0
ip link set eth1 master bond0
# Bond ve slave'leri etkinleştir
ip link set bond0 up
ip link set eth0 up
ip link set eth1 up
# Aktif portu belirle (primary)
ip link set bond0 type bond primary eth0
# Durum kontrolü
cat /proc/net/bonding/bond0
802.3ad LACP (mod 4) kurulumu
# LACP bond oluştur
ip link add name bond0 type bond mode 802.3ad
ip link set bond0 type bond miimon 100
# LACP hızı: slow (30s) veya fast (1s)
ip link set bond0 type bond lacp_rate fast
# Transmission hash policy: layer2, layer2+3, layer3+4, encap2+3
ip link set bond0 type bond xmit_hash_policy layer3+4
# Minimum aktif slave sayısı
ip link set bond0 type bond min_links 1
# Slave ekle
ip link set eth0 down
ip link set eth1 down
ip link set eth0 master bond0
ip link set eth1 master bond0
ip link set bond0 up
ip link set eth0 up
ip link set eth1 up
# LACP müzakere durumu
cat /proc/net/bonding/bond0 | grep -A2 "Slave Interface"
balance-rr (mod 0) ve balance-xor (mod 2)
# balance-rr: paket başına round-robin
ip link add name bond0 type bond mode balance-rr
ip link set bond0 type bond miimon 100
# balance-xor: hash ile belirli akışları belirli porta yönlendir
ip link add name bond0 type bond mode balance-xor
ip link set bond0 type bond xmit_hash_policy layer3+4
# Bonding istatistikleri
cat /proc/net/bonding/bond0
# sysfs üzerinden parametreler
cat /sys/class/net/bond0/bonding/mode
cat /sys/class/net/bond0/bonding/slaves
cat /sys/class/net/bond0/bonding/active_slave
cat /sys/class/net/bond0/bonding/miimon
Bu bölümde
- active-backup (mod 1): yedeklilik, switch LACP gerektirmez — üretimde en güvenli
- 802.3ad (mod 4): LACP ile dinamik yük dengeleme — switch desteği zorunlu
miimonile link izleme ayarlanır;/proc/net/bonding/bond0tüm durumu gösterir
06 team sürücüsü — teamd ve runner'lar
team sürücüsü, bonding'e alternatif bir yük dengeleme ve yedeklilik çözümüdür. Kullanıcı alanında teamd arka plan süreci JSON yapılandırmasıyla yönetilir.
bonding ve team karşılaştırması
| Özellik | bonding | team |
|---|---|---|
| Kernel modülü | bonding.ko | team.ko + team_mode_*.ko |
| Yapılandırma | sysfs / ip link | teamd JSON + teamdctl |
| Runner mantığı | Kernel içi | Kullanıcı alanı (teamd) |
| LACP uygulama | Kernel | teamd (daha esnek) |
| BPF/lwtunnel | Sınırlı | Daha esnek |
| Yaygınlık | Çok yaygın | Daha az, NetworkManager entegreli |
teamd yapılandırması — activebackup
{
"device": "team0",
"runner": {
"name": "activebackup",
"hwaddr_policy": "same_all"
},
"link_watch": {
"name": "ethtool",
"delay_up": 2500,
"delay_down": 1000
},
"ports": {
"eth0": {
"prio": 100,
"sticky": true
},
"eth1": {
"prio": 10
}
}
}
# teamd başlat
teamd -d -f /etc/teamd/team0.conf -t team0
# Durum izle
teamdctl team0 state
# Aktif portu görüntüle
teamdctl team0 state item get runner.active_port
# Aktif portu değiştir
teamdctl team0 port config update eth1 '{"prio": 200}'
teamd yapılandırması — LACP runner
{
"device": "team0",
"runner": {
"name": "lacp",
"active": true,
"fast_rate": true,
"tx_hash": ["eth", "ipv4", "ipv6"],
"tx_balancer": {
"name": "basic"
}
},
"link_watch": {
"name": "ethtool"
},
"ports": {
"eth0": {},
"eth1": {}
}
}
teamd yapılandırması — loadbalance runner
{
"device": "team0",
"runner": {
"name": "loadbalance",
"tx_hash": ["eth", "ipv4", "ipv6", "tcp", "udp"],
"tx_balancer": {
"name": "basic",
"balancing_interval": 50
}
},
"ports": {
"eth0": {},
"eth1": {}
}
}
link_watch türleri
Bu bölümde
- teamd: JSON yapılandırmalı, kullanıcı alanı tabanlı link aggregation
- runner: activebackup, lacp, loadbalance, roundrobin, broadcast, random
- link_watch: ethtool (hızlı) veya arp_ping (uçtan uca bağlantı testi)
07 Embedded gateway örneği
Gerçekçi bir embedded Linux gateway senaryosu: WAN arayüzü eth0, LAN switch portları eth1 + VLAN'lar, WLAN arayüzü wlan0 — hepsinin bridge ve VLAN ile entegrasyonu.
Hedef topoloji
İnternet
│
eth0 (WAN)
│
┌───────┴───────┐
│ Linux Router │
│ │
┌────┴───────────────┴────┐
│ br-lan │ ← VLAN aware bridge
│ eth1.10 eth1.20 wlan0│
└────────────────────────-┘
│ │
LAN VLAN10 GUEST VLAN20
192.168.10.0 192.168.20.0
Yapılandırma scripti
#!/bin/sh
# embedded-gateway-setup.sh
# WAN + LAN (VLAN10) + Guest (VLAN20) + WLAN bridge
### 1. Modüller ###
modprobe 8021q
modprobe bridge
### 2. Arayüzleri hazırla ###
ip link set eth0 up # WAN
ip link set eth1 up # Switch uplink
ip link set wlan0 up # Wi-Fi (hostapd tarafından yönetilir)
### 3. VLAN arayüzleri ###
ip link add link eth1 name eth1.10 type vlan id 10
ip link add link eth1 name eth1.20 type vlan id 20
ip link set eth1.10 up
ip link set eth1.20 up
### 4. LAN bridge — VLAN 10 ###
ip link add name br-lan type bridge vlan_filtering 0
ip link set br-lan up
ip link set eth1.10 master br-lan
ip link set wlan0 master br-lan
ip addr add 192.168.10.1/24 dev br-lan
### 5. Guest bridge — VLAN 20 (izole) ###
ip link add name br-guest type bridge vlan_filtering 0
ip link set br-guest up
ip link set eth1.20 master br-guest
ip addr add 192.168.20.1/24 dev br-guest
### 6. WAN IP (DHCP client) ###
udhcpc -i eth0 -b -p /var/run/udhcpc.eth0.pid
### 7. NAT ve IP yönlendirme ###
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i br-lan -o eth0 -j ACCEPT
iptables -A FORWARD -i br-guest -o eth0 -j ACCEPT
# LAN - Guest arası erişimi engelle
iptables -A FORWARD -i br-guest -o br-lan -j DROP
iptables -A FORWARD -i br-lan -o br-guest -j DROP
### 8. DHCP sunucusu ###
# /etc/dnsmasq.conf içeriği:
# interface=br-lan
# dhcp-range=192.168.10.100,192.168.10.200,12h
# interface=br-guest
# dhcp-range=192.168.20.100,192.168.20.200,12h
dnsmasq --conf-file=/etc/dnsmasq.conf
Daha gelişmiş — tek bridge VLAN aware ile
# Tek VLAN aware bridge ile aynı yapı
ip link add name br0 type bridge vlan_filtering 1
ip link set br0 up
# eth1 trunk — her iki VLAN tagged
ip link set eth1 master br0
bridge vlan add dev eth1 vid 10
bridge vlan add dev eth1 vid 20
bridge vlan del dev eth1 vid 1
# wlan0 LAN VLAN10, untagged erişim
ip link set wlan0 master br0
bridge vlan add dev wlan0 vid 10 pvid untagged
bridge vlan del dev wlan0 vid 1
# CPU — her iki VLAN
bridge vlan add dev br0 vid 10 self
bridge vlan add dev br0 vid 20 self
bridge vlan del dev br0 vid 1 self
# VLAN arayüzleri ile yönetim
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
ip addr add 192.168.10.1/24 dev br0.10
ip addr add 192.168.20.1/24 dev br0.20
Kalıcı yapılandırma — systemd-networkd
# /etc/systemd/network/10-eth1.network
[Match]
Name=eth1
[Network]
Bridge=br-lan
VLAN=eth1.10
VLAN=eth1.20
# /etc/systemd/network/20-br-lan.netdev
[NetDev]
Name=br-lan
Kind=bridge
[Bridge]
VLANFiltering=yes
STP=yes
Bu bölümde
- VLAN arayüzleri (eth1.10, eth1.20) ile LAN/Guest segmentasyonu
- iptables MASQUERADE + ip_forward ile NAT tabanlı gateway
- Guest VLAN ile LAN arası izolasyon DROP kuralıyla sağlanır
08 Hata ayıklama
L2 ağ sorunlarını teşhis etmek için bridge araçları, ip komutu ve kernel izleme mekanizmaları sistematik biçimde kullanılır.
bridge araçlarıyla kapsamlı inceleme
# Tüm bridge'ler
bridge link show
# FDB — MAC öğrenme tablosu
bridge fdb show
bridge fdb show br br0
bridge fdb show dev eth0
# VLAN üyeliği
bridge vlan show
bridge vlan show dev eth0
# MDB — multicast üyelik
bridge mdb show
bridge mdb show dev br0
# STP durumu
bridge link show | grep -E "state|cost"
ip -d link show — ayrıntılı arayüz bilgisi
# Tüm arayüzlerin ayrıntılı çıktısı
ip -d link show
# Bridge arayüzleri
ip -d link show type bridge
# VLAN arayüzleri
ip -d link show type vlan
# Bond arayüzleri
ip -d link show type bond
# macvlan
ip -d link show type macvlan
# Belirli bridge üyelerinin durumu
ip -d link show master br0
Bonding durumu ve istatistikleri
# Bonding genel durumu
cat /proc/net/bonding/bond0
# Aktif slave
cat /sys/class/net/bond0/bonding/active_slave
# Tüm slave'ler
cat /sys/class/net/bond0/bonding/slaves
# LACP PDU istatistikleri
cat /proc/net/bonding/bond0 | grep -A4 "LACP"
# ethtool ile slave port istatistikleri
ethtool -S eth0
ethtool -S eth1
# Link durumu izleme
watch -n1 "cat /proc/net/bonding/bond0 | grep -E 'Currently|MII'"
ss ve ip neigh ile L2/L3 tablo
# ARP tablosu
ip neigh show
ip neigh show dev br0
# ARP girdisi ekle (statik)
ip neigh add 192.168.10.5 lladdr 00:aa:bb:cc:dd:ee dev br0
# Belirli interface trafiğini yakala
tcpdump -i br0 -n -e # -e: L2 başlıkları göster
tcpdump -i br0 arp # sadece ARP
tcpdump -i eth1 vlan # sadece VLAN etiketli çerçeveler
# Aktif bağlantılar ve socket
ss -tuln
Yaygın sorunlar ve çözümleri
| Belirti | Olası Neden | Çözüm |
|---|---|---|
| Bridge portlar arası trafik yok | Port down veya STP blocking | ip link show master br0 ile port durumu kontrol |
| VLAN trafiği geçmiyor | PVID eksik veya VLAN üyeliği yanlış | bridge vlan show ile üyeliği doğrula |
| Bond failover çalışmıyor | miimon 0 veya sürücü link bildirmez | miimon 100 ayarla; cat /proc/net/bonding/bond0 |
| LACP müzakere yok | Switch LACP desteği yok veya port grubu yanlış | Switch tarafı konfigürasyonu doğrula |
| macvlan host ile iletişim kuramıyor | Loopback kısıtı — VEPA/PRIVATE modları | macvlan BRIDGE moduna geç veya sanal loopback ekle |
| ARP cevabı yok | proxy_arp veya ebtables bloğu | sysctl net.ipv4.conf.br0.proxy_arp ve ebtables kuralları kontrol |
ebtables — L2 filtreleme
# Mevcut ebtables kuralları
ebtables -L --Lmac2
# Belirli MAC adresini bridge'de engelle
ebtables -A FORWARD -s 00:11:22:33:44:55 -j DROP
# Sadece ARP'a izin ver, diğerlerini engelle
ebtables -A FORWARD -p ARP -j ACCEPT
ebtables -A FORWARD -j DROP
# VLAN etiketli trafiği filtrele
ebtables -A FORWARD -p 802_1Q --vlan-id 20 -j DROP
# ebtables kurallarını sıfırla
ebtables -F
Bu bölümde
bridge fdb/vlan/mdb show— FDB, VLAN üyeliği, multicast tablolarıip -d link show type bridge/vlan/bond— arayüz türüne göre filtreleme/proc/net/bonding/bond0— bonding durum, aktif slave, LACP bilgisi- ebtables ile Katman 2'de MAC ve VLAN bazlı filtreleme yapılabilir