Sitovani v Linuxu


Slovnicek pojmu:
datagram=paket=blok dat+hlavicka posilany mezi pocitaci
router=smerovac=krabice smerujici pakety mezi sitemi jez propojuje
gateway=brana=zprostredkovava spojeni s vnejsimi sitemi
daemon=demon=program jez ceka na preruseni (napr. od ser. portu), bezi na pozadi


Zde bych se nejprve zminil o dvou z rodiny protokolu, kterymi komunikuji UNIX systemy. Jak jiste vite je to TCP/IP. TCP/IP vzniklo proto, ze pocitace v dobe vzniku tohoto standartu byly propojeny ruznym hardwarem. Pozadavkem bylo spojit pocitace do siti tak, aby aplikace nevedely nic o slozitosti spojeni pocitacu a mohly komunikovat jednoduse pres standartni systemove sluzby/rozhrani.

Jak tedy funguje TCP/IP ?

Takze zakladni jednotkou komunikace je IP datagram.
Je to hlavicka+blok dat, kde je uvedeno pro a od koho datagram je (32 bitovou adresou napr. 192.35.25.17 coz je 0xC0231911 v hexadecimalnim zapisu), jak dlouhy je a jak dlouho ma paket maximalne zustat nazivu (pokud zabloudi tak po xxx sekundach je zlikvidovan) atd.

Tyto datagramy jsou posilany mezi pocitaci ruznym hardwarem. Od lokalniho loopbacku pres jednoduche spojeni pres seriovy kabel nebo modem (zapouzdrovaci protokoly SLIP,CSLIP,PPP) pres paralelni kabel (PLIP) po Ethernet nebo jinou sit ci typ pripojeni (T1, ARCNET, fddi, atm,.....) a treba i amaterskou radio sit. Konfiguraci nekolika nejobycejnejsich typu spojeni nyni uvedu.


Sitove adresy a adresy stanic v siti

V TCP/IP se adresuji site, pakety jsou smerovany mezi sitemi zarizenimi zvanymi routery (krabice co vedi kam co poslat) pouze na zaklade adresy cilove site. Po doruceni do koncove site se datagram preda cilovemu pocitaci.

Aby se predeslo konfliktum s ruzne velkymi sitemi, tak se zavedly tri typy, kazdy s jinym moznym maximalnim poctem pocitacu. Rozdil v adresovani techto 3 typu siti je v tom, kolik bytu z IP je pouzito na identifikaci site a zbytek na identifikaci pocitace v siti. Pri smerovani paketu je nutne znat velikost cilove site - tu si routery zjisti z 1. bajtu IP adresy a vyslou datagram dal podle svych tabulek.
Adresa kazde site musi byt unikatni (existuje organizace ktera vam na pozadani prideli adresu site na Internetu, ale vubec to neznamena ze vase domaci spojeni s kamaradem pomoci PPP musite registrovat jako sit).

Jeden pocitac muze mit i vic IP adres, pricemz se necisluji IP adresou pocitace ale rozhrani ("koncove draty sitovych karet a propojeni"). Routery maji na sobe vetsinou pripojky na vice siti a prepojuji pakety smerem k cilove siti (behaji v nich skritci s lopatama a prehrabujou pakety sem a tam).

V tabulce jsou uvedeny typy siti, rozsahy jejich IP adres a masky pro konfiguraci routovaci tabulky jadra. To je dulezite kdyz se budete pripojovat do existujici site/vytvaret svou vlastni. Kdyz v Linuxu konfigurujete jakekoli sitove zarizeni musite u neho krome jeho IP adresy uvest tez masku site (podle typu site A,B,C). Maska je dulezita pouze pro vas system, ktery na rozdil od routeru si nezjistuje typ site podle IP ale natvrdo udela IP and MASKA, to co vyjde porovna se svoji interni tabulkou a podle toho co pasuje smeruje datagram dal. To co se oreze je pouze cislo stanice v siti (zajimave az po doruceni do cilove site). Jadro totiz musi behat rychle a tudiz prohledani tabulky s par cislama pro primo dosazitelne site je to nejrychlejsi co jde napsat. Pokud jadro nenajde cilovou sit/prijemce v tabulce, posle pakety na gateway (u PPP parametr defaultroute).

sit filozofie mozne IPmaska
A hodne pocitacu-malo siti 255.0.0.0
B stredne pocitacu-stredne siti 255.255.0.0
C malo pocitacu-hodne siti 255.255.255.0
D adresovani skupiny pocitacu zaroven
E rezerva pro budouci pouziti

Myslim ze je dulezite pochopit logiku adresovani aby jste byli schopni nastavit si spravne internetovske adresy bezkonfliktne. Pochopeni je tez dulezite pro nastavovani routovani.

Ukazka site typu C

IP and MASK

