Przykład ustawienia demona "diald"<newline> <author>Autor: Harish Pillay, <htmlurl url="mailto:h.pillay@ieee.org" name="h.pillay@ieee.org"><newline> <bf>Wersja polska: Bartosz Maruszewski <htmlurl url="mailto:B.Maruszewski@zsmeie.torun.pl" name="B.Maruszewski@zsmeie.torun.pl"><newline> </bf> v1.0, 30 Sierpnia 1997 <abstract> 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 - <it/Pacific Internet/. Wielkie dzięki dla <bf/Erica Schenka/ za ten super program - diald. Dokument ten został napisany w standardzie ISO-8859-2. Jego oryginalna wersja znajduje się pod adresem <url url="ftp://ftp.icm.edu.pl:/pub/Linux/sunsite/docs/HOWTO/mini/" name="ftp.icm.edu.pl">. </abstract> <sect>Opis działania diald. <p> <sect1><tt>/etc/rc.d/rc.local</tt> <p> <verb> #! /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 </verb> <sect1><tt>/usr/lib/ppp/diald.pacific.internet</tt> <p> <verb> /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 </verb> <sect1><tt>/usr/lib/ppp/pppchat.pi</tt> <p> <verb> ABORT "NO CARRIER" ABORT BUSY "" ATZ OK ATm1s50=255s111=0DT1-800-555-1212 CONNECT "" login MÓJLOGIN ssword MOJEHASŁO </verb> <sect1>Prosty skrypt do PPP. <p> <itemize> <item>Odpal minicom-a. <item>Połącz się ze swoim dostawcą Internet-u. <item>Zainicjuj PPP na drugim końcu. <item>Zawieś minicom-a (ALT-A-J). <item>Wykonaj następujący skrypt. </itemize> <verb> #!/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 </verb> <sect1>Mój plik <tt>/etc/diald.conf</tt> (nie zmieniony od instalacji dystrybucji) <p> <verb> # 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 # przyśpieszyć 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 przyśpieszyć 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 </verb> <sect1>Mój plik <tt/diald.defs/ (nie zmieniony od instalacji dystrybucji) <p> <verb> # 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 </verb> <sect1>Mój sprzęt i oprogramowanie. <p> <itemize> <item>486/66, 20 MB RAM i dużo miejsca na dysku :-) <item>dużo chip-ów 16550 <item>diald 0.11, pppd 2.2.0d, jądro 1.3.95 (zmodularyzowane) </itemize> <sect1>Uwagi. <p> <itemize> <item>Upewnij się, że zmieniłeś powyżej /dev/ttyS1 odpowiednio do swoich potrzeb <item>Upewnij się, że możesz się rzeczywiście połączyć przez PPP używając skryptu blind.ppp </itemize> Masz jakieś pytania? <url url="mailto:h.pillay@ieee.org" name="Przyślij"> mi list. <sect1>Od tłumacza. <p> 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: <htmlurl url="mailto:B.Maruszewski@zsmeie.torun.pl" name="B.Maruszewski@zsmeie.torun.pl"> Oficjalną stroną tłumaczeń HOWTO jest <htmlurl url="http://www.jtz.org.pl/" name="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 <htmlurl url="ftp://ftp.ippt.gov.pl/pub/Linux/JTZ/" name="ftp.ippt.gov.pl"> w katalogu <tt>/pub/Linux/JTZ/</tt>. Przetłumaczone przeze mnie dokumenty znajdują się także na <url url="http://www.zsmeie.torun.pl/~bart/tlumaczenie.html" name="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 sie na nią zapisać, to wyślij list o treści <tt>subscribe jtz Imię Nazwisko</tt> na adres <tt>listproc@ippt.gov.pl</tt> </article>