Linux jako internetová gateway (2)

21. 1. 2004
Doba čtení: 8 minut

Sdílet

Ilustrační obrázek
Autor: Depositphotos – stori
Ilustrační obrázek
V dnešním dílu seriálu o stavbě domácího routeru si na našem čerstvě nainstalovaném počítači nakonfigurujeme síť.

Konfigurace sítě

Pokud nám boot proběhl dobře a Linux běží a vy jste se zalogovali jako root, můžeme pokračovat v konfiguraci. V této fázi již nebudeme potřebovat CD-ROM mechaniku a až skončíme tuto část, tak snad už ani monitor a klávesnici.

Hostname

Hostname počítače změníme nebo vložíme prostým napsáním do souboru /etc/HOSTNAME, v mém případě obsahuje: thovt.vetrnik.net.

Routování

Zapneme routování neboli předávání paketů z jednoho rozhraní na druhé, zadejte:

cat /proc/sys/net/ipv4/ip_forward

Pokud vypíše 1, je routování zapnuto, pokud je tam 0, tak je vypnuto. Zapneme ho takto, zadejte:

echo 1 > /proc/sys/net/ipv4/ip_forward

Adresář proc je totiž jen virtuální a s jeho pomocí komunikujeme s jádrem a předáváme mu parametry. Každý soubor v tomto adresáři reprezentuje nějakou funkci, případně program. Lépe je to popsáno v seriálu Co před námi tají /proc. Pro naše potřeby to ale není nutné teď vše probírat.

Pokud musíte routování ručně zapínat, máte několik možností, jak ho automaticky zapínat hned při startu: projít startovací skripty v adresáři /etc/rc.d a upravit je, nebo vše, co chcete spouštět sami, prostě pište do souboru /etc/rc.d/rc.local, ten se spouští jako poslední. Sice se to může zdát spoustě linuxových administrátorů hloupé to takto psát, ale je to na jednu stranu jednoduché a také přehledné, tedy alespoň pro náš případ. Takže pokud routování nebylo zapnuton šup s tím na první řádek rc.local, nebojte, bude toho více :-)

Síťová rozhraní

Síťovými rozhraními, interfacy, se rozumí jakékoliv propojení počítače s jiným počítačem. Rozhraní je skutečně mnoho, nejpoužívanějším je určitě ethernet, ať už drátový, nebo bezdrátový, pak sériový port a paralelní port. Začneme klasickou ethernetovou kartou.

Jakýkoliv operační systém potřebuje k provozu síťové karty ovladač, driver. Ten je v Linuxu realizován buď modulem, a nebo přímo v jádře systému. Otázka je, co je lepší, ovladač v jádře zabírá více místa a obtížněji se mu předávají parametry. Nahrávání ovladačů přes moduly je zase mnohem pomalejší. My ale budeme realizovat ovladače přes moduly, má to výhodu, že nemusíme sestavovat nové jádro, použijeme to z distribude, ba­re.i

O zavádění modulů se v Linuxu stará program modprobe ve spolupráci s insmod, který si volá. O výpis zavedených modulů se stará lsmod a o odstraňování rmmod. Modulů je spousta a jsou v adresáři /lib/modules/… Dají se i mazat ty, které nebudete potřebovat, třeba když máte nedostatek místa na disku (jako například já na svém starším notebooku 386 s 130MB diskem), ale raději to nedělejte, nebo si smažete některý potřebný a pak vám něco nemusí chodit (také odzkoušeno v praxi :-).

Takže pokud máte v počítači PCI síťovou kartu, já používám Edimax 10Mb combo s chipsetem Realtec-8029, napište: modprobe ne2k-pci. Pokud vše proběhlo dobře, měl by se modul objevit při zadání lsmod, modprobe jich zavedl více podle potřeby. A dále se karta, případně karty, mám dvě a pro obě PCI karty stačí zavést modul jednou, objeví v /proc/net/dev, odtud můžeme čerpat informace, jak se daná karta jmenuje. Mluvím o tom proto, že moje bezdrátová karta se se současným ovladačem orinoco_pci hlásí jako ethernet (tedy eth), kdežto s předchozími ovladači se hlásila jako wlan. Pořadí karet je určeno pořadím pci slotů, tj. nejblíže ke konektoru klávesnice je 0, v Linuxu se začíná číslovat od 0, tj. eth1 je druhý ethernet. Ale pro jistotu ještě doporučuji vše otestovat pingem a pohledem na ledky :-) Hardware karet si můžeme ještě prověřit příkazem lspci. Pokud se modul správně zavedl, tak šup s ním na další řádek do  rc.local.