Jeste nez uvedu konkretni nastaveni jednotlivych zarizeni, upozornuji vas na zajimavy adresar /proc/net/ pomoci ktereho je mozno dozvedet se spoustu zajimavych veci o siti (pristup ordinernich uzivatelu je kontrolovan pristupovymi pravy adresare /proc/) . V nem jsou statisticke informace v souborech (o delce 0 ale toho si nevsimejte) ktere je mozno vypsat pomoci cat [soubor]. Napr. cat route vypise toto:


Iface Destin.  Gateway  Flags RefCnt Use   Metric Mask     MTU  Window
eth0  00FFFFDF 00000000 01    0      0     0      00FFFFFF 1436 0
lo    0000007F 00000000 01    0	     19990 0      000000FF 1936 0

00FFFFDF odpovida 223.255.255.0 -->> adresa site 223.255.255.x s maskou 255.255.255.0 Takhle divne vypada adresa v hexa tvaru proto, ze pro sitovani pod IP se snad zvolilo jine poradi ukladani bajtu do pameti nez pouziva INTEL (little vs big endian).

Dalsi zajimava informace je pomoci
cat dev
coz vypisuje statistiku instalovanych a pouzitelnych zarizeni.
lo - loopback
ppp - PPP kanaly
sl - SLIP kanaly (muze jich byt bud 4 nebo 16, zalezi jak nastavite pri kompilaci)
eth - ethernet
dummy - neco jako loopback co navic preklada IP adresu zdrojove stanice (lze tim simulovat spojeni z jineho pocitace kdyz odladujete sitovou aplikaci jen na jedne masine)


Inter-|   Receive                  |  Transmit
 face |packets errs drop fifo frame|packets errs drop fifo colls carrier
    lo:      0    0    0    0    0    18952    0    0    0     0    0
 dummy: No statistics available.
  ppp0:      0    0    0    0    0        0    0    0    0     0    0
  ppp1:      0    0    0    0    0        0    0    0    0     0    0
  ppp2:      0    0    0    0    0        0    0    0    0     0    0
  ppp3:      0    0    0    0    0        0    0    0    0     0    0
   sl0:      0    0    0    0    0        0    0    0    0     0    0
   sl1:      0    0    0    0    0        0    0    0    0     0    0
   sl2:      0    0    0    0    0        0    0    0    0     0    0
   sl3:      0    0    0    0    0        0    0    0    0     0    0
   sl4:      0    0    0    0    0        0    0    0    0     0    0
   sl5:      0    0    0    0    0        0    0    0    0     0    0
   sl6:      0    0    0    0    0        0    0    0    0     0    0
   sl7:      0    0    0    0    0        0    0    0    0     0    0
   sl8:      0    0    0    0    0        0    0    0    0     0    0
   sl9:      0    0    0    0    0        0    0    0    0     0    0
  sl10:      0    0    0    0    0        0    0    0    0     0    0
  sl11:      0    0    0    0    0        0    0    0    0     0    0
  sl12:      0    0    0    0    0        0    0    0    0     0    0
  sl13:      0    0    0    0    0        0    0    0    0     0    0
  sl14:      0    0    0    0    0        0    0    0    0     0    0
  sl15:      0    0    0    0    0        0    0    0    0     0    0
  eth0:     74    0    0    0    0       79    0    0    0     0    0
Poznamka: u nove verze jadra linuxu 2.0 uz tento vypis neuvidite, tam se totiz kanaly vytvareji dynamicky. Uvidite tam tedy jen aktivni kanaly.

Pokud by se nasel zajemce o hlubsi vyklad muzu ho sem napsat. Specielne deleni siti do subnets, neco o bootp a arp atd.


Zakladni konfigurace (loopback a ethernet) pomoci skriptu /sbin/netconfig

V Slackware je skript netconfig, dostupny i z prikazu setup, ktery vam nastavi zakladni veci okolo site. Linky PPP,SLIP,PLIP si ovsem musite zkonfigurovat sami, ale pro mnoho lidi bude netconfig dobrym zacatkem.

grabnuta konfigurace site

Muj pocitac je jmenuje smrt
grabnuta konfigurace site

a ma domenu peklo.cz (jeho cela adresa je tedy smrt.peklo.cz, je ulozena v /etc/HOSTNAME)
grabnuta konfigurace site

ja nechci pouzivat pouze loopback...
grabnuta konfigurace site

IP adresa tehle ethernet karty je 220.200.240.1 . Ted se automaticky nastavi aliasy v /etc/hosts
grabnuta konfigurace site
vypis /etc/hosts (preklada symbolicka jmena na IP adresy, jako nameserver pro lokalni system):

#
# hosts		This file describes a number of hostname-to-address
#		mappings for the TCP/IP subsystem.  It is mostly
#		used at boot time, when no name servers are running.
#		On small systems, this file can be used instead of a
#		"named" name server.  Just add the names, addresses
#		and any aliases to this file...
#
# By the way, Arnt Gulbrandsen (agulbra@nvg.unit.no) says that 127.0.0.1
# should NEVER be named with the name of the machine.  It causes problems
# for some (stupid) programs, irc and reputedly talk. :^)
#

# For loopbacking.
127.0.0.1	localhost
220.200.240.1	 	smrt.peklo.cz smrt
# End of hosts.

