Table of Contents
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:
- stwórz urządzenie typu bond
- dodaj do niego łącza
- 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.3adip link add dev bond0 type bond mode 802.3ad xmit_hash_policy layer2+3 miimon 100 ad_select bandwidth lacp_rate fastmodprobe 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