Teď si interface spustíme, předpokládám, že kabeláž je v pořádku a máte zde ještě jeden připojený počítač s rozchozenou sítí. Napište:

ifconfig eth1 192.168.1.1 netmask 255.255.255.0 up

Pokud vše proběhlo dobře, tak necháte-li teď vypsat ifconfig bez parametrů, zobrazí se vám dva interfacy – loopback a ethernet0. A teď otestujeme, zda nám síť chodí. Pingněte na druhý počítač, který máte připojený, řekněme, že má adresu 192.168.1.2, měli byste dostat zhruba toto:

root@thovt:~# ping -c 2 192.168.1.2
PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.
64 bytes from 192.168.1.2: icmp_seq=1 ttl=128 time=0.634 ms
64 bytes from 192.168.1.2: icmp_seq=2 ttl=128 time=0.515 ms

--- 192.168.1.2 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1006ms
rtt min/avg/max/mdev = 0.515/0.574/0.634/0.064 ms 

Parametr c udává, kolik paketů PC pošle. Pokud se žádná odezva nevrátila, není nic ztraceno, na PC 192.168.1.2 můžete mít ještě ping zakázaný, to prověříme:

root@thovt:~# arp -n
Address     HWtype HWaddress         Flags Mask Iface
192.168.1.2 ether  00:00:B4:BA:C9:30 C           eth1

Objevila se nám mac adresa, takže i když počítač neodpověděl, tak je spojení po ethernetu navázáno. Kdyby neodpověděl, bylo by místo mac adresy napsáno incomplete a záznam by po chvíli zmizel. Pominu zde nastavování správných IP adres a masek sítě, defaultních rout a DNS.

Teď se ještě podíváme na nahazování bezdrátových karet. Všechny karty s chipsetem Prism 2 by měly chodit na modul orinoco_pci, karta se pak hlásí jako ethernet. Následující řádky můžete rovnou opět psát do  rc.local

Tabulka č. 538
modprobe orinoco_pci #zavede modul pro wifi kartu, v mém případě jako eth0, možno prověřit příkazem iwconfig, bez parametrů vypíše wireless interface
iwconfig eth0 essid sit13 #konfigurace essid wifi sítě, název sítě je zde sit13, dostanete od providera
iwconfig eth0 mode managed #mód karty, na Linuxu umí chodit i jako AP, většinou není nutné nastavovat, momentální nastavení karty vám prozradí iwconfig

Kartu pak nahodíme přes ifconfig, jak jsme si ukazovali dříve.

Ještě trochu odbočím ohledně wifi, příkaz iwconfig eth0 vám vypíše údaje o wifi jako kvalitu linky… Příkaz dmesg vypisuje hlášení například o chybách a o tom, že AP je nedostupné, třeba jako v mém případě u slabšího signálu mi spojení občas vypadává a toto je první krok k diagnostice, proč linka nejede. A jako poslední si dovolím malý skriptík na monitorování kvality linky, za dobré se považuje tak 60 (Pozn. red.: já jsem ráda, když mám 20 :) –Johanka):

#!/bin/bash
while true; do
q=`iwconfig eth0 | grep Link | awk '{print $2}' | sed 's#Quality:##g' | sed 's#/92##g'`
j=$((q / 2))
echo -n "$q "
for i in `seq $j`;do echo -n "="; done
echo ""
sleep .5
done 

Poskytuje zhruba takový výpis:

18 =========
24 ============
26 =============
22 ===========
30 ===============
22 ===========
22 ===========
22 ===========
18 =========
28 ==============

Jak vidíte, jsem na tom se signálem docela bídně :-)

