# 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ć.