a v siti je pocitac 220.200.240.6 (router/gateway) ktery zprostredkovava spojeni se svetem grabnuta konfigurace site

pouzivam sit typu C a proto je maska 255.255.255.0
grabnuta konfigurace site

a skutecny nameserver je nekde v internetu ...
grabnuta konfigurace site

na adrese 194.50.16.71 (ulozeno v /etc/resolv.conf)
grabnuta konfigurace site
vypis /etc/resolv.conf:

domain peklo.cz
nameserver 194.50.16.71

jsem za vodou...alespon s ethernetem
grabnuta konfigurace site


Zarizeni loopback (lo) a dummy (dummy)

Pokud si date podporu sitovani v jadre, loopback je prvni sitove zarizeni jehoz podpora je vzdy prikompilovana, nicmene musi se nastavit stejne jako ethernet.
Je to v podstate neco jako odbocka v sitovych rutinach jadra ktera presmerovava pakety na vas pocitac (konvencne se loopbacku prideluje IP=127.0.0.1 a MASKA=255.0.0.0). Znamena to tedy, ze pokud si lokalne chcete na jedinem pocitaci zkouset neco s TCP/IP (treba zkusit rozchodit ftp server) nemusite krome obecne podpory site zahrnovat zadne hardwarove zarizeni.

Loopbacku se prirazuje alias localhost (v /etc/hosts). Pak muzete zkusit jak dlouho trva echovani paketu sluzbou ping.
ping localhost
je ekvivalentni
ping 127.0.0.1