Pokud má vaše veřejné rozhraní dostávat od providera adresu od DHCP serveru a je jedno, zda je to wifi, nebo klasický ethernet, pak se to dělá takhle: dhcpcd eth0. Program dhcpcd zůstane pak běžet jako daemon a provede následující věci:

  1. Nahodí interface a přidelí mu IP adresu, kterou dostal, možno ověřit přes ifconfig.
  2. Zapíše defaultní routu do routovací tabulky, ověříme příkazem route.
  3. Zapíše DNS servery, které dostal, do /etc/resolv.conf. Stávající záznam v souboru bude přepsán a po ukončení činnosti daemona obnoven.
  4. Parametry, co získal, a PID zapíše do souborů /etc/dhcpc/dhcpcd-eth0.info a /etc/dhcpc/dhcpcd-eth0.pid, soubor s PIDem nám samozřejmě může pomoci deamona sestřelit a případně si zažádat o adresu znovu.

Já narazil na jeden takový menší problém, když jsem měl zavedené moduly pro všechny karty, tak dhcpcd nechodil a dokonce shazoval již nahozené interfacy. Možná to byl problém jen mého hardware, ale vyřešil jsem to tak, že jsem nejdříve zavedl modul pro wifi kartu a požádal si o IP, a teprve potom jsem zavedl moduly pro zbylé karty a nahodil je, vše pak fungovalo dobře. Samozřejmě příkaz přidáme do  rc.local.

Pokud IP adresu nedostáváte od providera přes DHCP, tak si teď ukážeme, jak to udělat ručně. Napište:

route add default gw 1.1.1.2

tím jste zadali defaultní gateway na adresu 1.1.1.2, adresu dostanete od providera. V routovací tabulce by to mělo vypadat následovně:

root@thovt:~# route
Kernel IP routing table
Destination Gateway Genmask         Flags Metric Ref Use Iface
192.168.1.8 *       255.255.255.252 U     0      0     0 eth2
192.168.1.0 *       255.255.255.248 U     0      0     0 eth1
1.1.1.0     *       255.255.255.0   U     0      0     0 eth0
loopback    *       255.0.0.0       U     0      0     0 lo
default     1.1.1.2 0.0.0.0         UG    0      0     0 eth0 

Pokud vše funguje, tj. ping do jiných sítí, pak do rc.local přidáme další řádek. Jen pro pořádek samozřejmě nejdříve nahodíme interface a pak teprve na něj můžeme dávat defaultní routu.

Zadání DNS serverů je velice jednoduché, stačí do souboru /etc/resolv.conf napsat nameserver 1.1.1.1 a zbytek smazat. A to je vše. Serverů může být samozřejmě i více, jako mi to přidělil DHCP server:

root@thovt:~# cat /etc/resolv.conf
nameserver 1.1.1.1
nameserver 194.108.73.1
nameserver 212.65.193.157
search vetrnik.net

Nyní by nám již měla síť chodit a počítač routovat, já ale ještě přidám jednu věcičku, a to připojení k tomuto serveru přes seriový port a nulový modem. Dalo by se sice říci, že je to triviální, ale sám vím, jaké jsem s tím měl jako začátečník problémy. Tímto způsobem připojuji k internetu Palma a také starší notebook, který nemá jinou možnost.

Do souboru /etc/inittab přidejte řádek:

palm:3:respawn:/usr/sbin/pppd /dev/ttyS0 33600 noauth silent persist local crtscts asyncmap 0 lock 192.168.1.13:192.168.1.14 

Na serveru se nám to spustí jako daemon a bude čekat na spojení na seriáku.

hacking_tip

Tabulka č. 539
palm název procesu, libovolný
3 runlevel, ve kterém se bude spouštět, nám stačí 3, ale lze napsat i 2345
respawn příkaz se po skončení znovu spustí, příkaz běží jako daemon
/dev/ttyS0 seriový port, zde com1
33600 rychlost, 386 neumí více, ale samozřejmě lze použít i 115200
noauth připojujeme se doma kabelem, který nám nahrazuje ethernet, autorizaci tedy nepotřebujeme
silent pppd se bude chovat jako daemon a bude čekat na spojení
persist po ukončení spojení bude daemon čekat na nové
local pppd nebude používat modemovou kontrolu toku dat
crtscts
asyncmap 0
nastavení hw kontroly toku, je na to nutno více drátů, ale je to rychlejší
192.168.1.13:192.168.1.14 první IP je serveru, druhá klienta

Propojte to kabelem a na klientovi s Linuxem napište:

pppd 33600 local crtscts lock asyncmap 0 noauth 192.168.1.14:192.168.1.13 /dev/ttyS0 

a je to :-)

Autor článku

V současné době pracuje jako správce linuxových systémů na Univerzitě Pardubice.