Come portare l'unico IP statico dell' ADSL sulla macchina Linux

Lo scopo di questa configurazione e` disporre dell'unico indirizzo IP statico pubblico fornito dal provider ADSL sull'interfaccia WAN del firewall Linux, senza usare il NAT sul router.

Specifiche

Questa configurazione e` stata provata con:

Immagino che con alcuni aggiustamenti possa funzionare con altri router o con adsl che usano il PPPoA (questa la vedo piu` dura).

Principio di funzionamento

Si configura il router per non fare NAT (o SUA come lo chiama lo zyxel) ma per routare i pacchetti e basta. Il router in questa configurazione non disporra` di un indirizzo IP pubblico, in quanto l'unico indirizzo pubblico lo daremo al pc con linux. Fra il router e la macchina Linux si usera` una rete privata di appoggio che verra` usata solo per permettere al router e al PC con Linux di comunicare fra di loro, e su questa rete si mettono delle route statiche (sia sul router che sul PC) che consentono di instradare correttamente i pacchetti verso internet e verso l'unico indirizzo IP pubbblico a noi assegnato.

Questo esempio assume che il router e il pc condividano una rete privata (usata SOLO per comunicare fra i due, e non per eventuali altri pc) con indirizzo 192.168.254.0/24. L'indirizzo pubblico fornitomi dal provider e` 213.199.31.71. L'indirizzo privato del router e` 192.168.254.1 e quello del PC e` 192.168.254.2. Sul PC uso l'interfaccia eth1 per comunicare con il router.

Configurazione del router Zyxel

Disponendo di una seriale sul router, e` meglio usare questa per configurarlo, in quanto e` facile tagliarsi fuori dal router nel fare questa configurazione. Se non c'e`, si fa lo stesso, pero` e` piu` difficile.

      Menu 3.2 - TCP/IP and DHCP Ethernet Setup

                    DHCP Setup
                      DHCP= None
                      Client IP Pool Starting Address= N/A
                      Size of Client IP Pool= N/A
                      Primary DNS Server= N/A
                      Secondary DNS Server= N/A
                      Remote DHCP Server= N/A
                    TCP/IP Setup:
                      IP Address= 192.168.254.1
                      IP Subnet Mask= 255.255.255.0
                      RIP Direction= None
                        Version= N/A
                      Multicast= None
                      IP Policies=
                      Edit IP Alias= No

      Menu 4 - Internet Access Setup

                    ISP's Name= atlanet
                    Encapsulation= RFC 1483
                    Multiplexing= LLC-based
                    VPI #= 8
                    VCI #= 35
                    Service Name= N/A
                    My Login= N/A
                    My Password= N/A
                    Single User Account= No
                    IP Address Assignment= N/A
                      IP Address= N/A
                    ENET ENCAP Gateway= N/A

     Menu 12.1.1 - Edit IP Static Route

                    Route #: 1
                    Route Name= ip_stat
                    Active= Yes
                    Destination IP Address= 213.199.31.71
                    IP Subnet Mask= 255.255.255.255
                    Gateway IP Address= 192.168.254.2
                    Metric= 1
                    Private= Yes

Dest            FF Len Interface  Gateway         Metric stat Timer  Use
213.199.31.71   00 32  enif0      192.168.254.2     1    001b 0      40
192.168.254.0   00 24  enif0      192.168.254.1     1    041b 0      0
default         00 0   wanif0     atlanet           2    00ab 0      84

Questo dice che la rete 192.168.254.0/24 (LAN) e` diretta verso l'interfaccia enif0 (ethernet locale) e che il gateway e` l'indirizzo IP della ethernet, appunto. Poi, dice che l'indirizzo pubblico in nostro possesso (213.199.31.71) e` diretto verso il PC linux (che e` il 192.168.254.2). Inoltre, il routing di default (0/0) e` diretto verso il provider "atlanet" (il nome e` quello impostato nel menu` 4) a mezzo della interfaccia wanif0.

Prima di procedere, occorre conoscere il MAC address della interfaccia ethernet del router... per scoprire qual'e`, il modo piu` semplice e` guardare sotto al router, e segnarselo.

La configurazione del router e` finita, passiamo al PC.

Configurazione del router PC Linux

auto eth1
iface eth1 inet static
        address 213.199.31.71
        gateway 192.168.254.1
        netmask 255.255.255.255
        pointopoint 192.168.254.1
        -multicast (su sarge togliere questa riga)
        -broadcast (su sarge togliere questa riga)
        up  arp -s 192.168.254.1 00:A0:C5:45:A0:E3 (questo e` il MAC address del router)