PING smrt.peklo.cz (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=255 time=0.8 ms
64 bytes from 127.0.0.1: icmp_seq=1 ttl=255 time=0.8 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=255 time=0.7 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=255 time=0.7 ms
64 bytes from 127.0.0.1: icmp_seq=4 ttl=255 time=0.7 ms
64 bytes from 127.0.0.1: icmp_seq=5 ttl=255 time=0.7 ms
64 bytes from 127.0.0.1: icmp_seq=6 ttl=255 time=0.7 ms
Variantou loopbacku je zarizeni dummy. To navic jeste zmeni jakoby adresu zdrojoveho pocitace. Takze kdyz pak date telnet <adresa prirazena dummy rozhrani, dopor. 127.0.0.2> tak pak budete vypadat jaky by jste prichazeli skutecne z teto adresy.

smrt:/# ifconfig

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Bcast:127.255.255.255  Mask:255.0.0.0
          UP BROADCAST LOOPBACK RUNNING  MTU:3584  Metric:1
          RX packets:15971 errors:0 dropped:0 overruns:0
          TX packets:15971 errors:0 dropped:0 overruns:0

dummy     Link encap:10Mbps Ethernet  HWaddr 00:00:00:00:00:00
          inet addr:127.0.0.2  Bcast:127.255.255.255  Mask:255.0.0.0
          UP BROADCAST RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0
          TX packets:0 errors:0 dropped:0 overruns:0
          Interrupt:0 Base address:0x0 


Spojeni a konfigurace seriovych protokolu:

Predpokladam ze zatim nemate pevnou linku do Internetu a chcete se pripojit pres nejcasteji modem. Pro transport mezi vami a stranou jez vam poskytne pripojeni do Internetu muzete pouzit zapouzdrovaci protokoly SLIP a PPP, stejne tak i pro privatni spojeni mezi pouze 2 pocitaci.

SLIP - Serial Line Internet Protocol
nebo kompresovany SLIP:
CSLIP - Compressed SLIP
PPP - Point to Point protocol

Oboje tyto varianty nejsou vzajemne slucitelne tj. pokud vam nekdo nabizi PPP tak vy se s nim musite spojit pres protokol PPP a nikoli SLIP. Jeste male upozorneni: microsoft obslehl tyto protokoly v windoze NT trochu jinak, takze spoluprace LINUX<->NT neni uplne 100%.

V Linuxu je potreba mit v jadre zkompilovanu podporu pro prislusny protokol. Kde to udelat viz konfigurace jadra.

Prehled vlastnosti, vyhod a nevyhod:

V systemu jsou dva prikazy spojene se sitovymi zarizenimi pouzivane pro konfiguraci. Jsou to ifconfig (bez parametru vypise instalovane sitove zarizeni a jejich IP adresy) a route (bez parametru vypise podle jakych masek se posilaji pakety do jakych zarizeni a jejich aktualni prosly pocet - statistika).

Zakladni princip seriovych protokolu je asi takovy, ze se pripoji hardwarove zarizeni tty[#portu] pod zapouzdrovac ppp[#kanalu] (ppp0 <==> ttyS0 a zaroven muze byt ppp1 <==> ttyS3 i sl0 <==> ttyS13).
To se provede nekde dole v systemovych rutinach asi tak ze se oznami jadru ze seriovou linku tu a tu ma zacit pouzivat jako PPP nebo SLIP kanal. Od tohoto okamziku komunikujete s nadrazenym zarizenim ppp[neco] nebo sl[neco].


Konfigurace PPP (ppp0,ppp1,ppp2,ppp3)

Nazev PPP (Point to Point Protocol) napovida ze jde o pouze dvoubodove spojeni dvou pocitacu pres seriovy kabel. Protokol zajistuje autorizaci obou stran, dohodu na kompresi, velikosti datagramu atd.

Vlastni program ktery ma na starosti konfiguraci seriove linky se jmenuje pppd (ppp daemon), vetsinou v adresari /usr/bin/. Po spousteni bezi na pozadi a kontroluje tok dat na lince. Pri jeho spusteni je mozne mu zadat konfiguracni parametry, ktere dale popisu. V Slackware je balik ppp kde se tento demon naleza a v nem par pomocnych a uzitecnych prikazu (ppp-off ukonci PPP linku, ppp-on ji nahodi, pppstats ukazuje statistiku proslych paketu ad.)

Spusteni pppd:
pppd zarizeni [rychlost] [argumenty a priznaky]

Pro spojeni dvou pocitacu mezi sebou (zatim neuvazujme nejakou autorizaci) staci na obou spustit pppd s parametrem zarizeni seriove linky spojujici oba pocitace a rychlosti (bez parametru rychlost se pouzije aktualni rychlost serioveho portu).
Priklad:

POCITAC A: pppd /dev/ttyS1
POCITAC B: pppd /dev/ttyS0

kde na pocitaci A je kabel na COM2 a na B na COM1.
Pro tento konkretni pripad se stane to, ze kazdy z pocitacu se budou snazit spojit asi 30 sekund, a pokud se mu to nepovede, tak z pppd vyskoci. Takze lepsi by asi bylo

POCITAC A: pppd /dev/ttyS1 passive
POCITAC B: pppd /dev/ttyS0

argument passive rika POC A ze se ma snazit navazat spojeni, ale pokud se mu to nepovede, tak ma v tichosti cekat na spojeni z druhe strany.

POCITAC A: pppd /dev/ttyS1 passive 38400 lock xonxoff 223.255.255.4:223.255.255.6
POCITAC B: pppd /dev/ttyS0 passive 38400 lock xonxoff noipdefault

Takto mam udelane spojeni s kamaradem. Znamena to ze prvni z nas kdo zapne pocitac bude cekat na pripojeni toho druheho.
Mate-li pomalou linku, muze pomoci nasledujici (urychluje odezvu napr. pro telnet):

POCITAC A: pppd /dev/ttyS1 passive mtu 296 mru 500
POCITAC B: pppd /dev/ttyS0 passive

mtu (MAXIMUM TRANSMIT UNIT) - max. delka vyslaneho datagramu
mru (MAXIMUM RECEIVE UNIT) - max. delka datagramu jez je poc. schopen zpracovat

coz znamena ze POC A rika: nemohu vysilat delsi datagramy nez 296 byte a prijimat delsi nez 500 byte. Pri spojeni se obe strany dohodnou na nejvyssich moznych velikostech ktere splnuji omezujici podminky. Bez argumentu se predpoklada mtu=mru=1500. Prakticka zkusenost: nektere terminalservery mohou datagram prijmuty od vas dlouhy 1500 B poslat do site s mtu=1000 coz ma za nasledek orezani paketu. Snizenim mtu u vas jako vysilajici strany eliminuje tuto potencialni hrozbu (mne se to projevovalo tak, ze neslo ftp ven pro soubory>~1300-1500 bytu)

CRTSCTS - pouzivani hardwaroveho toku dat mezi pocitaci (nebo pocitacem a modemem). Pokud lze pouzit, doporucuji.

XONXOFF - pouziti flow control. Doporucuji pouzit v poripade, ze mate pocitace (pocitec/modem) spojene jen 3 draty (pak musi byt RTS/CTS a DSR/DTR na strane pocitace zakonceny samy do sebe (looped back))

noipdefault - rika, ze mate obdrzet IP adresu od druheho konce (napr. terminalserveru). Toto klicove slovo budou chtit zaradit vsichni kdo bude vyuzivat komercnich terminalserveru s dynamickou alokaci IP a toto bude jejich jedine spojeni do internetu.

[XX.XX.XX.XX]:[YY.YY.YY.YY] timto prepinacem lze nastavit [vasi lokalni]:[vzdalenou] IP adresu priklad
192.23.55.66: - nastavuji jen svemu pocitaci adresu 192.23.55.66
:126.0.12.1 - nastavuje druhemu pocitaci adresu 126.0.12.1
192.23.55.66:126.0.12.1 - nastavuje lokalne 192.23.55.66 a vzdalenou 126.0.12.1 (takhle se konfiguruji terminalservery)
Vystraha: nepouzivejte adresy vyssi jak 223.255.255.255 napr. 224.0.0.0 zpusobi chybovou hlasku bad local/remote ip address

proxyarp - predstavte si ze mate ethernetovou sit 192.0.0.XXX v ktere ma pocitac 192.0.0.1 na sobe jeste PPP linku k druhemu pocitaci 192.0.0.3 Uzivatele ethernetu vsak normalne neuvidi pocitac 192.0.0.3 protoze pakety budou chodit pres pocitac s ethernet 192.0.0.1 a PPP 192.0.0.2 Volba proxyarp apusobi to, ze 192.0.0.3 bude z site 192.0.0.XXX viditelny jako by v ni byl fyzicky. Pocitac s rozhranimi 192.0.0.1 a 192.0.0.2 bude muset mit zapnuty IP_FORWARDING v jadre (bude to vlastne router).

defaultroute - vsechny pakety ktere nebudou pasovat do lokalne pripojenych siti budou posilany tudy ven ("defaultni cesta v routovaci tabulce")

asyncmap XXXXXXXX - 32 bitove cislo v hexa tvaru, v kterem jednotlive bity nastavene do 1 znamenaji ktere znaky 0-31 se maji escapovat. Napr. asyncmap 200a0000 je binarne 00100000000010100000000000000000 coz znamena znaky 29, 17, 19 decimalne se maji escapovat, tedy posilat pres linku jako 2byte sekvence. Pouziva se kdyz modem odchytava XON/XOFF znaky, nebo nektere z techto znaku nelze protlacit.

lock - zamkne seriovy port na dobu behu pppd

debug - hodne ukecany (v syslogu /var/adm/messages)

vsechny nebo jen nektere argumenty mohou byt ulozeny v souboru /etc/ppp/options . Pak staci spustit pppd a on si precte argumenty z prikazove radky a z tohoto souboru. Pri startu pppd se vykona skript /etc/ppp/ip-up a po skonceni /etc/ppp/ip-down (oba musi byt nastaveny jako executable), takze si do nich muzete dat neco jako
echo "CHANNEL ppp0 going up" | wall

Dalsi prepinace najdete v manualove strance k pppd
man pppd
nebo v nekterem z HOWTO dokumentu.


Zatim jsem nepopsal nejcastejsi situaci, totiz ze se budete muset nekam zalogovat, tam rict "chci mod PPP" a spustit PPP demona.
Ukazu to na priklade meho kamarada, jez ma ucet na MFF UK terminalserveru.
Pripojeni v terminalovem modu VT102 (napr. pres minicom):


atd234435
OK

CISCO Terminal Server SISAL MFF UK

User Access Verification

Username: pmit2218
Password: 


tserv>ppp
Entering PPP mode.
Async interface address is unnumbered (Ethernet0)
Your IP address is 194.50.16.204. MTU is 1500 bytes
Header compression will match your system.
~~ÿ}#À!}!}!} }4}"}&} }*} }
}%}&+<‰A}'}"}(}"æ«~~ÿ}#À!}!}"} }4}"}&} }*} }
}%}&+<‰A}'}"}(}",}6~~ÿ}#À!}!}#} }4}"}&} }*} }
}%}&+<‰A}'}"}(}"e…~

