Akvárium CB 21MHz Elektro Hudba Fotky ZX Spectrum +2A Jídlo Rybaření Hlavní stránka Akvárium CB 27MHz Elektro Hudba Fotky ZX Spectrum Jídlo Rybaření

English version

Iptables a maškaráda přes modem na RedHatu

V následujícím textu se budu snažit popsat, jak jsem nastavil a připojil domácí síť, kterou tvoří dva počítace s RH71CZ, na internet pomocí modemu. Postup je docela přehledně, ale anglicky, na http://www.csh.rit.edu/~mattw/proj/nf/.
Doporučuji si také přečíst slejdy z přednášek z akce OpenWeekend, kde zazněl výklad Pavla Luptáka o iptables a nat ve slovenštině. Pokud někomu bude vyhovovat angličtina, tak mu poslouží Iptables tutorial.

Mám doma dva počítače RH71CZ s 10Mb síťovými kartami a hubem na kterých jsem nastavil síť podle článku Using Red Hat Linux to connect two or more computers. Zvolil jsem si nejmenší typ sítě a rozsah IP adres 192.168.1.0 až 192.168.1.128, protože se mi to tak líbí a je to jeden z rozsahů, které jsou vyhrazeny pro lokální sítě. Nastavení a jména obou počítačů najdete v následující tabulce.

Parametr Hodnota Komentář
Adresa sítě/Network Address 192.168.1.0 pro oba stroje stejná
Všesměrová adresa/Broadcast Address 192.168.1.255 pro oba stroje stejná
Maska sítě/Subnet Mask 255.255.255.0 pro oba stroje stejná
Jméno 1. počítače/Host Name jaja jen pro tento stroj
IP adresa 1. počítače 192.168.1.1 jen pro tento stroj
Jméno 2. počítače/Host Name paja jen pro tento stroj
IP adresa 2. počítače 192.168.1.2 jen pro tento stroj
Implicitní brána 2. počítače/Gateway 192.168.1.1 jen pro tento stroj


Jednotlivé parametry je možné na obou strojích nastavit třeba pomocí programu linuxconf a výsledkem byla možnost pingnout z jednoho na druhý.

Dál je třeba na jednom z počítačů nainstalovat modem a připojit se na internet. Návod, jak na to, najdete na více místech. Třeba http://www.penguin.cz/~dawyd/ a http://martin.douda.net/volny/. Já se s tím vypořádal asi jednou z nejjednodušších cest. Spustil jsem v KDE program Kppp (podrobný návod), což je grafická nadstavba programu ppp. Ovládat a nastavit ho dovede snad každý. Je nutné pozměnit úvodní příkaz pro modem na ATX3 ale ostatní vyplyne z kontextu a dá se naklikat. Po připojení začne chodit internet na stroji s modemem jménem jaja s IP adresou 192.168.1.1.

Máme-li dva funkční počítače, které se vidí (ping a třeba ssh z jednoho na druhý je bez problémů) tak zkontrolujeme jestli se spouští iptables při startu počítače jaja. Na počítači paja nic takového pro tento účel běžet nemusí. Na mém počítači jaja jsem se podíval do /etc/rc3.d a zjistil jsem, že tam jsou, kromě mnoha jiných, dva linky S08ipchains a S08iptables. A to bylo špatně. Je nutné ten, co startuje ipchains, smazat, protože pokud jsou ipchains spuštěny, tak se iptables nespustí. V adresáři /etc/rc3.d tedy ponecháme jen S08iptables. Dá se to udělat "ručně" prostým smazáním linku S08ipchains a restartem počítače nebo lépe systémově, bez restartu, pomocí čtyř příkazů
chkconfig --level 0123456 ipchains off
service ipchains stop
chkconfig --level 235 iptables on
service iptables start
Pak napíšeme jako root
/sbin/iptables -L nebo (defaultně se bere filter) /sbin/iptables -L -t filter
/sbin/iptables -L -t nat
/sbin/iptables -L -t mangle
a měli bychom vidět výpis tabulek, které by měly být úplně prázdné, bez pravidel. Pravidla se samozřejmě dají doplnit a vytvořit tak z počítače třeba firewall v kombinaci s připojením lokální sítě.