auto eth1:0
iface eth1:0 inet static
        address 192.168.254.2
        netmask 255.255.255.0

Questa strana configurazione, che ammetto di avere individuato molto a naso, consente di mandare tutti i propri pacchetti fuori da eth1 con l'indirizzo di partenza 213.199.31.71 (l'ip pubblico), e di dirigerli al 192.168.254.1 (ethernet del router).

Inoltre, l'alias 192.168.254.2 consentira` poi di ricevere indietro il traffico dal router, perche` e` quello l'indirizzo verso il quale dico al router di mandare i pacchetti. Si sarebbe potuto semplificare tutto se il router accettasse un routing diretto verso una interfaccia fisica anziche` un indirizzo IP, ma non lo accetta.

Conclusioni

Ora non resta che provare se tutto funziona. Ping e telnet al 192.168.245.1 (il router) dovrebbero funzionare (ovviamente solo dal pc linux e non da fuori), cosi` come dovrebbe essere possibile pingare anche qualsiasi macchina su internet.

Debugging

Se non va, provate a spegnere e riaccendere il router, che ogni tanto sembra che non prenda tutti i settaggi fino a che non lo si riavvia. Se prima di fare questa configurazione il router era usato con il NAT, e` opportuno cancellare completamente la configurazione del provider e rifarla da zero.

Lato Linux, questo e` l'output dei comandi "ifconfig", "route" e "arp" in un setup funzionante.

casa:~# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:A0:C9:B0:07:F6
          inet addr:10.1.42.254  Bcast:10.1.42.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:7078037 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8684944 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:3513869470 (3.2 GiB)  TX bytes:1012338953 (965.4 MiB)
          Interrupt:11 Base address:0x4000

eth1      Link encap:Ethernet  HWaddr 00:01:02:D1:18:10
          inet addr:213.199.31.71  Bcast:213.199.31.255  Mask:255.255.255.255
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:118459 errors:0 dropped:0 overruns:0 frame:0
          TX packets:85036 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:89736006 (85.5 MiB)  TX bytes:7369136 (7.0 MiB)
          Interrupt:11 Base address:0xcc00

eth1:0    Link encap:Ethernet  HWaddr 00:01:02:D1:18:10
          inet addr:192.168.254.2  Bcast:192.168.254.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:11 Base address:0xcc00

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:3924  Metric:1
          RX packets:67068 errors:0 dropped:0 overruns:0 frame:0
          TX packets:67068 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:25178573 (24.0 MiB)  TX bytes:25178573 (24.0 MiB)

Qui si notano le interfacce eth1 e eth1:0 con le configurazioni dell'ip pubblico e dell' IP privato usato per comunicare con il router Zyxel.

casa:~# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.254.1   *               255.255.255.255 UH    0      0        0 eth1
localnet        *               255.255.255.0   U     0      0        0 eth0
192.168.254.0   *               255.255.255.0   U     0      0        0 eth1
default         192.168.254.1   0.0.0.0         UG    0      0        0 eth1

Qui si nota che il routing di default e` diretto a 192.168.254.1, indirizzo IP dell'interfaccia ethernet del router.

casa:~# arp
Address                  HWtype  HWaddress           Flags Mask            Iface
lambrusco.kurgan.it      ether   00:E0:18:B7:61:39   C                     eth0
192.168.254.1            ether   00:A0:C5:45:A0:E3   CM                    eth1
10.1.42.10               ether   00:08:74:3D:33:3C   C                     eth0

Qui si nota che nella tabella ARP c'e` una entry fissa (flags "CM") che lega l'indirizzo IP del router al suo MAC address.

Se ancora non funziona, e` opportuno lanciare ethereal o tethereal o tcpdump sulla interfaccia WAN del pc Linux, e poi provare a pingare il router prima e qualche indirizzo su internet dopo. Pingando il router, si dovrebbe vedere il traffico in uscita che ha come indirizzo del mittente quello pubblico e come indirizzo di destinazione quello privato del router, e le relative risposte. Se invece le risposte non tornano, e` probabile che sul router il routing statico non sia impostato correttamente, e che i pacchetti di risposta stiano uscendo verso la ADSL anziche` tornare indietro.

Una volta che il ping al router funziona, dovrebbe funzionare anche il ping a qualsiasi host su internet.

LinuxDebian/IpStatico (last edited 2009-04-12 17:33:24 by localhost)