Čo keď nechodí sieť?

Jeden z najfascinujúcejších aspektov počítačových ( ale aj iných ;-) ) systémov je schopnosť spájania sa. Tento článok popisuje jednotlivé kroky, ktoré vedú k úspešnému vytvoreniu sieťového spojenia a spôsoby ako zistiť, kde je pes zakopaný, keď sa vyskytne problém.

Pre niektorých z nás problémy začínajú už pri prenose bitov a bajtov cez telefónnu linku. Ak to nie je váš prípad môžete pár odstavcov preskočiť. Prenos základných dát cez telefónnu linku obstaráva protokol, ktorý sa nachádza tesne pod IP. Aký protokol to konkrétne je, záleží na spôsobe prepojenia. Pre klasickú analógovú telefónnu linku je to PPP (Point-to-Point protokol) rovnako ako pre ISDN. Pre ADSL pripojenie je to PPPoE (PPP over Ethernet). Povedzme si o nich niečo viac:

Point-to-Point Protokol (PPP)

PPP na analógovej linke

Tento protokol potrebuje podporu v jadre a tiež pppd - PPP démon. Ak používate distribučné jadro, je veľmi pravdepodobné, že túto podporu v ňom máte zapnutú. Ak si kompilujete vlastné jadro potrebujete mať zapnutú voľbu Device Drivers -> Networking support -> Network device support -> [*] PPP (point-to-point protocol) support
Podpora pre PPP môže byť skompilovaná priamo v jadre, alebo ako modul s názvom ppp_generic. To či túto podporu máte, možno vidieť počas bootovania systému, alebo vo výpise dmesg:

# dmesg
...
PPP generic driver version 2.4.2
...

Predchodcom PPP je SLIP (Serial Line IP), resp. CSLIP (Compressed SLIP). Aj tento protokol, potrebuje podporu v jadre.

PPP démon je program, ktorý sa spravidla štartuje na strane klienta pomocou dialera - programu, ktorého starosťou je inicializovanie modemu a vytočenie telefónneho čísla. Po úspešnom telefónnom spojení s druhou stranou sa na oboch stranách riadenie odovzdáva PPP démonu. Ten zariadi to, že modem sa tvári ako ďalšie sieťové rozhranie - sieťová karta. Meno tohoto rozhrania je zvyčajne ppp0. A príkaz ifconfig nám o ňom môže poskytnúť tie isté údaje, ako o ostatných sieťových rozhraniach:

$ ifconfig ppp0
ppp0      Link encap:Point-to-Point Protocol
          inet addr:213.81.130.184  P-t-P:213.81.255.185  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:163 errors:0 dropped:0 overruns:0 frame:0
          TX packets:177 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:56056 (54.7 Kb)  TX bytes:15344 (14.9 Kb)

Pri problémoch s pripájaním cez PPP sú hlavným zdrojom informácií logy. Skriptové dialery často používajú program chat, ktorý pri použití prepínača -v zapisuje komunikáciu s modemom do systémových logov zvyčajne v adresári /var/log/. Dialer prostredia KDE sa volá kppp a tiež umožňuje zobraziť výpis komunikácie s modemom. Podobne PPP démon pri použití kľúčových slov debug, a kdebug vo svojom konfiguračnom súbore /etc/ppp/options zapisuje množstvo užitočných informácií do systémových logov. Okrem nesprávneho hesla je asi najčastejším problémom spôsob výmeny hesla s druhou stranou - PAP (Password Authentification Protocol)/CHAP (Crypted Handshake Authentification Protocol)/MSCHAP (Microsoft CHAP)/... čo z toho je správne musí povedať ISP. Častým problémom je tiež nesprávne nastavenie smerovacích tabuliek, ktoré spravidla obstaráva voľba defaultroute. Pri klasických modemoch býva tiež problémom chýbajúce nastavenie modemu, aby odpovedal na AT príkazy takzvanými 'result codes' - ATQ0 prípadne zapnuté čakanie na 'dial tones', ktoré sa v našich krajinách nepoužívajú - ATX3. Pokiaľ máte podozrenie na chybu v tejto oblasti, najlepším zdrojom informácií je asi príručka s AT príkazmi pre váš modem.

PPP na ISDN

Vyššie prenosové rýchlosti a komfort ponúka ISDN. Najčastejší spôsob je taký, že máte modem, ktorý sa na jednej strane pripája cez ethernet na lokálnu sieť (hoci i len s jedným počítačom), a na druhej strane cez PPP po ISDN linke. Funguje teda ako jenoúčelový počítač. Nastavenia PPP sú do značnej miery podobné. Lepšie modemy umožňujú takisto logovať informácie cez syslog do systémových logov počítača. Pri takejto konfigurácii prirodzene nie je potrebná podpora pre PPP v počítačí, pretože modem sa tvári na sieti ako samostatný počítač - spravidla vo funkcii brány (gateway).

