===== VLANy – wstęp ===== ==== [ekstra] Motywacje dla VLANów ==== === Ruch rozgłoszeniowy === Wraz ze wzrostem liczby użytkowników w sieci wzrasta ilość pakietów rozgłoszeniowych. \\ Np. każde urządzenie wysyła co jakiś czas pakiety ARP z pytaniem "jaki MAC ma podane IP", drukarki rozgłaszają że istnieją, switche sprawdzają czy nie ma pętli, urządzenia i programy od Apple szukają siebie nawzajem, klienci Dropboksa szuka innych klientów Dropboksa w lokalnej sieci. \\ Duża ilość takich pakietów (dostarczanych do każdego, niezależnie od tego czy go te pakiety interesują czy nie) może negatywnie wpłynąć na działanie sieci, szczególnie bezprzewodowej. Żeby zmniejszyć ruch rozgłoszeniowy, można podzielić domeny rozgłoszeniowe przez podzielenie użytkowników na **osobne sieci**. \\ Zauważ że na warstwie łącza danych ramki wysyłane na adres rozgłoszeniowy trafiają do wszystkich – nawet jeśli urządzenia należą do innych sieci IP, więc potrzeba osobnych urządzeń warstwy łącza danych (switchy). === Względy bezpieczeństwa === Dla bezpieczeństwa w sieci użytkownicy powinni mieć dostęp tylko do wybranych zasobów. \\ Np. użytkownicy korzystający z WiFi dla gości mają mieć dostęp jedynie do internetu i nie powinni mieć dostępu do żadnych zasobów, pracownicy (poza wskazanymi działami) nie mają mieć dostępu do serwerów kadrowo-płacowych, tylko administratorzy mają mieć dostęp do zarządzania sprzętem. \\ Do egzekwowanie takich zasad służą firewalle (o których będzie później w semestrze). \\ Gdzie umieścić taki firewall jeśli pracownicy i punkty dostępu do WiFi dla gości są w całym budynku, pracownicy działu kadr, płac i księgowości siedzi w kilku miejscach a każdym sprzętem musi zarządzać administrator? Żeby móc w jednym miejscu zarządzać firewallem, można dla każdej z grup których mają dotyczyć inne reguły (np. goście, pracownicy, kadry-płace, administratorzy sieci) stworzyć **oddzielną sieć** złożoną z osobnych urządzeń. Potem wszystkie sieci podłącza się do urządzenia pełniącego rolę firewalla i na nim – w jednym miejscu – wykonuje potrzebną konfigurację. === QoS – quality of service === W sieciach może pojawić się potrzeba "lepszego" traktowania wybranego ruchu – np. rozmów telefonicznych (VoIP). Zwykły Ethernet nie daje takiej możliwości, ale można stworzyć **osobne sieci** np. dla ruchu który ma być obsługiwany w pierwszej kolejności, a potem na routerch priorytetowo traktować wybrany ruch (NB: pakiety IP mają pole DiffServ określające priorytety). ==== Streszczenie teorii ==== == Zwykłe porty (access ports) ==
Technologia VLAN pozwala skonfigurować jeden (fizyczny) switch tak by zmienił się w kilka (wirtualnych) switchy, które zachowują się tak jakby były zupełnie odrębnymi urządzeniami.
vlan 1 vlan 2 switch
**Konfiguracja switcha polega na określeniu które porty należą do którego VLANu**. \\ Po takiej konfiguracji porty należące do tego samego VLANu mogą się komunikować, porty należące do różnych VLANów nie mogą. == Porty z ruchem tagowanym (tagged/trunk ports) ==
Aby połączyć switch na którym jest kilka VLANów z innym urządzeniem (i nie musieć używać po jednym porcie z każdego VLANu) można skonfigurować wybrane porty tak, by przesyłały ruch z wielu VLANów po jednym porcie, oznaczając odpowiednio każdą ramkę numerem VLANu z którego pochodzi (ang. VLAN tagging). Taką możliwość daje standard **802.1Q** i jest ona powszechnie wspierana przez urządzenia sieciowe. Cisco nazywa port na który mogą pojawiać się ramki z wielu VLANów **trunk**iem.
vlan1vlan 2vlan 1vlan 2routerrouter
Do poprawnej pracy każda strona portu na którym przesyłane są ramki z wielu VLANów (**portu trunk**) musi zostać skonfigurowana: **na switchach** wystarczy **ustawić które VLANy mają być przekazywane jako tagowane** przez ten port, **na routerach dla każdego VLANu trzeba stworzyć osobny wirtualny interfejs**. \\ Porty przekazujące ruch tagowany można też skonfigurować tak żeby przekazywały ramki z VLANów z których nie ma żadnego zwykłego portu na tym switchu. == 802.1Q – znaczniki ==
W ramce Ethernet II znacznik (tag) dodaje się między adresy MAC a pole EtherType, ustawiając w miejscu tego pola stałą wartość (''0x8100'') która pozwala odróżniać tagowane ramki od nietagowanych.       [[https://en.wikipedia.org/wiki/IEEE_802.1Q?useskin=vector#Frame_format|Ilustracja z wikipedii]] \\ Na znacznik, poza wspomnianą stałą, składają się 4 bity określających priorytet i **12 bitów** określających numer VLANu. ===== Połączenia szeregowe RS-232 ===== [[http://pl.wikipedia.org/wiki/RS-232|RS-232]] - standard szeregowej transmisji danych. Dawniej łączono terminal z komputerem po RS-232, potem używano go do łączenia komputerów ze sobą i z urządzeniami zewnętrznymi (np. myszą). Został zastąpiony przez standard USB, jednak w tej chwili wciąż wiele urządzeń wciąż korzysta / wspiera ten protokół. Na jego bazie powstało wiele nowych i powiązanych protokołów. Cisco (i inni producenci sprzętu sieciowego) używa części standardu RS-232 do łączenia swoich produktów przez port zwany konsolą (console) z komputerami. Cisco nie używa standardowych gniazd, port konsoli jest gniazdem 8P8C vel RJ-45 ([[https://www.cisco.com/c/en/us/support/docs/routers/7000-series-routers/12223-14.html|szczegóły]]). W wielu komputerach i laptopach nie montuje się portów RS-232, w razie potrzeby należy użyć z konwertera USB ↔ RS-232. Obsługa portu szeregowego RS-232 (w Windowsie nazywanego portem COM) możliwa jest przy pomocy następujących narzędzi:
* Linux: * ''picocom [-b] /dev/tty''       (wyjście z picocom: ''ctrl+a ctrl+q'') \\ np. **''picocom -b115200 /dev/ttyS0''** * ''minicom [-s]'' * Windows: * ''putty'' Do prawidłowej pracy portu szeregowego należy z obu stron ustawić identyczne parametry – ilość bitów danych, stopu i parzystość (np. 8N1), prędkość (np. 9600, 115200), sterowanie przepływem (np. wyłączone).
! Switche serii Cisco Business 350 używane na zajęciach oczekują znaku ASCII 'delete' do usunięcia znaku spod kursora i znaku ASCII 'backspace' do usunięcia znaku przed kursorem. Choć to oczekiwanie brzmi to rozsądnie, normalnie naciśnięcie klawisza ''←'' generuje znak ASCII 'delete', a naciśnięcie klawisza ''Delete'' generuje sekwencję '\e[3~'. W konsoli Cisco Business 350, żeby wymazać znak spod kursora, naciśnij ''←'', a żeby wymazać znak poprzedzający kursor, naciśnij ''Ctrl'' + ''←''. \\ **Możesz też uruchomić konsolę z ustawionym odpowiednio dla Cisco zachowaniem klawisza ''←'' i ''Delete'' używając {{xterm-delbs.desktop|tego skrótu}}**. Poza switchami serii Cisco Business 350 pozostały sprzęt Cisco z laboratorium działa normalnie.
===== Konfiguracja switchy Cisco ===== Większość urządzeń Cisco pracuje pod kontrolą systemu [[http://en.wikipedia.org/wiki/Cisco_IOS|IOS]]. ==== Cisco IOS – linia poleceń ==== Na [[https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/fundamentals/configuration/15mt/fundamentals-15-mt-book/cf-cli-basics.html|stronach]] Cisco można znaleźć instrukcję obsługi linii poleceń. Autouzupełnianie, poruszanie się po różnych trybach:
* ''?'' podpowiada możliwe komendy i ich składnie * ''tab'' autouzupełnia komendy * ''exit'' wychodzi o jeden tryb w górę, działa do trybu uprzywilejowanego * ''disable'' wychodzi z trybu uprzywilejowanego (porównaj: ''enable'') * ''end'' / ''ctrl+z'' cofa się do trybu uprzywilejowanego * ''do '' pozwala wykonać komendę z wcześniejszego poziomu - np. komendę ''show vlan'' w trybie konfiguracji * komendy można skracać (póki są jednoznaczne), np. zamiast ''configure terminal'' wystarczy ''conf t'' ''no …'' odwraca działanie komendy\\ Tryb użytkownika - [[http://pl.wikipedia.org/wiki/Znak_zach%C4%99ty|prompt]] **''>''**
* ''show …'' pozwala na pokazanie (w tym trybie tylko __części__) stanu i ustawień * ''enable'' przechodzi do trybu uprzywilejowanego (i zwykle wymaga podania hasła)
Tryb uprzywilejowany - prompt **''#''**
* ''show …'' pozwala na pokazanie stanu i ustawień * ''show interfaces status'' podsumowanie interface'ów switcha * ''show interfaces [//switchport// [//GigabitEthernet 1//]]'' (długa) informacja o interface'ach * ''show vlan'' pokazanie przypisanie portów do VLANów * ''show vlan tag ////'' / ''show vlan name ////'' - pokazanie porty przypisane do wybranego VLANa * ''configure terminal'' przechodzi do trybu konfiguracji
Tryb konfiguracji - prompt **''(config) #''**
* ''hostname '' ustawienia nazwy urządzenia * ''vlan [name ]'' konfiguruje nowy VLAN, ewentualnie nadając mu nazwę * ''interface '' - wejście w tryb ustawień podanego interface'u - prompt **''(config-if) #''**, np: \\ ''interface Gi 1'' – GigaEthernet (ethernet 1Gbit) \\ ''interface Vlan 4'' – ustawienia wspólne dla całego VLANu \\ Polecenia w trybie konfiguracji interface'u: * ''switchport access vlan '' dołącza port do wybranego vlanu \\ __Uwaga__: jeśli ustawisz że port należy do VLANu którego nie dodałeś komendą ''vlan…'' konfiguracja może((Zależy od modelu i oprogramowania switcha.)) nie działać * ''switchport mode access'' ustawia port jako zwykły port należący do wybranego vlanu (domyślne zachowanie portu) * ''switchport mode trunk'' ustawia port by był trunkiem (portem przekazującym ruch z wielu vlanów, ze znacznikami) * ''switchport trunk native vlan {|none}'' wybiera jeden vlan dla którego ramki nie będą tagowane w trybie trunk * ''interface range '' – konfiguracja wielu interfejsów naraz, np. \\ ''interface range GigabitEthernet 1-5, GigabitEthernet 11-15'' Dodatkowo:
* ''show running-config'' - konfiguracja (dostępna w trybie uprzywilejowanym) * ''show mac address-table'' - informacje o tym, jaki adres MAC był widziany na którym porcie * ''show cdp neighbors'' - pokazuje sąsiednie urządzenia Cisco używając [[https://pl.wikipedia.org/wiki/Cisco_Discovery_Protocol|Cisco Discovery Protocol]] * ''show ip interface'' - pokazuje adresy IP ustawione dla interfejsów vlan, pozwalające na zdalna administrację switchem * ''ip address /'' - wykonane z trybu konfiguracji interfejsu vlan (uwaga na spację między IP i maską!) * ''ping '' ++++ Przykładowe wyniki poleceń |
switch# show vlan
Created by: D-Default, S-Static, G-GVRP, R-Radius Assigned VLAN, V-Voice VLAN

Vlan       Name           Tagged Ports      UnTagged Ports      Created by    
---- ----------------- ------------------ ------------------ ---------------- 
 1           1                               gi3-28,Po1-8           D         
 2           2                gi3                gi1                S         
 3      moja_nazwa            gi3                gi2                S      
switch# show interfaces switchport GigabitEthernet 3
S-VLAN Ethernet Type:  0x8100 (802.1q)
VLAN Mapping Tunnel L2 protocols Global CoS: 5
Name: gi3
Switchport: enable
Administrative Mode: trunk
Operational Mode: up
Access Mode VLAN: 1
Access Multicast TV VLAN: none
Trunking Native Mode VLAN: 1
Trunking VLANs: 1-3,5
                        4,6-4094 (Inactive)
General PVID: 1
General VLANs: none
General Egress Tagged VLANs: none
General Forbidden VLANs: none
General Ingress Filtering: enabled
General Acceptable Frame Type: all
General GVRP status: disabled
Customer Mode VLAN: none
Customer Multicast TV VLANs: none
Private-vlan promiscuous-association primary VLAN: none
Private-vlan promiscuous-association Secondary VLANs: none
Private-vlan host-association primary VLAN: none      
Private-vlan host-association Secondary VLAN: none    

VLAN Mapping Tunnel - no resources

VLAN Mapping One-To-One - no resources

Classification rules:

Classification type Group ID VLAN ID 
------------------- -------- ------- 
switch# show interfaces status
                                             Flow Link          Back   Mdix
Port     Type         Duplex  Speed Neg      ctrl State       Pressure Mode
-------- ------------ ------  ----- -------- ---- ----------- -------- -------
gi1      1G-Copper    Full    1000  Enabled  Off  Up          Disabled On     
gi2      1G-Copper    Full    1000  Enabled  Off  Up          Disabled On     
gi3      1G-Copper    Full    1000  Enabled  Off  Up          Disabled On     
gi4      1G-Copper      --      --     --     --  Down           --     --    
gi5      1G-Copper      --      --     --     --  Down           --     --    
switch#show mac address-table 
Flags: I - Internal usage VLAN
Aging time is 300 sec

    Vlan          Mac Address         Port       Type    
------------ --------------------- ---------- ---------- 
     1         c0:2c:17:30:7a:22      gi3      dynamic   
     1         c0:2c:17:30:7a:23      gi3      dynamic   
     1         c0:2c:17:30:a3:41       0         self    
     2         9c:54:16:69:ff:42      gi1      dynamic   
     2         9c:54:16:69:ff:43      gi1      dynamic   
     3         9c:54:16:6a:07:13      gi2      dynamic   
     3         9c:54:16:6a:07:14      gi2      dynamic   
switch#sh ip interface


    IP Address        I/F    I/F Status  Type   Directed  Prec Redirect Status 
                             admin/oper         Broadcast                      
------------------ --------- ---------- ------- --------- ---- -------- ------ 
10.0.0.254/24      vlan 5    UP/UP      Static  disable   No   enable   Valid
++++ ===== Konfiguracja interfejsów na Linuksie ===== Do prawidłowego skonfigurowania w Linuksie połączenia na którym pojawiają się ramki z oznaczeniem VLANów, należy dla każdego z takich vlanów dodać nowy wirtualny interfejs komendą: \\ ''ip link add link type vlan id '' \\ np. ''ip link add link //eth0// //eth0.2// type vlan id //2//'' Taki interfejs można usunąć komendą ''ip link del ''. W wynikach szczegółowej listy interfejsów – ''ip --detail link show'' – są wyświetlane numery VLANów dla interfejsów vlan. Pamiętaj o włączeniu przekazywania pakietów komendami: \\     ''sysctl net.ipv4.conf.all.forwarding=1'' \\     ''sysctl net.ipv6.conf.all.forwarding=1'' ++++ Przykład konfiguracji routera na Linuksie: |
# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 00:11:38:f0:41:00 brd ff:ff:ff:ff:ff:ff
#
# ip link add eth0.10 link eth0 type vlan id 10
# ip link add eth0.20 link eth0 type vlan id 20
#
# ip link set eth0 up
# ip link set eth0.10 up
# ip link set eth0.20 up
#
# ip link add 192.168.10.1/24 dev eth0.10
# ip link add 192.168.20.1/24 dev eth0.20
#
# ip -d address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 promiscuity 0 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:11:38:f0:41:00 brd ff:ff:ff:ff:ff:ff promiscuity 0 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 
3: eth0.10@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:11:38:f0:41:00 brd ff:ff:ff:ff:ff:ff promiscuity 0 
    vlan protocol 802.1Q id 10 <REORDER_HDR> numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 
    inet 192.168.10.1/24 brd 192.168.10.255 scope global
       valid_lft forever preferred_lft forever
4: eth0.20@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:11:38:f0:41:00 brd ff:ff:ff:ff:ff:ff promiscuity 0 
    vlan protocol 802.1Q id 20 <REORDER_HDR> numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 
    inet 192.168.20.1/24 brd 192.168.20.255 scope global
       valid_lft forever preferred_lft forever
# ip route
192.168.10.0/24 dev eth0.10 proto kernel scope link src 192.168.10.1 
192.168.20.0/24 dev eth0.20 proto kernel scope link src 192.168.20.1
# sysctl net.ipv4.conf.all.forwarding=1
++++ === [Ekstra] Prosta konfiguracja firewalla === //Firewall będzie omawiany później. Tutaj podaję gotowe komendy na potrzeby ćwiczeń// == nftables == Wprowadzenie konfiguracji:
echo '
table inet intervlan {
    chain filterforward {
        type filter hook forward priority filter; policy drop;
        oifname "br0" accept;
        iifname "eth0.2" oifname "eth0.3" counter accept;
        iifname "eth0.3" ct state established counter accept;
        counter;
    };
}
' | nft -f -
Wyświetlenie konfiguracji: ''nft list ruleset'' \\ Usunięcie konfiguracji: ''nft delete table inet intervlan''
== iptables == Wprowadzenie konfiguracji:
iptables  -P FORWARD DROP
ip6tables -P FORWARD DROP
iptables  -A FORWARD -o br0 -j ACCEPT
ip6tables -A FORWARD -o br0 -j ACCEPT
iptables  -A FORWARD -i eth0.2 -o eth0.3 -j ACCEPT
ip6tables -A FORWARD -i eth0.2 -o eth0.3 -j ACCEPT
iptables  -A FORWARD -i eth0.3 -m conntrack --ctstate ESTABLISHED -j ACCEPT
ip6tables -A FORWARD -i eth0.3 -m conntrack --ctstate ESTABLISHED -j ACCEPT
Wyświetlenie konfiguracji: ''iptables -vL'' i ''ip6tables -vL'' \\ Usunięcie konfiguracji:
iptables  -P FORWARD ACCEPT
ip6tables -P FORWARD ACCEPT
iptables  -F FORWARD
ip6tables -F FORWARD