# Przykład ustawienia demona "diald"

## Autor: Harish Pillay, h.pillay@ieee.org
Wersja polska: Bartosz Maruszewski B.Maruszewski@jtz.org.pl
v1.0, 30 Sierpnia 1997

Dokument ten ma służyć jako przykład ustawienia, którym posługiwałem się na wielu maszynach i które umożliwia automatyczną instalację diald podczas startu systemu. Kiedy pojawia się żądanie połączenia, automatycznie wybierany jest numer mojego ulubionego dostawcy Internet-u tutaj w Singapurze - Pacific Internet. Wielkie dzięki dla Erica Schenka za ten super program - diald. Dokument ten został napisany w standardzie ISO-8859-2. Jego oryginalna wersja znajduje się pod adresem ftp.icm.edu.pl.

## 1. Opis działania diald.

## 1.1 `/etc/rc.d/rc.local`

    #! /bin/sh
    # Put any local setup commands in here
    # Running gpm
    echo "Running gpm..."
    gpm -t ms &

    # starting innd
    /etc/rc.d/rc.news

    # starting CERN httpd
    echo "Starting CERN httpd with proxy and caching."
    /usr/local/bin/httpd

    # loading modules that are needed
    /etc/rc.d/rc.modules

    # starting diald
    echo "Starting diald daemon to Pacific Internet ..."
    cd /usr/lib/ppp
    /usr/lib/ppp/diald.pacific.internet

## 1.2 `/usr/lib/ppp/diald.pacific.internet`

    /usr/sbin/diald /dev/ttyS1 /dev/ttyS1 lock debug 20 -m ppp local 127.0.0.2 \
      remote 127.0.0.3 defaultroute modem crtscts \
      connect "chat -v -f /usr/lib/ppp/pppchat.pi" \
      dynamic -- debug noipdefault

## 1.3 `/usr/lib/ppp/pppchat.pi`

    ABORT "NO CARRIER"
    ABORT BUSY
    "" ATZ OK
    ATm1s50=255s111=0DT1-800-555-1212
    CONNECT ""
    login MÓJLOGIN
    ssword MOJEHASŁO

## 1.4 Prosty skrypt do PPP.

- Odpal minicom-a.
- Połącz się ze swoim dostawcą Internet-u.
- Zainicjuj PPP na drugim końcu.
- Zawieś minicom-a (ALT-A-J).
- Wykonaj następujący skrypt.

    #!/bin/sh
    #       Ustaw PPP na ślepo - skrypt o nazwie blind.ppp

    DEVICE=ttyS1
    (
            stty 38400 -tostop
            pppd -detach debug noipdefault defaultroute mru 1500 /dev/$DEVICE &
            exit 0
    )  /dev/$DEVICE

