Tüm eğitimler
TEKNİK REHBER GÖMÜLÜ LİNUX AĞ YAPISI 2026

VLAN, Bridge & Bonding
Linux L2 Ağ Altyapısı

802.1Q VLAN, yazılım köprüsü, bonding/team ve gerçek embedded gateway yapılandırmasını iproute2 araçlarıyla adım adım inşa edin.

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.

KavramAçıklamaLinux karşılığı
Broadcast domainYayın trafiğinin ulaştığı cihaz kümesiBridge 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 portVLAN etiketi taşıyan çerçeveler — trunk linkVLAN arayüz, bridge vlan tagged
Untagged portEtiketsiz çerçeveler — access/erişim bağlantısıPVID ile bridge vlan untagged
FDBForwarding Database — MAC → port eşlemesibridge fdb show
STPSpanning Tree Protocol — döngü önlemebridge 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 linkVLAN, bridge, bond, team, macvlan, ipvlan oluşturma/silme — hepsini kapsar
bridgeBridge FDB, VLAN, STP, MDB yönetimi — iproute2 paketinin parçası
brctlEski bridge aracı — net-tools paketi; yeni sistemlerde kullanmayın
vconfigEski VLAN aracı — net-tools paketi; ip link type vlan ile değiştirildi
ifenslaveEski bonding aracı; ip link type bond ile değiştirildi

Bu 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 + bridge araç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

bash
# 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

bash
# 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

bash
# 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

bash
# 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

bash
# 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ı

bash
# 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

bash
# 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 1 ile 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

bash
# 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).

bash
# 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

bash
# 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 tipiGelen (ingress)Çıkan (egress)Komut
Erişim (access)Etiketlenmemiş → PVID'ye atanırEtiket soyulurpvid untagged
TrunkTagged çerçeve kabulEtiket korunurvid N (etiket yok)
HibritHem tagged hem untaggedKonfigürasyona görepvid + ek vid'ler
CPU (self)Kernel yığınına yönlendirilirKernel'den gönderilirvid N self

Bu bölümde

  • VLAN aware bridge: vlan_filtering 1 parametresiyle oluşturulur
  • Erişim portu: pvid untagged — trunk portu: sadece vid 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_MODE_PRIVATEAynı fiziksel arayüzdeki macvlan'lar birbirini göremez; en yalıtılmış mod
MACVLAN_MODE_VEPAVirtual Ethernet Port Aggregator — trafik dışarı çıkıp geri gelir; harici switch gerektirir
MACVLAN_MODE_BRIDGEAynı fiziksel arayüzdeki macvlan'lar doğrudan iletişim kurabilir; dahili switch gibi davranır
MACVLAN_MODE_PASSTHRUTek macvlan, fiziksel arayüzü devralan mod — sanal makinede doğrudan NIC kullanımı
MACVLAN_MODE_SOURCESadece belirli kaynak MAC adreslerinden gelen trafiği kabul eder; filtreleme için
bash
# 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.

bash
# 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ı

Özellikmacvlanipvlan
MAC adresiHer arayüze ayrı MACFiziksel MAC paylaşılır
Switch MAC sınırıEtkilenirEtkilenmez
ARP davranışıHer arayüz kendi ARP'ı yanıtlarIP'ye göre yönlendirme
L3 modda routingHayırEvet (ipvlan L3/L3s)
Promiscuous modGerektirirGerekmez
Kullanım senaryosuKonteyner 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ı

ModAdıAçıklamaSwitch gereksinimi
0balance-rrRound-robin — paket başına sıralı iletim; yük dengelemeLAG/LACP değil, sadece flood
1active-backupBir aktif, diğerleri yedek; failoverGereksiz — standart switch
2balance-xorXOR hash — src/dst MAC bazlı yük dengelemeStatic LAG
3broadcastTüm portlardan aynı paket gönderilirÖzel — genellikle kullanılmaz
4802.3ad (LACP)Dinamik LAG — IEEE 802.3ad, switch ile müzakereLACP destekli switch zorunlu
5balance-tlbUyarlanabilir TX yük dengeleme; RX tek porttanGereksiz
6balance-albUyarlanabilir yük dengeleme; TX+RX dağıtımGereksiz

active-backup (mod 1) kurulumu

bash
# 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

bash
# 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)

bash
# 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
  • miimon ile link izleme ayarlanır; /proc/net/bonding/bond0 tü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ı

Özellikbondingteam
Kernel modülübonding.koteam.ko + team_mode_*.ko
Yapılandırmasysfs / ip linkteamd JSON + teamdctl
Runner mantığıKernel içiKullanıcı alanı (teamd)
LACP uygulamaKernelteamd (daha esnek)
BPF/lwtunnelSınırlıDaha esnek
YaygınlıkÇok yaygınDaha az, NetworkManager entegreli

teamd yapılandırması — activebackup

json
{
  "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
    }
  }
}
bash
# 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

json
{
  "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

json
{
  "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

ethtoolSürücü seviyesi link durumu — en hızlı, donanım IRQ tabanlı
arp_pingBelirli IP adresine ARP gönderir; yanıt yoksa bağlantı down sayılır
nsna_pingIPv6 Neighbor Solicitation ile link izleme
tipcTIPC protokolü ile cluster link izleme

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

bash
#!/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

bash
# 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

ini
# /etc/systemd/network/10-eth1.network
[Match]
Name=eth1

[Network]
Bridge=br-lan
VLAN=eth1.10
VLAN=eth1.20
ini
# /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

bash
# 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

bash
# 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

bash
# 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

bash
# 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

BelirtiOlası NedenÇözüm
Bridge portlar arası trafik yokPort down veya STP blockingip link show master br0 ile port durumu kontrol
VLAN trafiği geçmiyorPVID eksik veya VLAN üyeliği yanlışbridge vlan show ile üyeliği doğrula
Bond failover çalışmıyormiimon 0 veya sürücü link bildirmezmiimon 100 ayarla; cat /proc/net/bonding/bond0
LACP müzakere yokSwitch LACP desteği yok veya port grubu yanlışSwitch tarafı konfigürasyonu doğrula
macvlan host ile iletişim kuramıyorLoopback kısıtı — VEPA/PRIVATE modlarımacvlan BRIDGE moduna geç veya sanal loopback ekle
ARP cevabı yokproxy_arp veya ebtables bloğusysctl net.ipv4.conf.br0.proxy_arp ve ebtables kuralları kontrol

ebtables — L2 filtreleme

bash
# 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