V tomto okamziku se na druhe strane spustil pppd nebo ekvivalent (klicove slovo ppp prepina terminalserver - asi skript jez nejprve vypise kecy "Entering...atakdale" a pak spusti vlastni PPP).
Pokud nebudete pouzivat terminalserver ale Linux masinu kde bude bezet getty program, tak se nejprve zalogujete jako v predeslem pripade a potom napisete primo pppd nebo pppd passive. pppd totiz pokud nezadate fyzicke zarizeni (ser. port) tak pouzije standartni vstup a vystup.

Welcome to Linux 1.2.13 running on i486
it's 01:20:32   Mon Nov 6  1995
on ttyS1
address smrt.peklo.cz
online 9 users

smrt login: user
Password:
Linux 1.2.13. (POSIX).
Smrt prichazi necekane

You have mail.

Die, v.:
        To stop sinning suddenly.
                -- Elbert Hubbard
smrt:~$ pppd passive
~ÿ}#¤!}!}!} }2}!}$}%Ü}%}&0ë;}'}"}(}"p¤~~ÿ}#¤!}!}!} }2}!}$}%Ü}%}&0ë;}'}"}(}"p¤~~ÿ}#¤!}!}!}
}2}!}$}%Ü}%}&0ë;}'}"}(}"p¤~~ÿ}#¤!}!}!} }2}!}$}%Ü}%}&0ë;}'}"}(}"p¤~~ÿ}#¤!}!}!}
}2}!}$}%Ü}%}&0ë;}'}"}(}"p¤~~ÿ}#¤!}!}!} }2}!}$}%Ü}%}&0ë;}'}"}(}"p¤~~ÿ}#¤!}!}!}
}2}!}$}%Ü}%}&0ë;}'}"}(}"p¤~~ÿ}#¤!}!}!} }2}!}$}%Ü}%}&0ë;}'}"}(}"p¤~
To co se vam zda jako rozsypanej caj jsou pakety PPP. Takze v tomto okamziku kdy se zacnou pakety objevovat na obrazovce vyskocim z minicomu (bez resetu modemu) a jako root spustim pppd. Cele se to chytne a gamesi. Ukonci se ppp-off (i kdyz spadne linka, tak to pppd vetsinou nepozna, musi se ukoncit rucne).
V Slackware je program dip (snad balik dip) "dialup handler" ktery muze vse zautomatizovat, vcetne zadani hesla. Staci si napsat/upravit skript. Dale je skript jez mi funguje ale se slipem. Jednoduse lze upravit i pro ppp.