Následující skript spuštěný na stroji s modemem jménem jaja
#!/bin/sh
IPTABLES=/sbin/iptables
/sbin/depmod -a
echo "1" > /proc/sys/net/ipv4/ip_dynaddr
echo "1" > /proc/sys/net/ipv4/ip_forward
#Turn NAT on.
$IPTABLES -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
přidá jediné pravidlo do nat tabulky jménem POSTROUTING, které použije modul MASQUERADE pro všechna spojení jdoucí na ppp0 zařízení, což je modem. Pokud máme místo modemu další síťovou kartu, tak jednoduše místo ppp0 dáte jméno té karty. Třeba eth1 v případě, že lokální síť je na eth0, jako u mě doma.

To, jestli se při dotazu na nějaký server mimo naši lokální síť bude požadavek posílat na modem, zajišťují pravidla ve Směrovací tabulce. Můžeme si ji vypsat pomocí příkazu /sbin/route
Směrovací tabulka v jádru pro IP
Adresát         Brána           Maska           Přízn Metrik Odkaz  Užt Rozhraní
as-prg2.vol.cz  *               255.255.255.255 UH    0      0        0 ppp0
192.168.1.0     *               255.255.255.0   U     0      0        0 eth0
127.0.0.0       *               255.0.0.0       U     0      0        0 lo
default         as-prg2.vol.cz  0.0.0.0         UG    0      0        0 ppp0
a řádky s prvním a čtvrtým pravidlem byly doplněny automaticky programem Kppp a právě ty zajišťují směrování všeho mimo naši domácí síť na modem (ppp0).

A mělo by to chodit. Ještě je třeba nastavit DNS adresu počítače paja na adresu, kterou najdeme na stroji jaja v /etc/resolv.conf

Kudy prochází pakety

    Network
       |
       V
     mangle
   prerouting
       |
       V
      nat
   prerouting
       |
       V
Routovaci rozhodnuti
Ma paket moji IP?      ANO ---> mangle
       NE                       input
       |                          |
       V                          |
     mangle                     filter
     Forward                    input
       |                          |
     forward                    lokalni
     filter                     proces
       |                          |
       |                        mangle
       |                        output
       |                          |
       |                         nat
       |                        output
       |                          |
       |                        filter
       |                        output
       |                          |
       +<-------------------------+
       |
       V
     mangle
  Postrouting
       |
      nat
  Postrouting
       |
       V
    Network

                                     Network
                             -----------+-----------
                                        |
                                +-------+------+
                                |    mangle    |
                                |  PREROUTING  | <- MARK REWRITE
                                +-------+------+
                                        |
                                +-------+------+
                                |      nat     |
                                |  PREROUTING  | <- DEST REWRITE
                                +-------+------+
                                        |
                                +-------+------+
                                |   ipchains   |
                                |    FILTER    |
                                +-------+------+
                                        |
                                +-------+------+
                                |     QOS      |
                                |   INGRESS    | <- controlled by tc
                                +-------+------+
                                        |
                 packet is for  +-------+------+ packet is for
                 this address   |     INPUT    | another address
                 +--------------+    ROUTING   +---------------+
                 |              |    + PRDB    |               |
                 |              +--------------+               |
         +-------+------+                                      |
         |    filter    |                                      |
         |    INPUT     |                                      |
         +-------+------+                                      |
                 |                                             |
         +-------+------+                                      |
         |    Local     |                                      |
         |   Process    |                                      |
         +-------+------+                                      |
                 |                                             |
         +-------+------+                                      |
         |    OUTPUT    |                              +-------+-------+
         |    ROUTING   |                              |    filter     |
         +-------+------+                              |    FORWARD    |
                 |                                     +-------+-------+
         +-------+------+                                      |
         |    mangle    |                                      |
         |    OUTPUT    | MARK REWRITE                         |
         +-------+------+                                      |
                 |                                             |
         +-------+------+                                      |
         |     nat      |                                      |
         |    OUTPUT    | DEST REWRITE                         |
         +-------+------+                                      |
                 |                                             |
         +-------+------+                                      |
         |    filter    |                                      |
         |    OUTPUT    |                                      |
         +-------+------+                                      |
                 |                                             |
                 +----------------+       +--------------------+
                                  |       |
                               +--+-------+---+
                               |   ipchains   |
                               |    FILTER    |
                               +-------+------+
                                       |
                               +-------+------+
                               |     nat      |
                               | POSTROUTING  | SOURCE REWRITE
                               +-------+------+




Takto připojená síť je ale zcela nechráněná a tedy lehce nabouratelná. Takže pozor. Otestovat vlastní počítač lze třeba na stránce Shields Up.

Uvítám jakékoliv připomínky, opravy a podobně.
Hodně štěstí
Hlavní stránka