IP Alias mini HOWTO<NEWLINE> <AUTHOR>Autor: Harish Pillay <HTMLURL URL="mailto:h.pillay@ieee.org" NAME="h.pillay@ieee.org"><NEWLINE> v?, 13 Stycznia 1997<NEWLINE> <BF>Wersja polska: Leszek Urbański <HTMLURL URL="mailto:tygrys@fidonet.org.pl" NAME="tygrys@fidonet.org.pl"> <NEWLINE></BF> v1.0, 5 Kwietnia 1998 <ABSTRACT> Jak ustawić IP Aliasing na maszynie Linuxowej. Dodatkowo jest instrukcja, jak ustawić odbieranie poczty na aliasowanych numerach IP. Dokument został napisany w standardzie ISO-8859-2. Oryginał tego dokumentu znajduje się pod adresem http://home.pacific.net.sg/~harish/linuxipalias.html. </ABSTRACT> <TOC> <SECT>Mój system <P> <ENUM> <ITEM>Najnowsze jądro (2.0.27 - z <HTMLURL URL="ftp://ftp.funet.fi/pub/Linux/kernel/src/v2.0" NAME="ftp://ftp.funet.fi/pub/Linux/kernel/src/v2.0">, ale IP Aliasing działa od 1.3.7x. (Najnowsze jądro w tej chwili to 2.0.33 - przyp. tłum.) <ITEM>IP Alias skompilowany jako moduł. W "make config" powinieneś zaznaczyć, że IP Masquerade powinien być skompilowany jako (M)oduł. Zobacz Modules HOWTO (jeżeli istnieje), lub sprawdź informacje w /usr/src/linux/Documentation/modules.txt. <ITEM>Muszę obsługiwać 2 dodatkowe adresy IP, powyżej tych, które zostały mi przydzielone. <ITEM><HTMLURL URL="http://www.dlink.com" NAME="D-Link"> DE 620 pocket adapter (nie ważne, działa z każdym obsługiwanym przez Linuxa urządzeniem sieciowym). </ENUM> <SECT>Komendy <P> <ENUM> <ITEM>Najpierw załaduj moduł IP Alias (możesz pominąć ten krok, jeżeli wkompilowałeś ten moduł w jądro): <CODE> /sbin/insmod /lib/modules/`uname -r`/ipv4/ip_alias.o </CODE> <ITEM>Po drugie, ustaw pętlę zwrotną (loopback), eth0 i wszystkie numery IP zaczynając głównym numerem dla interfejsu eth0: <CODE> /sbin/ifconfig lo 127.0.0.1 /sbin/ifconfig eth0 up /sbin/ifconfig eth0 172.16.3.1 /sbin/ifconfig eth0:0 172.16.3.10 /sbin/ifconfig eth0:1 172.16.3.100 </CODE> 172.16.3.1 jest głównym IP, a .10 i .100 są aliasami. Magiczne polecenie to eth0:x, gdzie x=0,1,2,...n dla różnych numerów IP. Główny adres IP nie musi być aliasowany. <ITEM>Po trzecie, ustaw routing. Najpierw do pętli zwrotnej, potem do sieci, a na końcu do różnych adresów IP zaczynając domyślnym (pierwotnie przydzielonym): <CODE> /sbin/route add -net 127.0.0.0 /sbin/route add -net 172.16.3.0 dev eth0 /sbin/route add -host 172.16.3.1 dev eth0 /sbin/route add -host 172.16.3.10 dev eth0:0 /sbin/route add -host 172.16.3.100 dev eth0:1 /sbin/route add default gw 172.16.3.200 </CODE> </ENUM> Koniec. Jako przykładowe numery IP powyżej, używam Prywatnych numerów IP (<HTMLURL URL="http://ds.internic.net/rfc/rfc1918.txt" NAME="RFC 1918">) dla zilustrowania przykładu. Zamień je na swoje oficjalne lub prywatne adresy IP. Ten przykład zawiera tylko trzy numery IP. Maksymalna liczba, zdefiniowana w /usr/include/linux/net_alias.h, to 256. 256 adresów IP na JEDNEJ karcie to mnóstwo! :-) Oto, jak wygląda mój /sbin/ifconfig: <CODE> 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:5088 errors:0 dropped:0 overruns:0 TX packets:5088 errors:0 dropped:0 overruns:0 eth0 Link encap:10Mbps Ethernet HWaddr 00:8E:B8:83:19:20 inet addr:172.16.3.1 Bcast:172.16.3.255 Mask:255.255.255.0 UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1 RX packets:334036 errors:0 dropped:0 overruns:0 TX packets:11605 errors:0 dropped:0 overruns:0 Interrupt:7 Base address:0x378 eth0:0 Link encap:10Mbps Ethernet HWaddr 00:8E:B8:83:19:20 inet addr:172.16.3.10 Bcast:172.16.3.255 Mask:255.255.255.0 UP BROADCAST RUNNING MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 TX packets:0 errors:0 dropped:0 overruns:0 eth0:1 Link encap:10Mbps Ethernet HWaddr 00:8E:B8:83:19:20 inet addr:172.16.3.100 Bcast:172.16.3.255 Mask:255.255.255.0 UP BROADCAST RUNNING MTU:1500 Metric:1 RX packets:1 errors:0 dropped:0 overruns:0 TX packets:0 errors:0 dropped:0 overruns:0 </CODE> i /proc/net/aliases: <CODE> device family address eth0:0 2 172.16.3.10 eth0:1 2 172.16.3.100 </CODE> oraz /proc/net/alias_types: <CODE> type name n_attach 2 ip 2 </CODE> Oczywiście rzeczy w /proc/net były utworzone przez komendę ifconfig, a nie ręcznie! <SECT>Pytania i odpowiedzi <P> <IT><BF>Pytanie: Jak mogę utrzymać zmiany, żeby nie uległy skasowaniu po restarcie systemu?</BF></IT> <IT><BF>Odpowiedź:</BF></IT> Jeżeli używasz init'a BSD lub System V (np. RedHat), możesz zawsze załączyć ustawienia w pliku /etc/rc.d/rc.local. Oto, co mam w moim systemie inicjalizującym (RedHat 3.0.3 i 4.0): <ENUM> <ITEM>Mój /etc/rc.d/rc.local: (skrócony, żeby pokazać odpowiednie części) <CODE> #ustawiamy interfejsy aliasów IP echo "Ustawiam aliasy IP 172.16.3.1, 172.16.3.10, 172.16.3.100 ..." /sbin/ifconfig lo 127.0.0.1 /sbin/ifconfig eth0 up /sbin/ifconfig eth0 172.16.3.1 /sbin/ifconfig eth0:0 172.16.3.10 /sbin/ifconfig eth0:1 172.16.3.100 #ustawiamy routing echo "Ustawiam routing IP ..." /sbin/route add -net 127.0.0.0 /sbin/route add -net 172.16.3.0 dev eth0 /sbin/route add -host 172.16.3.1 eth0 /sbin/route add -host 172.16.3.10 eth0:0 /sbin/route add -host 172.16.3.100 eth0:1 /sbin/route add default gw 172.16.3.200 # </CODE> </ENUM> <IT><BF>Pytanie: Jak ustawić aliasowaną maszynę do odbierania e-maili na różne aliasowane numery IP (na maszynie używającej sendmail'a)?</BF></IT> <ENUM> <ITEM><IT><BF>Odpowiedź:</BF></IT> Utwórz (jeżeli nie istnieje) plik nazwany np. /etc/mynames.cw. Nie musi mieć takiej nazwy, nie musi być też w katalogu /etc. <ITEM>W tym pliku umieść oficjalne nazwy domen aliasowanych numerów IP. Jeżeli te IP nie mają domeny, możesz umieścić tu je same. <CODE> /etc/mynames.cw: ---------------- # /etc/mynames.cw - wpisz wszystkie aliasy twojej maszyny; # jest komentarzem. domain.one.net domain.two.com domain.three.org 4.5.6.7 </CODE> <ITEM>W twoim pliku sendmail.cf, w miejscu definiującym makro klasy ,,Fw'', dodaj następujące dane: <CODE> . . . ################## # local info # ################## . . # file containing names of hosts for which we receive email Fw/etc/mynames.cw . . . </CODE> <ITEM>To powinno wystarczyć. Przestestuj nowe ustawienia przez wywołanie sendmaila w trybie testowym, np.: <CODE> ganymede$ /usr/lib/sendmail -bt ADDRESS TEST MODE (ruleset 3 NOT automatically invoked) Enter < ruleset> < address> > 0 me@4.5.6.7 rewrite: ruleset 0 input: me @ 4 . 5 . 6 . 7 rewrite: ruleset 98 input: me @ 4 . 5 . 6 . 7 rewrite: ruleset 98 returns: me @ 4 . 5 . 6 . 7 rewrite: ruleset 97 input: me @ 4 . 5 . 6 . 7 rewrite: ruleset 3 input: me @ 4 . 5 . 6 . 7 rewrite: ruleset 96 input: me < @ 4 . 5 . 6 . 7 > rewrite: ruleset 96 returns: me < @ 4 . 5 . 6 . 7 . > rewrite: ruleset 3 returns: me < @ 4 . 5 . 6 . 7 . > rewrite: ruleset 0 input: me < @ 4 . 5 . 6 . 7 . > rewrite: ruleset 98 input: me < @ 4 . 5 . 6 . 7 . > rewrite: ruleset 98 returns: me < @ 4 . 5 . 6 . 7 . > rewrite: ruleset 0 returns: $# local $: me rewrite: ruleset 97 returns: $# local $: me rewrite: ruleset 0 returns: $# local $: me > 0 me@4.5.6.8 rewrite: ruleset 0 input: me @ 4 . 5 . 6 . 8 rewrite: ruleset 98 input: me @ 4 . 5 . 6 . 8 rewrite: ruleset 98 returns: me @ 4 . 5 . 6 . 8 rewrite: ruleset 97 input: me @ 4 . 5 . 6 . 8 rewrite: ruleset 3 input: me @ 4 . 5 . 6 . 8 rewrite: ruleset 96 input: me < @ 4 . 5 . 6 . 8 > rewrite: ruleset 96 returns: me < @ 4 . 5 . 6 . 8 > rewrite: ruleset 3 returns: me < @ 4 . 5 . 6 . 8 > rewrite: ruleset 0 input: me < @ 4 . 5 . 6 . 8 > rewrite: ruleset 98 input: me < @ 4 . 5 . 6 . 8 > rewrite: ruleset 98 returns: me < @ 4 . 5 . 6 . 8 > rewrite: ruleset 95 input: < > me < @ 4 . 5 . 6 . 8 > rewrite: ruleset 95 returns: me < @ 4 . 5 . 6 . 8 > rewrite: ruleset 0 returns: $# smtp $@ 4 . 5 . 6 . 8 $: me < @ 4 . 5 . 6 . 8 > rewrite: ruleset 97 returns: $# smtp $@ 4 . 5 . 6 . 8 $: me < @ 4 . 5 . 6 . 8 > rewrite: ruleset 0 returns: $# smtp $@ 4 . 5 . 6 . 8 $: me < @ 4 . 5 . 6 . 8 > > </CODE> Zauważ, że kiedy testowałem adres me@4.5.6.7, dostarczył pocztę na maszynę lokalną, a me@4.5.6.8 było przekazane do mailera smtp. To jest poprawna odpowiedź. <ITEM>Wszystko jest teraz ustawione. </ENUM> Mam nadzieję, że było to użyteczne dla kogoś. <SECT>Podziękowania <P> Dziękuję wszystkim, którzy zrobili tyle świetnej pracy nad Linuxen i IP Aliasingiem, a zwłaszcza <HTMLURL URL="mailto:jjciarla@raiz.uncu.edu.ar" NAME="Juanowi Jose Ciarlantowi"> za odpowiedzi na moje pytania. Podziękowania dla asów programowania! Jeżeli ten dokument był dla ciebie użyteczny, lub masz jakieś sugestie o poprawkach, wyślij e-mail na <HTMLURL URL="mailto:h.pillay@ieee.org" NAME="h.pillay@ieee.org">. Baw się. <SECT>Od tłumacza (przeczytaj KONIECZNIE!) <P> Ten dokument był pierwotnie w formie htmlowej (dla niewtajemiczonych - tłumacze z JTZ piszą w SGML), zupełnie niedostosowanej do ,,standardu HOWTO'', więc pozwoliłem sobie go do niego dostosować, m.in. podzielić na sekcje.<NEWLINE> Prawa autorskie tego tłumaczenia należą do <TT>tygrys@fidonet.org.pl</TT>. Jeżeli masz jakieś pytania lub poprawki dotyczące tego tłumaczenia, daj mi znać. </ARTICLE>