User Tools

Site Tools


sk1:bridge_bonding

TUN / TAP

TUN i TAP to rozwiązania w Linuksie które pozwalają zastąpić protokoły warstwy łącza danych i fizycznej programem
https://en.wikipedia.org/wiki/TUN/TAP

Porównaj:
'' '' Interface sieciowy mający z jednego końca system operacyjny, z drugiego – kabel / fale radiowe.
TUN lub TAP Interface sieciowy mający z jednego końca system operacyjny, z drugiego – program.

TAP działa na warstwie łącza danych (program dostaje i generuje ramki ethernetowe)
TUN działa bezpośrednio na warstwie sieci (program dostaje i generuje pakiety IP)

Zastosowania:

  • tunele
  • maszyny wirtualne (np. qemu)

Komendy:

  • ip tuntap add dev <ifname> [mode {tun|tap}] [user <username>]
  • tunctl [-n|-t] [-u <user>] [-t <ifname>]

Interfejs programistyczny:

Mostki

System Linux może emulować zwykły przełącznik sieciowy (switch).

W tym celu należy stworzyć wirtualne urządzenie - mostek (bridge). (Mostek to switch na 2 porty.) Wirtualne mostki pozwalają na podpięcie dowolnej liczby urządzeń.

W efekcie kilka kart w systemie Linux zostanie zastąpione jedną - tzn, karty podpięte do wirtualnego mostka nie mogą mieć adresu IP.

Mostek działa na warstwie 2, więc nie potrzebuje adresu IP. Dodanie adresu IP do mostka jest równoznaczne z podłączeniem komputera do przełącznika.

iproute2 bridge-utils
stworzenie mostka ip link add <nazwa> type bridge
// ip link add br0 type bridge //
brctl addbr <nazwa>
// brctl addbr br0 //
usunięcie mostka ip link del dev br0 brctl delbr br0
włączenie mostka ip link set dev br0 up ifconfig br0 up
dodanie adresu
do mostka
ip addr add <adres>/<maska> br0 ifconfig br0 <adres> [netmask <maska>]
dodanie
urządzenia
do mostka
ip link set dev <urzadzenie> master <mostek>
// ip link set dev eth0 master br0 //
brctl addif <mostek> <urzadzenie>
// brctl addif br0 eth0 //
usunięcie
urządzenia
z mostka
ip link set dev <urzadzenie> nomaster
// ip link set dev eth0 nomaster //
brctl delif <mostek> <urzadzenie>
// brctl delif br0 eth0 //

Agregacja łączy

Jeśli mamy więcej kart w 1 komputerze i więcej kabli w ścianach, to może by je użyć do:

  • zwiększenia wydajności, lub
  • uodpornienia na awarie

Podstawowy cel - użyć (połączyć, zagregować, ang. aggregate) wielu połączeń (łącz, ang. link) tak, by reszta konfiguracji pozostała bez zmian – w szczególności nie dodaje się kolejnych adresów IP.

Dużo pomysłów jak to zrobić, część własnościowych:
http://en.wikipedia.org/wiki/Link_aggregation#Proprietary_link_aggregation

Czym jest a czym nie jest agregacja łączy:

  • agregacja łączy nie stwarza jednego łącza o większej przepustowości (tylko pozwala użyć wielu łączy naraz)
  • w wielu rozwiązaniach ruch przychodzący wchodzi tylko jednym łączem
  • sprawdza się przy połączeniach z wieloma komputerami

Linux bonding driver

Kilka trybów pracy (http://en.wikipedia.org/wiki/Link_aggregation), przykładowo:

  • balance-rr,
  • active-backup
  • balance-alb

Jak zbalansować ruch wychodzący? Łatwo. Wiadomości z różnych połączeń mogą iść innym łączem.
Jak zbalansować ruch przychodzący? Trudno. Dlaczego? Patrz: protokół ARP.

Adaptive load balancing - oszukuje urządzenia w sieci podając każdemu inny (jeden z kilku) MAC jako swój.

Kroku do ustawienia agregacji pod Linuksem:

  1. stwórz urządzenie typu bond
  2. dodaj do niego łącza
  3. skonfiguruj urządzenie typu bond (włącz, nadaj adres etc.)

Tworzenie wirtualnego interface'u:

  • Używając ip link
    • wyświetlenie pomocy: ip link add dev <nazwa> type bond help
    • dodanie (gorszy przykład): ip link add dev bond0 type bond
    • dodanie (lepszy przykład):
      ip link add dev bond0 type bond mode balance-alb xmit_hash_policy layer3+4 miimon 100
    • usunięcie (przykład): ip link del bond0
    • wyświetlanie szczegółów w ip link: ip -d link / ip --details link
  • Używając tradycyjnych mechanizmów:
    • załadowanie modułu jądra systemu operacyjnego, w momencie załadowania dodawane jest urządzenie:
      modprobe bonding mode=balance-alb xmit_hash_policy=layer3+4 miimon=100
    • usunięcie modułu: modprobe -r bonding
    • automatyzacja (1) dodanie aliasu modułu (2) ustawienie opcji dla aliasu (3) [opcjonalnie] ładowanie przy starcie modułu przez nazwę aliasu https://wiki.archlinux.org/index.php/kernel_modules

Wyświetlanie ustawień i stanu:

  • cat /proc/net/bonding/bond0
  • katalog /sys/class/net/bond0/bonding

Dodawanie/usuwanie łącz:

  • używając ip link
    • dodanie: ip l set dev eth0 master bond0
    • usunięcie: ip l set dev eth0 nomaster
  • używając ifenslave
    • dodanie: ifenslave bond0 eth0 eth1
    • usuniięcie: ifenslave -d bond0 eth0 eth1

https://www.kernel.org/doc/Documentation/networking/bonding.txt

LACP / 802.3ad / EtherChannel

EtherChannel - pierwszy pomysł agregacji portów, przejęty i rozwijany przez CISCO

802.3ad - przestarzały standard powstały w dużej mierze na EtherChannel, zastąpiony przez IEEE 802.1AX-2008

LACP - protokół realizujący EtherChannel/802.3ad - automatycznie "dogadujący" agregację

Do zadziałania obie strony muszą być skonfigurowane

Ze strony Linuksa - tryb 802.3ad, np:

  • ip link add dev bond0 type bond mode 802.3ad
  • ip link add dev bond0 type bond mode 802.3ad xmit_hash_policy layer2+3 miimon 100 ad_select bandwidth lacp_rate fast
  • modprobe bonding mode=802.3ad

Ze strony switcha CISCO, przykładowa konfiguracja:

Switch> enable
Switch# conf t
Switch(config)# interface Port-channel 1                       pozwala ustawiać parametry całego kanału   
Switch(config-if)# exit
Switch(config)# interface range GigabitEthernet 0/1-2          zmienia ustawienia wszystkich interfejsów z zakresu           
Switch(config-if-range)# channel-group 1 mode active           dodaje łącze do grupy; mode active wymusi wysyłanie wiadomości protokołu LACP   
Switch(config-if-range)# exit
Switch(config-if-range)# interface range GigabitEthernet 0/3-4      
Switch(config-if-range)# channel-group 2 mode active
Switch(config-if-range)# exit
Switch(config)# interface range GigabitEthernet 0/1-4
Switch(config-if-range)# no channel-group                      usunie interfejsy z kanału 

Uwaga! Tutaj nie uda się uzyskać lepszej prędkości między dwoma stacjami, potrzeba trzech do testów.
netperf -H 10.0.0.2 & netperf -H 10.0.0.3

sk1/bridge_bonding.txt · Last modified: by jkonczak