IP Alias mini HOWTO

Autor: Harish Pillay h.pillay@ieee.org
v?, 13 Stycznia 1997
Wersja polska: Leszek Urbañski tygrys@fidonet.org.pl
v1.0, 5 Kwietnia 1998


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.

1. Mój system

  1. Najnowsze jądro (2.0.27 - z 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.)
  2. 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.
  3. Muszê obsługiwaæ 2 dodatkowe adresy IP, powyżej tych, które zostały mi przydzielone.
  4. D-Link DE 620 pocket adapter (nie ważne, działa z każdym obsługiwanym przez Linuxa urządzeniem sieciowym).

2. Komendy

  1. Najpierw załaduj moduł IP Alias (możesz pominąæ ten krok, jeżeli wkompilowałeś ten moduł w jądro):
    /sbin/insmod /lib/modules/`uname -r`/ipv4/ip_alias.o 
    

  2. Po drugie, ustaw pêtlê zwrotną (loopback), eth0 i wszystkie numery IP zaczynając głównym numerem dla interfejsu eth0:
    /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
    

    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.
  3. 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):
    /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 
    

Koniec.

Jako przykładowe numery IP powyżej, używam Prywatnych numerów IP ( 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:


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

i /proc/net/aliases:


device           family address                                
eth0:0           2      172.16.3.10                        
eth0:1           2      172.16.3.100

oraz /proc/net/alias_types:


type    name            n_attach
2       ip              2   

Oczywiście rzeczy w /proc/net były utworzone przez komendê ifconfig, a nie rêcznie!

3. Pytania i odpowiedzi

Pytanie: Jak mogê utrzymaæ zmiany, żeby nie uległy skasowaniu po restarcie systemu?

Odpowiedź: 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):

  1. Mój /etc/rc.d/rc.local: (skrócony, żeby pokazaæ odpowiednie czêści)
    #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 
    #
    

Pytanie: Jak ustawiæ aliasowaną maszynê do odbierania e-maili na różne aliasowane numery IP (na maszynie używającej sendmail'a)?

  1. Odpowiedź: Utwórz (jeżeli nie istnieje) plik nazwany np. /etc/mynames.cw. Nie musi mieæ takiej nazwy, nie musi byæ też w katalogu /etc.
  2. 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.
    /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
    

  3. W twoim pliku sendmail.cf, w miejscu definiującym makro klasy ,,Fw'', dodaj nastêpujące dane:
    .
    .
    .
    ##################
    #   local info   #
    ##################
    .
    .
    # file containing names of hosts for which we receive email
    Fw/etc/mynames.cw
    .
    .
    .
    

  4. To powinno wystarczyæ. Przestestuj nowe ustawienia przez wywołanie sendmaila w trybie testowym, np.:
    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 >
    > 
    

    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ź.
  5. Wszystko jest teraz ustawione.

Mam nadziejê, że było to użyteczne dla kogoś.

4. Podziêkowania

Dziêkujê wszystkim, którzy zrobili tyle świetnej pracy nad Linuxen i IP Aliasingiem, a zwłaszcza 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 h.pillay@ieee.org.

Baw siê.

5. Od tłumacza (przeczytaj KONIECZNIE!)

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.
Prawa autorskie tego tłumaczenia należą do tygrys@fidonet.org.pl. Jeżeli masz jakieś pytania lub poprawki dotyczące tego tłumaczenia, daj mi znaæ.