===== Wstęp ===== ==== Powłoka systemowa – szybkie przypomnienie ==== (Tekstowa) powłoka systemowa (shell), terminal, konsola.\\ Programy np. ''xfce4-terminal'', ''konsole'' Zmiana użytkownika – ''su'' \\ Wykonania programu na prawach innego użytkownika – ''sudo'' \\ Użycie ''sudo'' do uruchomienia shella z prawami roota: ''sudo -s'' (lub ''sudo -i'' lub ''sudo su'') Historia w konsoli: strzałki góra/dół, ''history'', ctrl+r, ''fc'' Obsługa polecenia ''less'' (wykonaj dla przykładu: ''convert -h | less'' albo ''man less''): * przewianie: strzałki, page up / page down * ''/'' wyszukuje * ''n'' – następne wystąpienie * ''N'' – poprzednie * ''g'' – początek dokumentu; ''G'' – koniec * ''q'' – wyjście ==== Zapis poleceń ==== Wzór polecenia ([[https://docs.microsoft.com/pl-pl/windows-server/administration/windows-commands/command-line-syntax-key|[1]]]):\\ ''polecenie {jeden|z|wielu} [-opcja1 ] --długa_opcja= [opcja2]'' Przykład polecenia:\\ ''polecenie jeden //42// [-opcja1 //foo//] --długa_opcja=//x//'' Co trzeba wpisać w konsolę:\\ ''polecenie jeden 44 -oja1 baz --długa_opcja=x'' ==== Pomoc systemowa ==== Pomoc wbudowana w polecenia: * ''tracepath -h'' * ''netstat -h'' * ''ip a h'' * ''ifconfig -h'' Podręcznik systemowy – komenda ''man'' i towarzyszące, np: * ''man tracepath'' * ''man ip'' * ''apropos'' – lista stron które w tytule mają podane słowo, np. ''apropos network'' * ''whatis'' – tytuły stron pod podaną nazwą, np. ''whatis write'' ===== Adresacja IP ===== //Adresacja IP jest omawiana na wykładzie. Poniższe materiały mają przedstawić potrzebne do laboratoriów elementy adresacji na wypadek gdyby laboratoria były przed wykładem.// === Adresy === **Adres IPv4** to 32 bitowa liczba. \\ Adres IPv4 zapisuje się dzieląc go na 4 ośmiobitowe bloki oddzielone kropką, zapisując każdy z nich jako liczba dziesiętna (ang. [[https://en.wikipedia.org/wiki/Dot-decimal_notation|dotted-decimal notation]]). \\ Przykładowy adres IPv4: 150.254.5.114 **Adres IPv6** to 128 bitowa liczba. \\ Adres IPv6 zapisuje się dzieląc go na 8 szesnastobitowych bloki oddzielone dwukropkiem, zapisując każdy z nich jako liczbę szesnastkową. W każdej grupie wiodące zera są pomijane, a najdłuższy ciąg bloków o wartości zero jest zapisywany jako podwójnym dwukropek. \\ Przykładowy adres IPv6: 2620:0:2830:200::b:8 === Sieć, prefiks, maska === Każdy adres IP należy do jakiejś **sieci** (w IPv6 nazywanej zwykle **prefiksem**). Lokalny administrator ustala do jakiej sieci należy konkrety adres IP wybierając **maskę sieci** (dla IPv4) lub **długość prefiksu** (dla IPv6). Znając jedynie adres nie da się powiedzieć jaką maskę sieci/długość prefiksu ustawił administrator. \\ **Maska oddziela część wspólną dla wszystkich adresów z danej sieci od części która określa komputer wewnątrz sieci.** \\ W IPv4 maska była tradycyjnie zapisywana identycznie jak adres sieci i składała się w zapisie binarnym z ciągu jedynek po którym następował ciąg zer. \\ Zwykle maskę / długość prefiksu zapisuje się jako ''/%%%%//n//'', gdzie //n// to długość maski/prefiksu. \\ Przykładowy zapis maski dla IPv4: /24 (lub odpowiadające mu 255.255.255.0) Przykładowy zapis długości prefiksu dla IPv6: /64 === Adresy specjalne w sieci === W IPv4 pierwszy adres w sieci to **adres sieci** i nie może zostać ustawiony żadnemu urządzeniu. Ostatni adres w sieci to **adres rozgłoszeniowy** tej sieci i też może być nadany żadnemu urządzeniu.\\ W IPv6 pierwszy adres prefiksu zaleca się nadać routerowi. === Publiczne, prywatne IP i bloki adresów prywatnych === Cała pula (tzn. cały zakres, zbiór wszystkich) adresów IP jest podzielona m. inn. na adresy publiczne i prywatne. Publiczne adresy IP są (hierarchicznie) przydzielane w uporządkowany sposób organizacjom, usługodawcom internetowym i użytkownikom końcowym. Za pośrednictwem internetu możliwa jest komunikacja między dowolnymi dwoma adresami publicznymi. Komunikacja między adresami prywatnymi możliwa jest tylko w sieciach lokalnych, więc o podziale i użyciu adresów prywatnych decyduje lokalny administrator. **Adresy sieci prywatnych IPv4 to 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16.**\\ **Dla IPv6 odpowiednikiem adresów prywatnych są adresy** site-local (fc00::/7), z których używa się adresów **z zakresu fd00::/8** (i z tych adresów tworzy się sieci z długością prefiksu /64). ===== Podstawowe narzędzia sieciowe ===== **Uwaga:** informacje o narzędziach są podane dla wyjaśnienia dlaczego kilka komend realizuje to samo zadanie i dla uporządkowania wiedzy. Treści z tej sekcji (listy komend, nazwy paczek narzędzi, etc.) nie będą w żaden sposób wymagane na wejściówkach/teście. ==== Pakiety net-tools oraz iproute2 ==== Pakiet narzędzi ''net-tools'' powstał w 1983 roku, początkowo w systemie BSD. Od tego czasu jest utrzymywany, jednak od przeszło 10 lat jest uznawany za przestarzały i nie jest rozwijany dalej. \\ W skład wchodzą: \\ arp dnsdomainname domainname hostname ifconfig ipmaddr iptunnel mii-tool nameif netstat nisdomainname plipconfig rarp route slattach ypdomainname Około roku 2000 stworzono pakiet ''iproute2'', mający zastąpić ''net-tools'' (i inne, powstałe by udostępnić użytkownikom nowe możliwości jądra systemu Linux). \\ Pakiet ''iproute2'' zawiera następujące polecenia: \\ arpd ctstat genl ifcfg ifstat ip lnstat nstat routef routel rtacct rtmon rtpr rtstat ss tc (Narzędzia: omawiane | ważne albo popularne | mocno przestarzałe, mało znane albo zbędne) * https://wiki.linuxfoundation.org/networking/net-tools * https://wiki.linuxfoundation.org/networking/iproute2 * http://pl.wikibooks.org/wiki/Sieci_w_Linuksie/iproute2 * ''man ifconfig ip-link ip-address'' ==== Inne narzędzia ==== * ''iputils'' [[https://wiki.linuxfoundation.org/networking/iputils|[1]]] - narzędzia arping clockdiff ipg ping ping6 rarpd rdisc tftpd tracepath tracepath6 traceroute6 * ''ndisc6'' [[https://www.remlab.net/ndisc6/|[2]]] - m. inn. ''rdisc6'' i ''ndisc6'' * ''traceroute'', ''mtr'' * ''wireshark'' [[https://www.wireshark.org/|[3]]], ''tcpdump'' [[https://www.tcpdump.org/|[4]]] ===== Interfejs sieciowy ===== Karta sieciowa (//NIC – network interface card//) – fizyczne urządzenie do komunikacji sieciowej. \\ Interfejs sieciowy (//network interface//) – logiczne urządzenie do komunikacji sieciowej. Interface'y można podzielić na fizyczne (reprezentują fizyczne urządzenia sieciowe) i wirtualne (reszta). ==== Wyświetlanie listy urządzeń i adresów ==== | Lista aktywnych urządzeń|''ifconfig''|''ip link show up''| | Lista wszystkich urządzeń|''ifconfig -a''|''ip link [show]''| | Lista adresów|''ifconfig [-a]''|''ip address [show [up]]''| Wszystkie argumenty polecenia ''ip'' można dowolnie skracać, ale jeśli skróty kolidują, narzędzie wybiera jedno rozwinięcie zamiast wyświetlić komunikat o błędzie (sic!). \\ Np. ''ip link show'' można zapisać jako ''ip l sh'', ale ''ip l s'' jest już traktowane jako ''ip link set'' Polecenie ''ip'' przyjmuje też opcje (podawane bezpośrednio po ''ip''), wśród których warto znać opcję ''--brief'' (i ''--json''). \\ Porównaj: ''ip link'' i ''ip --brief link'' ==== [ekstra] Tradycyjne nazwy urządzeń (zwykle zakończone numerem) ==== Tradycyjne nazwy urządzeń: * loopback ''lo'' * przewodowe karty sieciowe ''eth'' * bezprzewodowe karty sieciowe ''wlan, ath, wifi, radio'' * ''firewire'', infiniband ''ib'' * urządzenia wirtualne: wirtualne karty sieciowe ''veth, dummy'', mostki ''br'', urządzenia programowe ''tun, tap'', tunele ''sit, tnl, ppp, vpn, gre'' Około 2015 roku w systemie Linux zmieniono sposób nadawania nazw urządzeniom. \\ Stąd dla fizycznych interfejsów można spotkać nazwy: ''eno1, sls1, wwp2s0, wlx78e7d1ea46da'' Wcześniej to, która karta sieciowa dostanie który numer (eth0, eth1) było trudne do przewidzenia (ale stałe dla danej konfiguracji sprzętowej). \\ Co gorsza, kolejność po dodaniu nowej karty sieciowej lub awarii jednej z kart mogła ulec zmianie. \\ Więcej szczegółów: [[http://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames|[1]]] [[https://en.wikipedia.org/wiki/Consistent_Network_Device_Naming|[2]]] ===== Ustawianie adresów IP ===== ==== Sprawdzanie łączności IP ==== * ''ping '' * ''traceroute {-I|-T} '' \\ Z uwagi na firewall Politechniki proszę używać opcji ''-I'' lub ''-T'', która go skutecznie omija * ''mtr '' Jako cel można podać adres IP (np. ''ping 150.254.30.29'') lub nazwę słowną (przykładowo: ''ping cs.put.poznan.pl'', ''ping lab-net-1'') Podane programy przyjmują też opcje ''-4'' i ''-6'' to użycia odpowiednio protokołu IPv4 i IPv6, np: ''traceroute -4 -T //nic.cl//'' ==== Włączanie / wyłączanie interfejsu ==== | Włączenie interfejsu | ''ifconfig //eth0// up'' | ''ip link set dev //eth0// up'' | | Wyłączenie interfejsu | ''ifconfig //eth0// down'' | ''ip link set dev //eth0// down'' | ==== Ustawianie / dodawanie / usuwanie adresów IP ==== === ip address === | Dodanie nowego adresu do interfejsu | ''ip addr add //10.0.0.1/25// dev //eth0//'' \\ ''ip addr add //fd00::1/64// dev //eth0//''| | Usunięcie adresu z interfejsu | ''ip addr del //10.0.0.1/25// dev //eth0//'' \\ ''ip addr del //fd00::1/64// dev //eth0//''| | Wyczyszczenie adresów interfejsu (groźne) | ''ip addr flush dev //eth0//'' | **Uwaga!** Każdy adres bez maski polecenie ''ip'' interpretuje jako adres z maską /32 (IPv4) lub /128 (IPv6) === ifconfig === | //Zmiana// bieżącego adresu IPv4 i/lub maski | ''ifconfig //eth0// [//10.0.0.1//] [netmask //255.255.255.128//]'' | | Dodanie nowego adresu IPv4 do urządzenia \\ (tworząc alias urządzenia) | ''ifconfig //eth0:something// //10.0.0.1// …'' | | 'Usunięcie' dodatkowego adresu IPv4 z urządzenia \\ (usunięcie aliasu) | ''ifconfig //eth0:something// down'' | | 'Usunięcie' podstawowego adresu IPv4 z urządzenia | ''ifconfig //eth0// 0'' | | Dodanie nowego adresu IPv6 | ''ifconfig //eth0// add //fd00::1/64//'' | | Usunięcie adresu IPv6 | ''ifconfig //eth0// del //fd00::1/64//'' | **Zauważ:** w poleceniu ''ifconfig'' adres IPv4 i adresy IPv6 konfiguruje się inaczej. \\ ''ifconfig'' umie ustawić wiele adresów IPv6 na interfejsie, ale tylko jeden adres IPv4. \\ ''ifconfig'' domyślnie dla IPv4 dobiera maskę pasującą do klasy adresu, a dla IPv6 /128. Polecenie ''ifconfig'' pozwala na zmianę wielu ustawień naraz, dla przykładu poniższe polecenie ustawi adres i włączy interfejs: \\ ''ifconfig dummy0 192.168.0.1 netmask 255.255.255.0 up'' ==== Przykładowe wyniki poleceń ==== === ifconfig / ip address ===
/ # ip a
10: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether da:a8:fb:92:2d:df brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 192.168.5.2/30 brd 192.168.5.3 scope link eth0
       valid_lft forever preferred_lft forever
    inet 172.19.67.0/19 brd 172.19.95.255 scope global eth0:1
       valid_lft forever preferred_lft forever
    inet 10.42.0.238/24 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::d8a8:fbff:fe92:2ddf/64 scope link 
       valid_lft forever preferred_lft forever

/ # ifconfig
eth0      Link encap:Ethernet  HWaddr DA:A8:FB:92:2D:DF  
          inet addr:192.168.5.2  Bcast:192.168.5.3  Mask:255.255.255.252
          inet6 addr: fe80::d8a8:fbff:fe92:2ddf/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1326 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1063 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:2681637 (2.5 MiB)  TX bytes:123670 (120.7 KiB)

eth0:1    Link encap:Ethernet  HWaddr DA:A8:FB:92:2D:DF  
          inet addr:172.19.67.0  Bcast:172.19.95.255  Mask:255.255.224.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
Uwaga: ifconfig w różnych dystrybucjach może mieć nieznacznie inny format wyjścia. ===== [Ekstra] Windows ===== Do wyświetlenia listy interfejsów i adresów IP można użyć m. inn. komendy ''ipconfig'', domyślnie pokazującej tylko aktywne interfejsy; ''ipconfig /all'' pokaże wszystkie Adresy IP można ustawić z "okienek" [[https://support.microsoft.com/en-us/windows/change-tcp-ip-settings-bd0a07af-15f5-cd6a-363f-ca2b6f391ace]] \\ Z linii poleceń należy użyć komendy ''netsh'', kontekstu ''netsh interface ip'' [[https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/cc754516(v=ws.10)|https://learn.microsoft.com/…]] \\ Z PowerShella należy użyć cmdletów modułu NetTCPIP: [[https://learn.microsoft.com/en-us/powershell/module/nettcpip/?view=windowsserver2022-ps]] Windows dostarcza z systemem programy ''ping'' (przełączniki nie są zgodne; patrz ''ping /?'') i ''tracert''.