Konfigurace ethernetove a nebo jine sitove karty (eth0,eth1,eth2,....)

Sitove karty maji podporu v jadru. Musite mit nekterou z podporovanych karet+zkompilovane jadro s jeji podporou. Sitove karty jsou reprezentovany pomoci eth0, eth1 atd. Standartne se testuje pri startu jen prvni ethernetova karta, pokud tedy chcete pouzit Linux jako bridge/router mezi dvema sitemi, musite pri startu zadat jadru parametry druhe sitove karty (resp. obou) ve tvaru
ether=IRQ,BASE_ADDR,[param1,][param2,]NAME
napr.
ether=11,0x280,eth1
Totez lze i pro prvni eth. kartu (v pripade vice karet aby bylo jasne jejich poradi nebo kdyz je nestandartne nastavena a neni detekovana jadrem pri startu).

Konfigurace zarizeni se delaji pomoci prikazu ifconfig a route. ifconfig je program jez rekne jadru ze ma akceptovat urcite zarizeni, priradit mu tuto IP adresu a netmask, nejake flagy (treba P-t-P) a nakonec jestli ma byt zarizeni aktivni/neaktivni (up/down). Samotny ifconfig vypise seznam instalovanych zarizeni. Priklad:

prompt# ifconfig

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Bcast:127.255.255.255  Mask:255.0.0.0
          UP BROADCAST LOOPBACK RUNNING  MTU:2000  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0
          TX packets:18952 errors:0 dropped:0 overruns:0

eth0      Link encap:10Mbps Ethernet  HWaddr 00:00:C0:28:72:62
          inet addr:223.255.255.1  Bcast:223.255.255.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2365 errors:0 dropped:0 overruns:0
          TX packets:2370 errors:0 dropped:0 overruns:0
          Interrupt:9 Base address:0x310 Memory:cc000-ce000 

Programem route se da nastavit do jakych siti a jak budou smerovat pakety. Krome toho ze nastavite vlastni sit muzete rict ze do site HEAVEN budou pakety posilany pres gateway SMRT - zajimave treba pro podniky s sitemi ve vice vzdalenych budovach. Priklad routovaci tabulky (prikazem route bez parametru):

prompt# route

Kernel routing table
Destination     Gateway         Genmask         Flags MSS    Window Use Iface
localnet        *               255.255.255.0   U     1436   0     2506 eth0
loopback        *               255.0.0.0       U     1936   0    19990 lo

Tyto prikazy jsou typicky spousteny po startu systemu skriptem /etc/rc.d/rc.inet1 (ktery je ovsem volan dalsim skriptem). Zarizeni loopback se pridava vzdy, ethernet jen kdyz ho mate (ja ano). Potom si musite do shellovych promennych IPADDR,NETMASK,NETWORK a BROADCAST vyplnit spravne IP. Priklad je pro moji soukromou sit. Vybral jsem si jednu z nejvyssich moznych adres siti typu C, protoze se obcas pripojuji do Internetu a nechci ani aby jeji adresa kolidovala s nekterou existujici ani si nechci zaregistrovavat/zadat o prideleni unikatniho cisla site. Pouzivam adresu site 220.200.240.0 s netmaskou 255.255.255.0, broadcast je tedy 220.200.240.255 (v nejakem RFC jsou popsany vyhrazene IP adresy pro neregistrovane site, tak se tim na rozdil ode mne ridte A: 10.x.x.x, B: 172.16.x.x, C: 192.168.x.x)

Pokud budete mit vlastni sit a nekde v ni bude pocitac/router pro zbytek sveta, tak si vyplnte do promenne GATEWAY jeho IP adresu, ponevadz co se nenajde lokalne tak pujde pres nej.

Priklad rc.inet1:

#! /bin/sh
#
# rc.inet1	This shell script boots up the base INET system.
#
# Version:	@(#)/etc/rc.d/rc.inet1	1.01	05/27/93
#

HOSTNAME=`cat /etc/HOSTNAME`

# Attach the loopback device.
/sbin/ifconfig lo 127.0.0.1
/sbin/route add -net 127.0.0.0

# IF YOU HAVE AN ETHERNET CONNECTION, use these lines below to configure the 
# eth0 interface. If you're only using loopback or SLIP, don't include the
# rest of the lines in this file.

# Edit for your setup.
   IPADDR="220.200.240.1"	# REPLACE with YOUR IP address!
  NETMASK="255.255.255.0"	# REPLACE with YOUR netmask!
  NETWORK="220.200.240.0"	# REPLACE with YOUR network address!