## 1.5 Mój plik `/etc/diald.conf` (nie zmieniony od instalacji dystrybucji)

    # Jest to dość skomplikowana kombinacja reguł filtrujących.
    # (Są to reguły, których używam osobiście)
    #
    # Podzieliłem te reguły na 4 sekcje:
    # pakiety TCP, pakiety UDP, pakiety ICMP i na końcu reguły dla reszty.
    #------------------------------------------------------------------------------
    # Reguły dla pakietów TCP
    #------------------------------------------------------------------------------
    # Ogólny komentarz dotyczący zestawu reguł:
    #
    # Ogólnie, jako znaczące do timeout-ów, chcielibyśmy traktować tylko
    # pakiety zawierające dane na łączu TCP. Dlatego spróbujemy ignorować
    # pakiety bez danych.  Ponieważ najkrótszy możliwy nagłówek pakietu
    # TCP to 40 bajtów, więc każdy pakiet o długości 40 bajtów nie może
    # zawierać danych.  W ten sposób możemy przeoczyć puste pakiety (w
    # nagłówku IP mogą znajdować się opcjonalne informacje na temat
    # routing-u i inne dodatkowe informacje), ale powinniśmy dostać
    # większość z nich. Zauważ, że nie chcemy odfiltrowywać pakietów z
    # wyzerowanym polem "tcp.live", ponieważ użyjemy ich później, aby
    # przyspieszyć rozłączenia na niektórych połączeniach TCP.
    #
    # Chcemy także być pewni, że pakiety WWW są aktywne, nawet jeśli gniazdo TCP
    # jest zamknięte. Robimy to ponieważ WWW nie utrzymuje otwartych
    # połączeń jak już dane zostaną przetransportowane, i byłoby
    # denerwujące ciągłe inicjowanie i zamykanie połączenia jak tylko
    # dostaniesz jakiś dokument.
    #
    # Poza WWW TCP jest najczęściej używane do długożywotnych połączeń,
    # które jak już zginą, to znaczy, że ich nie potrzebujemy. Nie
    # koniecznie chcemy czekać 10 minut aż połączenie zostanie zamknięte
    # jeśli nie mamy uruchomionych żadnych telnet-ów czy rlogin-ów, tak
    # więc chcemy przyspieszyć timeout na połączeniu TCP, które zostały
    # zamknięte. Zrobimy to poprzez przechwytywanie pakietów, które nie
    # mają ustawionej flagi "live".
    #
    # --- właściwy początek zestawu reguł ---

    # Na inicjację połączenia dajemy tylko 15 sekund. Cały pomysł polega tu
    # na tym, że trzeba się liczyć z możliwością, iż sieć na drugim końcu
    # nie będzie działać. W tym przypadku nie chcesz przecież dawać 10
    # minut na połączenie. Poniższą regułą dajemy właśnie połączeniu owe
    # 15 sekund czasu. Jeśli sieć z drugiej strony działa, to w ciągu 15
    # sekund otrzymamy odpowiedź, która będzie zawierała jakieś
    # dane. Jeśli w twoim przypadku sprawia to problemy, bo np.: masz
    # wolne połączenie czy długi czas odpowiedzi, to możesz zwiększyć
    # timeout lub po prostu usunąć tę regułę.
    accept tcp 15 tcp.syn

    # Nie podtrzymuj połączenia jeśli przychodzą pakiety do named-a
    ignore tcp tcp.dest=tcp.domain
    ignore tcp tcp.source=tcp.domain

    # (Oj! SCO telnet zaczyna od wysyłania pustych sygnałów "SYN" i
    # otwiera połączenie tylko w przypadku jeśli otrzyma odpowiedź. Jeny...)
    accept tcp 5 ip.tot_len=40,tcp.syn

    # Nie podtrzymuj połączenia jeśli pakiety są puste (oprócz pustych SYN-ów)
    ignore tcp ip.tot_len=40,tcp.live

    # Upewnij się, że transfer http podtrzymuje połączenie przez 2 minuty,
    # nawet po zakończeniu.
    # UWAGA: W pliku /etc/services może nie być definicji
    # serwisu tcp dla www, w którym to przypadku powinieneś zakomentować
    # dwie poniższe linie, albo zdobyć nowszy plik /etc/services. W
    # sprawie nowego /etc/services zobacz FAQ.
    accept tcp 120 tcp.dest=tcp.www
    accept tcp 120 tcp.source=tcp.www

    # Jeśli połączenie nie jest już aktywne, spróbujemy szybko je
    # zamknąć. Zauważ, że jeśli połączenie jest już "zdown-owane", to
    # zmiana stanu nie spowoduje jego przywrócenia.
    keepup tcp 5 !tcp.live
    ignore tcp !tcp.live

    # po danych ftp albo połączeniu ftp można się spodziewać dość częstego
    # ruchu
    accept tcp 120 tcp.dest=tcp.ftp
    accept tcp 120 tcp.source=tcp.ftp

    # UWAGA: ftp-data nie jest zdefiniowane w pliku /etc/services
    # dostarczanego z najnowszą wersją NETKIT, więc to zakomentowałem.
    # Jeśli chcesz to zdefiniować, to dodaj poniższą linię do
    # /etc/services
    # ftp-data       20/tcp
    # i odkomentuj dwie następne linie
    #accept tcp 120 tcp.dest=tcp.ftp-data
    #accept tcp 120 tcp.source=tcp.ftp-data

    # Jeśli nie wyłapiemy tego wcześniej, to daj połączeniu 10 minut.
    accept tcp 600 any

    # Reguły dla pakietów UDP
    #
    # Żądania dla domeny będziemy odrzucać od razu ponieważ chcemy, żeby
    # one tylko podniosły połączenie, a nie trzymać je przez długi czas.
    # Robimy tak ponieważ, sieć byłaby inicjowana przy każdym odwołaniu do
    # biblioteki resolvera (o ile nie trzymasz wszystkich swoich często używanych
    # adresów w /etc/hosts, w którym to przypadku odkryjesz jeszcze inne
    # problemy.)
    # Zauważ, że nie powinieneś ustawiać mniejszego timeout-u niż
    # spodziewany czas odpowiedzi twojego serwera DNS. W innym przypadku
    # kiedy inicjacyjne połączenie jest już ustawione może się pojawić
    # większe opóźnienie niż to pomiędzy inicjacyjną serią pakietów zanim
    # jakikolwiek pakiet, który podtrzymuje połączenie przejdzie przez połączenie.

    # Nie ustawiaj połączenia dla rwho
    ignore udp udp.dest=udp.who
    ignore udp udp.source=udp.who
    # Nie ustawiaj połączenia dla RIP
    ignore udp udp.dest=udp.route
    ignore udp udp.source=udp.route
    # Nie ustawiaj połączenia dla NTP czy timed.
    ignore udp udp.dest=udp.ntp
    ignore udp udp.source=udp.ntp
    ignore udp udp.dest=udp.timed
    ignore udp udp.source=udp.timed
    # Nie ustawiaj połączenia dla żądań domeny pomiędzy dwoma działającymi named-ami
    ignore udp udp.dest=udp.domain,udp.source=udp.domain
    # Ustaw połączenie jeśli pojawi się żądanie domeny z innego miejsca
    # niż named
    accept udp 30 udp.dest=udp.domain
    accept udp 30 udp.source=udp.domain
    # To samo dla rozgłaszania netbios-ns
    # UWAGA: w pliku /etc/services serwis netbios-ns może nie być
    # zdefiniowany - wtedy powinieneś zakomentować 3 poniższe linie
    ignore udp udp.source=udp.netbios-ns,udp.dest=udp.netbios-ns
    accept udp 30 udp.dest=udp.netbios-ns
    accept udp 30 udp.source=udp.netbios-ns
    # Nie utrzymuj połączenia dla transferów routed i gated
    ignore udp tcp.dest=udp.route
    ignore udp tcp.source=udp.route
    # Wszystko inne dostaje 2 minuty czasu
    accept udp 120 any

    # Wszystkim pakietom, których nie objęły poprzednie zasady daj 30
    # sekund życia
    accept any 30 any