PPPoE a ADSL

ADSL je moderná technológia umožňujúca vysoké prenosové rýchlosti. Podobne ako pri ISDN modemoch spojenie ADSL sa spravidla spravidla uskutočňuje ADSL modemom, ktorý sám implementuje protokol PPPoE. To čo bolo povedané o typických problémochh vyššie tu platí tiež. Modemy, s ktorými som sa stretol ja, potrebovali ešte nastavenie VPI/VCI (Virtual PATH Identifier/Virtual Circuit Identifier)- ktoré opäť závisí od ISP.

Pakety a IP adresy

Všetka komunikácia po TCP/IP sieťach, kam patrí aj prístup na web, ftp, irc, icq, telnet, mail atď atď, sa odohráva posielaním blokov dát po drôtoch (optických vláknach či rádiových vlnách). Týmto blokom dát sa hovorí pakety. Každý paket nesie v sebe informáciu o tom odkiaľ bol poslaný - zdrojová adresa - a o tom, kam bol poslaný - cieľová adresa. Tieto adresy sú v pakete napísané ako štvorice bytov.(To platí pre verziu IP protokolu IPv4. Je pravdepodoné, že sa v budúcnosti prejde na IPv6, kde sa adresa skladá zo ôsmych bytov.)

Ifconfig - informácie o sieťovom rozhraní

Sieťové spojenie začína na našej vlastnej sieťovej karte. Pozrieme sa na to čo nám prezrádza:

$ ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:61:B0:CE:FB:5E
          inet addr:192.168.1.102  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:354145124 errors:0 dropped:0 overruns:0 frame:0
          TX packets:424743936 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1531811786 (1460.8 Mb)  TX bytes:2248271909 (2144.1 Mb)
          Interrupt:9 Base address:0xfcc0
Vidíme tu vlastnú IP adresu: 192.168.2.4. Slovo UP hovorí, že rozhranie je funkčné. RX a TX hovoria o počte prijatých a poslaných paketov a v tom istom riadku sa dočítame aj o počte chýb pri prijímaní a odosielaní paketov.

Smerovanie (Routovanie)

Keď systém potrebuje poslať paket, musí vedieť kadiaľ. Možností je toľko, koľko máte sieťových rozhraní. Ku sieťovým kartám treba pripočítať ešte loopback teda virtuálne rozhranie, cez ktoré počítač posiela pakety sám sebe a tiež modemy. Modem s rozbehaným PPP/SLIP/CSLIP protokolom sa tvári ako sieťová karta. O tom, cez ktoré rozhranie paket pôjde, rozhoduje smerovacia tabuľka (routing table). Je to tabuľka, ktorú si operačný systém udržuje vo svojej pamäti. Tam sa dostane pri štarte systému. Pri UNIX-u podobných systémoch sa tam dostane spustením programu route(8) z bootovacích skriptov. Administrátor systému ju môže tiež týmto programom meniť za behu. Zobraziť ju môžete buď programom route alebo netstat -r
Na mojom systéme vyzerá smerovacia tabuľka takto:

# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
localnet        *               255.255.255.0   U     0      0        0 eth0
loopback        *               255.0.0.0       U     0      0        0 lo
default         gw.rastos.org   0.0.0.0         UG    0      0        0 eth0

Trocha iný pohľad môžete dostať ak použijete prepínač -n:

# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0
127.0.0.0       0.0.0.0         255.0.0.0       U         0 0          0 lo
0.0.0.0         192.168.1.100   0.0.0.0         UG        0 0          0 eth0

Dočítame sa tam teda, že ak chceme poslať paket na adresu, ktorá začína číslami 192.168.1, treba takýto paket poslať cez rozhranie eth0. Meno sieťového rozhrania závisí od zvyklostí na danom operačnom systéme. Na Linux-e je eth0 ethernetová karta číslo 0, lo je loopback. Okrem nich sa môžete stretnúť s ppp0 čo je zvyčajne modem s rozbehnutými PPP protokolom a podobne.

V smerovacej tabuľke sa môže vyskytnúť destinácia default, ktorá sa použije pre pakety, ktorých cieľová adresa nevyhovuje žiadnemu inému riadku tabuľky. V stĺpci Gateway je potom zvyčajne IP adresa stroja, ktorý sprostredkováva pripojenie na Internet či inú sieť. Tento stroj sa tiež označuje ako default gateway.

Gateway, ktorý používam má dve sieťové karty. Jedna je pripojená na vnútornú sieť, druhá je pripojená na DSL modem. DSL modem sa tvári ako samostatný počítač a vytvára vlastne minisieť s IP priestorom 10.0.0.0. Smerovacia tabuľka na tomto počítači vyzerá takto:

# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
10.0.0.0        0.0.0.0         255.255.255.0   U         0 0          0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 eth1
0.0.0.0         10.0.0.5        0.0.0.0         UG        0 0          0 eth0

Teda pakety pre vnútornú sieť (192.168.1.0) idú cez eth1, čokoľvek iné ide cez eth0 na adresu 10.0.0.5 - DSL modem.

DNS

Keď surfujete po internete, či používate ľubovoľnú inú aplikáciu, ktorá komunikuje po sieti, nehovoríte jej IP adresy. Poviete www.google.com a systém musí sám zistiť, akú adresu napísať do paketov. Na to existujú dva spôsoby. Prvý je použitie súboru (/etc/hosts), kde sú povedané IP adresy a zodpovedajúce mená. Tento spôsob je však použiteľný len pre malý počet adries, ktoré sa často nemenia. Druhý spôsob je DNS - Domain Name System. DNS je implementované pomocou DNS serverov. Strojov, na ktorých beží program, ktorý vie po sieti prijať paket s otázkou a poslať na ňu odpoveď. Vyhľadanie IP adresy na základe mena sa v angličtine nazýva lookup. Vyhľadanie mena podľa IP adresy sa nazýva reverse lookup. Niekedy sa tento proces prekladu mena na IP adresu sa nazýva aj "rezolvovanie".

Prirodzene, keď chceme DNS serveru poslať paket s otázkou akú IP adresu má www.google.com, musíme vedieť IP adresu DNS serveru samého.Systém môže používať viacero DNS serverov a na UNIX-u podobných systémoch sú ich adresy napísané v súbore /etc/resolv.conf. Na rozhodnutie či sa použije hosts, alebo DNS, môže mať ešte vplyv súbor /etc/host.conf.

Ping a traceroute

Jednoduchou možnosťou, ako si overiť dostupnosť nejakého servera, je použiť programy ping a traceroute. Ako sme už spomínali, programy komunikujúce po sieti používajú rôzne protokoly. Jedným z nich je protokol ICMP (internet control message protocol ). Program ping posiela pakety nazývané echo protokolom ICMP. Ak server takýto paket dostane, odpovie naň opäť ICMP paketom; tentokrát paketom echo-reply. Program ping tento paket zachytí a vypíše informáciu na obrazovku. Na mojom stroji to vyzerá takto:

$ ping ras
PING ras.rastos.org (192.168.1.221) 56(84) bytes of data.
64 bytes from ras.rastos.org (192.168.1.221): icmp_seq=1 ttl=64 time=0.481 ms
64 bytes from ras.rastos.org (192.168.1.221): icmp_seq=2 ttl=64 time=0.221 ms

--- ras.rastos.org ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.221/0.351/0.481/0.130 ms

To bol ping na moju vlastnú sieťovú kartu. Ping idúci von trvá dlhšie:

$ ping www.google.com
PING www.google.akadns.net (66.102.11.104) 56(84) bytes of data.
64 bytes from 66.102.11.104: icmp_seq=1 ttl=236 time=160 ms
64 bytes from 66.102.11.104: icmp_seq=2 ttl=236 time=160 ms
64 bytes from 66.102.11.104: icmp_seq=3 ttl=236 time=161 ms
64 bytes from 66.102.11.104: icmp_seq=4 ttl=236 time=162 ms

--- www.google.akadns.net ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3025ms
rtt min/avg/max/mdev = 160.739/161.535/162.632/0.862 ms

Program traceroute tiež posiela ICMP pakety. Tieto pakety majú v sebe nastavený príznak, ktorý žiada všetky stroje, cez ktoré paket prechádza, aby nám poslali odpoveď:

$ traceroute ras
traceroute to ras.rastos.org (192.168.1.221), 30 hops max, 38 byte packets
 1  ras.rastos.org (192.168.1.221)  0.359 ms  0.301 ms  0.177 ms

Prirodzene trocha dlhšie to je, keď treba prejsť cez viacero strojov:

