Podstawy sieci i ich konfiguracja w Linuksie.
Podstawy sieci i ich konfiguracja w Linuksie
Paweł Kowalak vel viru <viru@bzimage.us>
Plan wykładu:
Częśc teoretyczna (omówienie podstawowych zagadnień): 1. TCP/IP;
2. OSI;
3. Adresy IPv4;
4. Sieci, podsieci;
5. Maski sieciowe.
Częśc praktyczna (konfiguracja wybranych zagadnień pod systemem Linuks): 6. Konfigurowanie adresu ip;
7. Konfigurowanie podstawowego routingu.
SZCZECIN LINUX / UNIX USERS GROUP
11 kwietnia 2003r.
Podstawy sieci i ich konfiguracja w Linuksie.
1. TCP/IP
Na początku był chaos
Internet obecnie skupia bardzo wiele platform. Aby była możliwa komunikacja między nimi, ponad 20 lat temu opracowano protokół transmisji danych TCP/IP (Transfer Control Protocol / Internet Protocol) na potrzeby Departamentu Obrony USA.
Protokół ten jest swego rodzaju tłumaczem pomiędzy różnymi platformami (np. PC a Amigą). Każda platforma podłączona do Internetu musi miec zaimplementowany protokół TCP/IP.
Protokół IP
Protokół IP ma za zadanie przenoszenie pakietów, jest to najbardziej podstawowe przenoszenie i jest definiowane jako zawodny system przenoszenia pakietów bez użycia połączenia (nie ma gwarancji, że przenoszenie zakończy się sukcesem). Pakiet może zostać zagubiony, zduplikowany, zatrzymany, lub dostarczony z błędem, a system nie sprawdzi, że coś takiego zaszło, a także nie powiadomi o tym ani nadawcy, ani odbiorcy. Każdy pakiet jest obsługiwany osobno, niezależnie od reszty pakietów występujących w transmisji.
Protokół IP definiuje podstawową jednostkę przesyłanych danych (datagram), używanej w sieciach TCP/IP. Określa ona dokładny format wszystkich danych przesyłanych przez sieć. Definiuje także operację trasowania, wykonywaną przez oprogramowanie IP, polegającą na wybieraniu trasy, którą będą przesyłane dane. Zawiera także zbiór reguł, które służą do realizacji zawodnego przenoszenia pakietów. Reguły te opisują, w jaki sposób węzły i routery powinny przetwarzać pakiety, jak i kiedy powinny być generowane komunikaty o błędach oraz kiedy pakiety mogą być porzucane.
SZCZECIN LINUX / UNIX USERS GROUP
11 kwietnia 2003r.
Podstawy sieci i ich konfiguracja w Linuksie.
Protokół TCP
TCP różni się tym, że bierze odpowiedzialnośc za wiarygodne dostarczenie datagramu. Protokół przez to jest bardziej skomplikowany, ale dzięki temu programiści nie muszą implementowac w swoich programach kontroli błędów. Co się dzieje, gdy pakiet został zgubiony lub gdy przekroczony został limit czasu? Po wysłaniu pakietu nadawca włącza zegar. Gdy mija określony czas, w czasie którego powinno nadejść potwierdzenie ACK nadawca przyjmuje, że pakiet został zagubiony i wysyła go ponownie. TCP zapewnia dwukierunkową współpracę między warstwą IP, a warstwami wyższymi. Musi obsługiwac różne niespodziewane sytuacje oraz bezpiecznie izolowac warstwy wyższe od skutków awarii w warstwie protokołu IP.
Protokół TCP wraz z IP dał nazwę całej rodzinie protokołów TCP/IP. Pomimo związku z protokołem IP -- TCP jest protokołem w pełni niezależnym i może zostać zaadaptowany do wykorzystania z innymi systemami dostarczania.
2. OSI
Stworzony został przez organizację International Organization for Standardization (ISO). Jest on zbiorem zasad komunikowania się urządzeń sieciowych. Podzielony jest na siedem warstw, z których każda zbudowana jest na bazie warstwy poprzedniej. Model ten nie określa fizycznej budowy poszczególnych warstw, a koncentruje się na sposobach ich współpracy. Takie podejście do problemu sprawia, że każda warstwa może być implementowana przez producenta na swój sposób, a urządzenia sieciowe od różnych dostawców będą poprawnie współpracować. Poszczególne warstwy sieci stanowią niezależne całości i chociaż nie potrafią wykonywać żadnych widocznych zadań w odosobnieniu od pozostałych warstw, to z programistycznego punktu widzenia są one odrębnymi poziomami.
SZCZECIN LINUX / UNIX USERS GROUP
11 kwietnia 2003r.
Podstawy sieci i ich konfiguracja w Linuksie.
warstwa
jednostka informacji
7 Aplikacji
wiadomośc
6 Prezentacji
wiadomośc
5 Sesji
wiadomośc
4 Transportowa wiadomośc
3 Sieciowa
pakiet
2 Łącza danych ramka
1 Fizyczna
bit
Warstwa fizyczna
Konwersja bitów informacji na sygnały i transmisja tych sygnałów poprzez kanały transmisji (np. przez kable, fale radiowe).
Warstwa łącza danych
Odbiór strumienia bitów z urządzenia tak, aby nie zawierał on błędów. Jeżeli jakaś ramka danych została przesłana niepoprawnie, zostaje wysyłana ponownie.
Warstwa sieciowa
Odpowiada za przesyłanie danych według tablic routingu. Tworzenie ramek na czas przesyłu oraz dzielenie ramek.
Warstwa transportowa
Obsługuje dane przybyłe z warstwy sesji. Otwiera połączenia z odpowiednimi parametrami (odpowiedni typ i prędkośc) oraz zamykanie połączeń.
SZCZECIN LINUX / UNIX USERS GROUP
11 kwietnia 2003r.
Podstawy sieci i ich konfiguracja w Linuksie.
Warstwa sesji
Zajmuje się m. in. obsługą otwartego połączenia. Nawiązuje połaczenia (sprawdza czy jest możliwośc nawiązania połączenia), ustala z drugą stroną takie parametry jak simplex, duplex. Zapewnia bezpieczeństwo przesyłanych danych (np.
w przypadku zerwania połączenia podczas ściągania poczty).
Warstwa prezentacji
Koduje, dekoduje dane pochodzące z transmisji, dobiera odpowiednia algorytmy, np. kompresja czy szyfrowanie przesyłanych danych.
Warstwa aplikacji
Warstwa stwarza wrażenie “przezroczystości sieci” dla użytkownika, zapewnia programom użytkowym usługi komunikacyjne, określa formaty wymienianych danych, opisuje reakcje systemu na różne operacje komunikacyjne.
3. Adresy IPv4
Protokół IP jest obecnie najpowszechniej wykorzystywany w wersji 4, w skrócie IPv4. Służy on do adresowania i wykorzystuje 32 bitowy schemat binarny w celu jednoznacznego identyfikowania sieci, urządzeń czy komputerów. Adres IP, bo o nim mowa, ma postac 32 bitów, które są podzielone na 4 grupy (po 8 bitów). Każdy bajt jest oddzielony kropką, czyli na przykład:
00000001.00000010.00000011.00000100
Każde 8 bitów może byc zamienione na system decymalny, czyli nasz adres w powyższym przypadku wygląda tak: 1.2.3.4
SZCZECIN LINUX / UNIX USERS GROUP
11 kwietnia 2003r.
Podstawy sieci i ich konfiguracja w Linuksie.
Na ośmiu bitach (czyli na jednym bajcie) możemy zapisac maksymalnie 256 liczb (od 0 do 255). Bajtów w adresie IP mamy 4, tak więc możemy maksymalnie zapisac (teoretycznie) 2564 adresów. Inne przykłady adresów IP to: 212.14.46.191
213.155.167.1
60.11.2.173
Wszystkie adresy IP są podzielone na 5 klas adresowych, które są oznaczone jedną z liter alfaberu (A, B, C, D, E). Każdy adres składa się z dwóch części, adresu sieci, oraz adresu hosta. Relacja między nimi zależy od klasy adresu.
bit adresu 1234 567891011121314151617181920212223242526272829303132
klasa A
0adres sieci
adres hosta
klasa B
10
adres sieci
adres hosta
klasa C
110
adres sieci
adres hosta
klasa D
1110
adres multicast
klasa E
11110
rezerwa
Pierwszy oktet w adresie IP określa klasę sieci. Adres mieszczący się od 0.1.0.0 do 126.0.0.0 oznacza klasę A, od 128.0.0.0
do 191.255.0.0 klasę B, od 192.0.1.0 do 223.255.255.0 klasę C, od 224.0.0.0 do 239.255.255.255 klasę D i wreszcie od 240.0.0.0 do 247.255.255.255 klasę E.
SZCZECIN LINUX / UNIX USERS GROUP
11 kwietnia 2003r.
Podstawy sieci i ich konfiguracja w Linuksie.
4. Sieci, podsieci
Internet można sobie wyobrazic jako jedną wielką siatkę, tak na prawdę jest to siec złożona z niezliczonej ilości podsieci, które wszystkie razem układają się w całośc. Jak to jednak jest zbudowane, że wszystko ze sobą współpracuje i dowolny host w Internecie w dowolnej podsieci może się skomunikowac z innym hostem w innej podsieci oddalonej o tysiące kilometrów? Za to odpowiedzialny routing. Routing jest to wybór drogi, którą będą przekazywane pakiety między sieciami /
podsieciami. Odpowiedzialny za ten proces jest router. Zakładając przykładową sytuację, że mamy siec A oraz siec B, jest to urządzenie które stoi wpięte w obie sieci i ma zapisane w swojej trasie routingu co ma robic, gdy np. przychodzi pakiet z sieci A z adresem docelowym do sieci B. Router zawsze jest połączony z kilkoma sieciami, za to zwykły host ma zwykłe połączenie tylko z jedną siecią fizyczną.
Wybór optymalnej drogi pakietu jest dośc skomplikowane, a zatem rozwiązywane na wiele różnych sposobów. Idealne oprogramowanie trasujące powinno przy wyznaczaniu tras korzystać z takich informacji, jak obciążenie sieci, długość datagramu, czy zawarty w nagłówku datagramu typ obsługi. Jednak przeważająca część oprogramowania trasującego jest znacznie mniej wyrafinowana i wybiera trasy na podstawie ustalonych informacji o najkrótszych ścieżkach.
Przykład drogi jaką pokonuje datagram
Gdy aplikacja ma zamiar wysłać datagram w sieć, wykonuje kilka prostych kroków. Najpierw konstruuje datagram. Zostaje obliczona suma kontrolna dla danych i skonstruowany nagłówek IP. Następnie pierwszy router na drodze wędrówki datagramu określa etap następny -- inną maszynę w sieci lub router, gdy dane muszą się z sieci wydostać. Jeżeli dane są szczególnie cenne, w nagłówku IP zostaną ustawione odpowiednie opcje. Na koniec datagram jest “posyłany w sieć”.
Każdy router otrzymujący datagram wykonuje na nim serię testów. Gdy warstwa sieciowa zdejmie z niego swój nagłówek, warstwa IP weryfikuje sumę kontrolną datagramu. W razie niezgodności datagram jest odrzucany i do węzła nadawcy kierowany jest komunikat o błędzie. Następnie pole TTL (Time To Live) jest odpowiednio zmniejszone i sprawdzane. Jeśli limit czasu jest przekroczony sygnalizowany jest błąd. Po określeniu następnego węzła (na podstawie adresu docelowego) zostaje zapisana nowa wartość TTL i nowa suma kontrolna. Jeżeli konieczna jest fragmentacja (podział datagramu na mniejsze części), jest on dzielony na mniejsze datagramy i każdy z nich opatrywany jest nagłówkiem IP.
SZCZECIN LINUX / UNIX USERS GROUP
11 kwietnia 2003r.
Podstawy sieci i ich konfiguracja w Linuksie.
W końcu datagram przekazywany jest z powrotem do warstwy sieciowej. Gdy datagram dotrze do celu zostaje scalony, zdejmowany jest nagłówek IP, odtworzony jest oryginalny komunikat i przesyłany w stronę wyższych warstw.
5. Maski sieciowe
Maska sieciowa ma taką samą postac jak adres IP, czyli składa się z 32 bitów posegregowanych po 8. Maska, inaczej mówiąc netmaska, określa jaki zakres adresów IP jest w danej sieci. Każda siec jest określona przez: adres sieci, maska sieci, broadcast sieci. Adres sieci jest to zawsze pierwszy adres IP z danej sieci, nie mozna go użyc jak zwykłego adresu IP.
Broadcast sieci jest ostatnim adresem i jest to adres rozgłoszeniowy. Pakiet docierający do adresu broadcast trafia do wszystkich komputerów w sieci. Maska sieci określa rozmiar sieci, czyli ile komputerów jest w danej sieci. Jeżeli maska sieciowa mówi, że w sieci są 32 komputery, to automatycznie należy odjąc 3 adresy od tej ilości. Pozostałe adresy są do wykorzystania przez komputery z danej sieci. Jeden adres jest tracony na adres sieci, drugi na adres broadcast, a trzeci na router sieci (chyba że siec nie łączy się z żadną inną, wtedy można go użyc normalnie). Tak więc przy masce określającej 32 adresy 29 adresów możemy wykorzystac na komputery użytkowników.
Jak tworzymy netmaskę
Maska nie może określac np. 34 komputerów. Ilośc hostów musi byc potęgą dwójki. Ta potęga jest nam potrzebna do stworzenia maski. Np. Chcąc uzyskac siec z 64 adresami IP: wiemy że 64= 26 , cyfra 6, czyli wykładnik potęgi informuje nas, ile zer będzie w naszej masce od prawej strony. Jak widac mamy miec 6 zer, nasza maska wygląda następująco: 11111111.11111111.11111111.11000000
Decymalny zapis powyższego:
/255.255.255.192
SZCZECIN LINUX / UNIX USERS GROUP
11 kwietnia 2003r.
Podstawy sieci i ich konfiguracja w Linuksie.
Bitowy zapis, dużo wygodniejszy, polega na policzeniu jedynek z lewej strony:
/26
Przykład zapisu adresu IP wraz z maską:
1.2.3.4/26
określa że adres 1.2.3.4 należy do sieci 64 adresowej. Jaki jednak jest adres sieci oraz adres broadcast? Okazuje się, że wystarczające do określenia sieci są dwie rzeczy, dowolny adres IP do niej należący oraz netmaska sieci. Na tej podstawie można prosto obliczyc adres sieci oraz adres broadcast: Adres IP: 1.2.3.4
Netmaska: /26 (lub /255.255.255.192)
Zapisujemy w postaci binarnej. Aby obliczyc adres sieci, należy wykonac logiczną operację (adres IP) AND (netmaska): 00000001.00000010.00000011.00000100 (1.2.3.4)
AND 11111111.11111111.11111111.11000000 (255.255.255.192)
= 00000001.00000010.00000011.00000000 (1.2.3.0)
Aby policzyc adres broadcast wykonujemy operację logiczną NOT(netmaska) OR (adres IP): NOT 11111111.11111111.11111111.11000000 (255.255.255.192)
= 00000000.00000000.00000000.00111111 (0.0.0.63)
OR 00000001.00000010.00000011.00000100 (1.2.3.4)
= 00000001.00000010.00000011.00111111 (1.2.3.63)
SZCZECIN LINUX / UNIX USERS GROUP
11 kwietnia 2003r.
Podstawy sieci i ich konfiguracja w Linuksie.
6. Konfigurowanie adresu IP
Konfigurację sieci pod Linuksem pokażę na prostym przykładzie. Administrator powiedział nam, że nasz adres IP to 10.0.0.12/24, a adres gateway'a to 10.0.0.1. Aby dostac się do Internetu, najpierw należy skonfigurowac interfejs sieciowy.
Zakładając, że mamy siec opartą o standard ethernet, wykonujemy następujące polecenie:
# ifconfig eth0 10.0.0.12 broadcast 10.0.0.255 netmask 255.255.255.0
Możemy sprawdzic co narobiliśmy poleceniem:
# ifconfig -a
.
.
.
eth0 Link encap:Ethernet HWaddr 00:02:44:63:0A:CA inet addr:217.153.73.146 Bcast:217.153.73.151 Mask:255.255.255.248
inet6 addr: fe80::202:44ff:fe63:aca/10 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:7168764 errors:0 dropped:0 overruns:0 frame:0
TX packets:6059425 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:3437023640 (3277.8 Mb) TX bytes:1871049766 (1784.3 Mb) Interrupt:11
.
.
.
które listuje wszystkie interfejsy. Możemy także skonfigurowany interfejs usunąc: SZCZECIN LINUX / UNIX USERS GROUP
11 kwietnia 2003r.
Podstawy sieci i ich konfiguracja w Linuksie.
# ifconfig eth0 down
Innym narzędziem do konfiguracji interfejsów jest program ip z pakietu iproute2. Ma on tę przewagę, że wszystko jest zintegrowane w dwóch narzędziach: ip i tc. Polecenie ip zastępuje ifconfig, route, arp. Narzędzie tc natomiast służy do tworzenia klas i kolejek służących do kształtowania pasma. Zaczynamy od skonfigurowania interfejsu:
# ip addr add 10.0.0.12/24 dev eth0
Sprawdzamy wszystkie interfejsy (bez adresów):
# ip link list
1: lo: <LOOPBACK,UP> mtu 16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: teql0: <NOARP> mtu 1500 qdisc noop qlen 100
link/void
3: dummy0: <BROADCAST,NOARP> mtu 1500 qdisc noop link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
4: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc htb qlen 100
link/ether 00:02:44:63:0a:ca brd ff:ff:ff:ff:ff:ff
5: eth1: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc htb qlen 100
link/ether 00:02:44:63:ed:9e brd ff:ff:ff:ff:ff:ff
6: sit0@NONE: <NOARP> mtu 1480 qdisc noop
link/sit 0.0.0.0 brd 0.0.0.0
7: xs26-0@NONE: <POINTOPOINT,NOARP,UP> mtu 1480 qdisc noqueue link/sit 217.153.73.146 peer 195.250.159.83
SZCZECIN LINUX / UNIX USERS GROUP
11 kwietnia 2003r.
Podstawy sieci i ich konfiguracja w Linuksie.
Sprawdzamy adresy danego interfejsu:
# ip addr show dev eth0
4: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc htb qlen 100
link/ether 00:02:44:63:0a:ca brd ff:ff:ff:ff:ff:ff
inet 217.153.73.146/29 brd 217.153.73.151 scope global eth0
inet6 fe80::202:44ff:fe63:aca/10 scope link
Ip różni się tym od ifconfig'a, że nie musimy martwic się o aliasy. Aliasy służą do konfigurowania wielu adresów IP dla jednego interfejsu. Aby skonfigurowac dwa adresy dla eth1 w ifconfigu należało:
# ifconfig eth1 10.0.0.1 netmask 255.255.255.0
# ifconfig eth1:0 10.0.1.1 netmask 255.255.255.0
Tak więc, aby skonfigurowac kolejny adres IP, należy znac jaki ostatni nasz alias miał numer. W przypadku ip po prostu dodajemy kolejne adresy do interfejsu:
# ip addr add 10.0.0.1/24 dev eth0
# ip addr add 10.0.1.1/24 dev eth0
Usuwanie adresów z interfejsu jest tak samo proste jak ich dodawanie:
# ip addr del 10.0.1.1/24 dev eth0
SZCZECIN LINUX / UNIX USERS GROUP
11 kwietnia 2003r.
Podstawy sieci i ich konfiguracja w Linuksie.
7. Konfigurowanie podstawowego routingu
Skonfigurowanie routingu potrzebnego w naszym przykładzie sprowadza się do dodania dwóch wpisów do tablicy routingu.
Do tablicy tej możemy się dostac narzędziem route, bądź narzędziem ip. Na początek wylistujemy naszą tablicę:
# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface loopback * 255.0.0.0 U 0 0 0 lo Jak widac, gdy nie mamy skonfigurowanych żadnych interfejsów, nasza tablica świeci pustkami. Mamy jedynie wpis do loopbacka, który jest odpowiedzialny za interfejs lo (lokalny interfejs, dzięki któremu możemy się odwoływac do własnego komputera za pomocą adresu ip 127.0.0.1). W nowych wersjach narzędzia ifconfig, dodanie interfejsu z adresem ip, spowoduje dodanie do tablicy routingu odpowiedniego wpisu dla danej sieci. W starych wersjach robimy to ręcznie:
# route add net 10.0.0.0 netmask 255.255.255.0 eth0
W tym momencie mamy skonfigurowany interfejs eth0 adresem 10.0.0.12 oraz mamy dodany routing dla sieci 10.0.0.0.
Powyższe polecenie powoduje, że jeżeli jakiś pakiet będzie wychodził do hosta w sieci 10.0.0.0/24, zostanie wysłany przez interfejs eth0. A co jeśli chcemy wysłac pakiet do wp.pl, którego raczej nie znajdziemy w sieci 10.0.0.0/24? Od tego jest właśnie nasz gateway, który ma adres 10.0.0.1. Aby z niego skorzystac, dodajemy domyślną trasę do tablicy routingu:
# route add default gw 10.0.0.1
SZCZECIN LINUX / UNIX USERS GROUP
11 kwietnia 2003r.
Podstawy sieci i ich konfiguracja w Linuksie.
I to samo osiągamy narzędziem ip. Wylistowanie przykładowej tablicy routingu:
# ip route list
127.0.0.0/8 dev lo scope link
Dodanie do tablicy wpisu dla sieci 10.0.0.0 jest zbędne, ponieważ ip zrobi to za nas, gdy będziemy dodawac adres IP do interfejsu:
# ip addr add 10.0.0.12/24 dev eth0
# ip route list
10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.2
127.0.0.0/8 dev lo scope link
Możemy dodac domyślną bramę:
# ip route add default via 10.0.0.1 dev eth0
Narzędziem ip można także zastąpic polecenie arp:
# ip neigh show
10.0.0.9 dev eth1 lladdr 00:02:44:5a:12:df nud reachable 10.0.0.7 dev eth1 lladdr 00:03:47:e1:b8:d1 nud reachable 10.0.0.2 dev eth1 lladdr 00:00:39:84:c1:3e nud reachable 217.153.73.145 dev eth0 lladdr 00:50:fc:69:e2:51 nud reachable SZCZECIN LINUX / UNIX USERS GROUP
11 kwietnia 2003r.
Podstawy sieci i ich konfiguracja w Linuksie.
Na tym etapie kończy się wykład z podstaw sieci i ich konfiguracji. Polecam materiały z bibliografii.
Bibliografia:
http://www.man.rzeszow.pl/docs/ip/
NET3-Howto
Advanced-Routing-Howto
EOF
SZCZECIN LINUX / UNIX USERS GROUP
11 kwietnia 2003r.