BROADCAST="220.200.240.255"	# REPLACE with YOUR broadcast address, if you
			# have one. If not, leave blank and edit below.
#GATEWAY=""	# REPLACE with YOUR gateway address!

# Uncomment ONLY ONE of the three lines below. If one doesn't work, try again.
/sbin/ifconfig eth0 ${IPADDR} netmask ${NETMASK} broadcast ${BROADCAST}
#/sbin/ifconfig eth0 ${IPADDR} broadcast ${BROADCAST} netmask ${NETMASK}
# /sbin/ifconfig  eth0 ${IPADDR} netmask ${NETMASK} 

# Uncomment these to set up your IP routing table.
/sbin/route add -net ${NETWORK} netmask ${NETMASK}

#/sbin/route add default gw ${GATEWAY} metric 1

# End of rc.inet1
Napoprve doporucuji pouzit konfiguracni skript netconfig, ten za vas nastavi hlavni veci a toto zde uvadim jen pro uplnost a informaci. Myslim totiz, ze pokud budete chtit zmenit jen svoje IP v siti, nema smysl prochazet znovu celym netconfig skriptem, protoze ten vam napriklad smaze aliasy pocitacu jez si date do /etc/hosts.


Konfigurace SLIPu


SLIP se chova v podstate jako ethernetova karta (co se tyce systemu zapojeni do systemu), tedy programem ifconfig a route. Problem je vetsinou v tom, ze ethernetovku si nakonfigurujete pri startu systemu natrvalo, kdezto SLIP se vetsinou pouziva pro dialup spojeni, kdy je nutne

  1. Vytocit cislo vaseho providera na modemu (pokud nemate pevnou linku)
  2. Zalogovat se a spustit tam SLIP/CSLIP
  3. Spustit u sebe program ifconfig se spravnymi parametry
  4. Zaradit zarizeni SLIP (sl0,sl1,...) do routovaci tabulky programem route

Samozrejme ze jestlize mate pevnou linku, tak se toto nejlepe provadi ve skriptu /etc/rc.d/rc.inet1 pri bootu systemu.

Donedavna jsem pro pripojeni do skoly pres SLIP pouzival trochu zasmodrchany postup:
zavolal jsem z minicomu na skolni modem, vyskocil z minicomu, poslal autorizaci na modem ( cat autorizacni_soubor > /dev/modem ), precetl si co vratil modem za IP cislo (cat /dev/modem) a spustil skript jez pripojil zarizeni sl0 jako defaultni cestu do systemove routovaci tabulky. Fuj.

Mnohem lepsi je pouzit programu dip, ktery ma ve slackware svuj vlastni balik v serii n - [ ] N Networking (TCP/IP, UUCP, Mail, News)

Vytvoril jsem si skript, ktery sam zresetuje modem, nastavi rychlost seriove linky, zavola do skoly, posle autorizaci a zjisti, jake IP ma zrovna nastavit (to vrati skolni terminalserver) a sam zaradi slipa do systemu jako defaultni cestu. V pripade ze se nedovola, nebo je linka obsazena, vrati se s vypisem ''error''. No jeste uvidite.

Vypis skriptu skola.dip:

###############################################################################
# DIP script to connect to a Xylogics Micro Annex
# Written by Kevin Layer (layer@franz.com) with help from John
#   Foderaro (jkf@franz.com).

  # Fetch the IP address of our target host.
main:
  echo on
  # Set the desired serial port and speed. Tady radeji /dev/modem
  port /dev/ttyS1
  speed 38400
  #muj skolni terminalserver (resp cisco router) ma vzdy stejnou adresu:
  get $remote 192.108.160.6
  # Reset the modem and terminal line.
  reset

  # Prepare for dialing.
  send ATZ\r
  wait OK 10
  if $errlvl != 0 goto error
  dial p24357552
  if $errlvl != 1 goto error
# 1

#  wait CONNECT 70
#  if $errlvl != 0 goto error 
  # We are connected.  Login to the system.
login:
  wait LOGIN 20
  if $errlvl != 0 goto error
  send USER Vladimir Myslik xmyslik\r\n
  send PASSWORD mojeHesLSO\r\n
  send \r\n
  wait addr 10
#  if $errlvl != 0 goto error
  get $local remote 1
#  if $errlvl != 0 goto error
done:
  print CONNECTED with address $local
  default
  mode SLIP
  goto exit
error:
  print error.
exit:
Mno jak jiste vidite, trochu jsem upravil nejaky cizi skript. Vsechno co je za#zovany, je komentar (jiste chapete). Takhle se to spusti (jako root):
smrt:# dip -v -m 1500 skola.dip
Ten parametr -v je tam pouze proto, aby bylo videt co se vypisuje (verbose - klidne ho muzete vyhodit.), -m # je mtu (maximum transfer unit). Pro ty co budou uzivat stejny terminalserver jako ja (CVUT FEL-self-built), je 1500 nutnost (kvuli tomu ze ten terminalserver to neumi rozlozit na mensi pakety kdyz je to vetsi jak mtu slipu). Take je mozne udelat pripojeni tak, aby si kazdy uzivatel (nebo jen ten vyvoleny) mohl zavolat pres skript sam, aniz by musel znat heslo roota. Ja si to nepamatuju, kouknete se na man dip, nebo do adresare /usr/doc/dip , kde je vetsinou dokumentace k dipu.

