Narzędzia użytkownika

Narzędzia witryny


Pasek boczny

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 · ostatnio zmienione: 2018/11/18 13:23 przez jkonczak