## 1.6 Mój plik `diald.defs` (nie zmieniony od instalacji dystrybucji)

    # Definicja domyślnych reguł dla protokołów
    prule tcp tcp 9:12:13:14:15:16:17:18:19:+0:+1:+2:+3:9:9:9
    prule udp udp 9:12:13:14:15:16:17:18:19:+0:+1:+2:+3:9:9:9
    prule icmp icmp 9:12:13:14:15:16:17:18:19:9:9:9:9:9:9:9
    prule any any 9:12:13:14:15:16:17:18:19:9:9:9:9:9:9:9
    # Definicja pól nagłówków pakietów internet-owych
    var ip.ihl 0(24)&0xf
    var ip.version 0(28)&0xf
    var ip.tos 1(24)&0xff
    var ip.tot_len 2(16)&0xffff
    var ip.id 4(16)&0xffff
    var ip.frag_off 6(16)&0x3fff
    var ip.ttl 8(24)&0xff
    var ip.protocol 9(24)&0xff
    var ip.check 10(16)&0xffff
    var ip.saddr 12
    var ip.daddr 16
    # Definicja pól nagłówków pakietów TCP
    var tcp.source +0(16)&0xffff
    var tcp.dest +2(16)&0xffff
    var tcp.seq +4
    var tcp.ack_seq +8
    var tcp.doff +12(28)&0xf
    var tcp.fin +13(24)&0x1
    var tcp.syn +13(25)&0x1
    var tcp.rst +13(26)&0x1
    var tcp.psh +13(27)&0x1
    var tcp.ack +13(28)&0x1
    var tcp.urg +13(29)&0x1
    var tcp.live +127
    # Definicja nagłówków pakietów UDP
    var udp.source +0(16)&0xffff
    var udp.dest +2(16)&0xffff
    var udp.len +4(16)&0xffff
    var udp.check +6(16)&0xffff
    # Definicja nagłówków pakietów ICMP
    var icmp.type +0(24)&0xff
    var icmp.code +1(24)&0xff
    var icmp.checksum +2(16)&0xffff
    var icmp.echo.id +4(16)&0xffff
    var icmp.echo.sequence +6(16)&0xffff
    var icmp.gateway +4

## 1.7 Mój sprzęt i oprogramowanie.

- 486/66, 20 MB RAM i dużo miejsca na dysku :-)
- dużo chip-ów 16550
- diald 0.11, pppd 2.2.0d, jądro 1.3.95 (zmodularyzowane)

## 1.8 Uwagi.

- Upewnij się, że zmieniłeś powyżej /dev/ttyS1 odpowiednio do swoich potrzeb
- Upewnij się, że możesz się rzeczywiście połączyć przez PPP używając skryptu blind.ppp

Masz jakieś pytania? Przyślij mi list.

## 1.9 Od tłumacza.

Tłumaczenie to jest chronione prawami autorskimi © Bartosza Maruszewskiego. Dozwolone jest rozprowadzanie i dystrybucja na prawach takich samych jak dokument oryginalny.

Jeśli znalazłeś jakieś rażące błędy ortograficzne, gramatyczne, składniowe, techniczne to pisz do mnie:

B.Maruszewski@jtz.org.pl

Oficjalną stroną tłumaczeń HOWTO jest http://www.jtz.org.pl/

Aktualne wersje przetłumaczonych dokumentów znajdują się na tejże stronie. Dostępne są także poprzez anonimowe ftp pod adresem ftp.jtz.org.pl w katalogu `/HOWTO/`.

Przetłumaczone przeze mnie dokumenty znajdują się także na mojej stronie WWW. Są tam też odwołania do Polskiej Strony Tłumaczeniowej.

Kontakt z naszą grupą, grupą tłumaczy możesz uzyskać poprzez listę dyskusyjną jtz@ippt.gov.pl. Jeśli chcesz się na nią zapisać, to wyślij list o treści `subscribe jtz Imię Nazwisko` na adres `majordomo@ippt.gov.pl`