Zde je vypis toho, co dip pise do syslogu (resp. /var/adm/messages). Silne jsou spousteni syst. prikazu, ktere vola dip automaticky:

Apr 20 14:06:04 smrt dip[2772]: DIP: tty_open: /dev/ttyS1 (9) 
Apr 20 14:06:07 smrt dip[2772]: waiting for "OK" for 10 sec's.
Apr 20 14:06:38 smrt dip[2772]: waiting for "LOGIN" for 20 sec's.
Apr 20 14:06:44 smrt dip[2772]: waiting for "addr" for 10 sec's.
Apr 20 14:06:44 smrt dip[2774]: slip: set_disc N_SLIP (1)
Apr 20 14:06:44 smrt dip[2774]: slip: set_encap(0x0000)
Apr 20 14:06:44 smrt dip[2774]: >>> ATTACH "/sbin/ifconfig sl0 192.108.160.86 pointopoint 192.108.160.6 mtu 1500 " 
Apr 20 14:06:44 smrt dip[2774]: >>> ATTACH "/sbin/route add 192.108.160.6 sl0" 
Apr 20 14:06:44 smrt dip[2774]: >>> ATTACH "/sbin/route add -net default gw 192.108.160.6 metric 1 sl0" 
Apr 20 14:06:44 smrt dip[2774]: root dial-up 192.108.160.86/192.108.160.86 to remote 192.108.160.6/192.108.160.6  with SLIP/296
Doufam ze to je dostatecna inpirace k experimentum s programem dip. Pomoci dipu lze pripojit i PPP spojeni. U vseho ale pozor: at nikdo nevidi, jake username a password ten skript posila na druhou stranu!! (radsi ani nepouzivejte parametr verbose -v u dipu, aby to nevypisovalo na obrazovku). Nejlepe ho chownete rootovi a nastavte cteni jen pro neho (-rwx------).


Mno tak to by bylo. Linux ma velmi silnou podporu sitovani, specielne nova jadra maji hodne ovladacu pro vsechny mozny sitovy karty (uz i ISDN, WaveLAN). V linuxu je zatim sice slabsi podpora nfs (to uz neplati u linuxu 2.0), ale jako server ma nepochybne nejlepsi pomer cena/vykon a vyuziti pameti (na server neni nutne mit grafiku).

V soukrome siti mne a mych kamaradu jede jeden linux server na starem 386SX25 a funguje zaroven jako fax, dial-in server a dialup-router(toto obstarava program mgetty). Navic na nem bezi sendmail a irc, takze si muzeme posilat maily a kecat dohromady a kdyz prijde fax, dostane o tom zpravu spravce faxu. Tento pocitac jede bez monitoru a klavesnice a bez floppy mechanik, takze az prijde M$ softwarova inkvizice s tim, abychom je nechali "zdokumentovat obsah disku" , tak je tak akorat privedeme na WC kde bude bezet terminal....linux login inside...
Dokonce i s ftp lze z tohoto pocitace dosahnout uzasnych 290 kB/s , coz je na SX s 8-bitovou starou WD ethernetovkou docela vykon. Puvodne bylo v tomto pocitaci pouze 2MB pameti (a linux jel jeste s 1200kb volnymi !!!), ale ted jak spadly ceny je tam 5 MB a maly 60MB 2.5 tichy disk. K tomuto pocitaci se pripojuje jeden clovek s winshitem95&linuxem a druhy s slipem na amize (pres asi 50m 4zilovy stineny tlf. kabel na 57600 baudech - bez zesilovacu).
Mozna nainstalujeme na tento pocitac demon diald, coz je program, ktery kdyz zjisti, ze je pozadavek na spojeni s pocitacem "venku", tak sam vytoci na modemu cislo a zavola ISP. Zatim tam mame pouze zapnut IP_MASQUERADING, coz je vymozenost linuxu 2.0 . Je to takovy chytry router (ci paket forwarder), ktery umi vyuzit jedine IP cislo (modemu) pro celou lokalni sit jako gateway ven. Takze treba douzy bezici na jinem pocitaci pouzivajici tento pocitac jako gateway muzou telnetit, ftpit (po insmodnuti kernel modulu ip_masq_ftp.o) , webit az do aleluja (jedine co nefungi je ping).

Nekdy az budu mit naladu, tak sem vrazim schemata spojeni seriovych, paralelnich kabelu a kabelu pro ethernet (AUI).

Vezmetez si toto povidani jako inspiraci jak vyuzit stary hardware (ten co mel jeste malou spotrebu nekolika W) na komunikacni ucely za pouziti TCP/IP.


Zpatky na hlavni stranku