$ traceroute to www.bbc.co.uk 
traceroute to www.bbc.net.uk (212.58.224.115), 30 hops max, 38 byte packets
 1  ras.rastos.org (192.168.1.221)  0.432 ms  0.254 ms  0.247 ms
 2  10.0.0.5 (10.0.0.5)  0.984 ms  0.882 ms  0.866 ms
 3  ba-sthgw-3.telecom.sk (213.81.255.57)  19.496 ms  11.913 ms  13.170 ms
 4  213.81.249.125 (213.81.249.125)  19.596 ms  13.557 ms  12.093 ms
 5  ba-igw-1-POS-0-0-251-18.telecom.sk (213.81.251.18)  18.393 ms  13.016 ms  13.125 ms
 6  if-3-1.core1.Frankfurt.teleglobe.net (80.231.64.25)  29.828 ms  30.339 ms  29.361 ms
 7  if-5-0.core2.Frankfurt.teleglobe.net (80.231.64.2)  29.421 ms  30.110 ms  28.756 ms
 8  rt-decix.fft.bbc.co.uk (80.81.192.59)  30.781 ms  30.370 ms  30.043 ms
 9  212.58.239.66 (212.58.239.66)  46.914 ms  46.647 ms  45.789 ms
10  www15.thdo.bbc.co.uk (212.58.224.115)  46.620 ms  47.427 ms  45.870 ms

Treba mať na pamäti, že ak použijete ako argument pre ping a traceroute symbolické meno, tak tie musia najprv previesť toto meno na IP adresu a teda musia poslať paket s požiadavko na rezolvovanie DNS serveru a od neho musíme dostať paket s odpoveďou.

Ak máte problém pripojiť sa na nejaký server, overte si, že môžete vyrezolvovať jeho IP adresu. Potom skúste či je ho možné ping-núť. Ak nie skúste traceroute. Ten vám povie, ako ďaleko sa na svoje púti pakety dostali a kde treba hľadať chybu.

Proxy

Pojmom proxy sa označuje stroj, alebo aj program, ktorý zachytáva požiadavky o URL adresy od nášho programu, sám sa pokúsi na ne získať odpovede, a potom tieto odpovede poskytne nášmu programu. Najbežnejšie sa proxy používa pre protokoly HTTP a FTP. Cieľom býva zvyčajne:

To znamená, že ak váš program používa proxy, musí sa vedieť spojiť s proxy a proxy musí byť schopné spojiť sa so serverom špecifikovaným v URL adrese (čo napríklad tiež znamená, že musí cez DNS zistiť jeho adresu a mať správne nastavené routovanie). Posledná poznámka na tému proxy: proxy funguje pre daný protokol. Napríklad proxy pre protokol HTTP môže byť iná ako pre FTP protokol. (Použitie proxy pre HTTP a FTP je najbežnejšie.)

Firewall

Ďalšou vecou, ktorá nám môže skomplikovať komunikáciu protokolom IP po sieti sú firewally. Ich primárnou úlohou je ochrana siete pred nežiadúcimi paketmi. Inteligentné firewally dokážu najrozmanitejšie veci:

Ak máte do činenia s reštriktívnym, alebo zle nakonfigurovaným firewalom, tak to čo nám povie ping alebo traceroute, nemusí byť tak pravdivé (a tým pádom užitočné), ako by sme chceli.

Vyššie protokoly

Ako bolo už spomínané vyššie, nad protokolom IP funguje mnoho vyšších - aplikačných protokolov: SMTP(e-mail), HTTP(web) a podobne. Ak server ako taký, je dostupný IP protokolom a napriek tomu máte problém úspešne vytvoriť sieťové spojenie, môžete skúsiť overiť iným spôsobom - špecifickým pre daný protokol:

SMTP
$ telnet in.smtp.cz 25
Trying 81.95.97.116...
Connected to in.smtp.cz.
Escape character is '^]'.
220 in.smtp.cz ESMTP
quit
221 in.smtp.cz
Connection closed by foreign host.
HTTP
	
$ telnet www.rastos.org 80
Trying 192.168.2.1...
Connected to ras.
Escape character is '^]'.
GET / HTTP/1.1
Host: www

HTTP/1.1 200 OK
...
POP
$ telnet mail.rastos.org 110
Trying 192.168.2.3...
Connected to mail.rastos.org.
Escape character is '^]'.
+OK
quit
+OK
Connection closed by foreign host.
Atď
O tom ako minimálnym spôsobom overiť funkčnosť iných protokolov sa môžete dočíťať v dokumentoch RFC.

Tcpdump - výpis paketov

Informáciu o tom, či vôbec došlo k prenosu nejakých paketov medzi klientom a serverom môže tiež poskytnúť program tcpdump. Toto zaznamená pri jednej požiadavke na DNS server.

22:00:23.688554 IP localhost.32771 > localhost.domain:  38117+ A? sirius.rastos.org. (32)
22:00:23.693054 IP localhost.domain > localhost.32771:  38117* 1/0/0 A sirius.rastos.org (48)

Vidno tu že stroj localhost, dostal požiadavku na sirius.rastos.org v jednom pakete a poslal odpoveď v druhom. Takže komunikácia prebieha v oboch smeroch a všetko je v poriadku. Prajem vám aby to podobne klapalo aj na vašom systéme.