Strano problema DNS con SOHO97

Tutto ciò che ha a che fare con la configurazione di apparati Cisco (e non rientra nelle altre categorie)

Moderatore: Federico.Lagni

Rispondi
mik.linux
Cisco fan
Messaggi: 28
Iscritto il: mer 15 ott , 2008 8:14 pm

Ciao a tutti,
come da oggetto, ho uno strano problema con il mio SOHO97
(Cisco IOS Software, SOHO97 Software (SOHO97-K9OY1-M), Version 12.3(7)T6, RELEASE SOFTWARE (fc2))

Il router è configurato per fare nat statico al mio server linux che a sua volta fa nat verso la rete interna. In pratica è una cosa così:

Codice: Seleziona tutto

                                           +--> [PC 1]
                                           |
[ SOHO 97 ] <--NAT--> [ LINUX BOX ] <-NAT--+--> [PC 2]
                                           |
                                           +--> [PC 3]
Visto che non ho ip statico, ho configurato un dns dinamico (prendiamo mio.dyndns.org).

Gli indirizzi dei vari apparati sono i seguenti:
SOHO 97: 192.168.9.2
LINUX BOX: 192.168.9.1
IP PUBBLICO SOHO97: 80.1.2.3 (esempio)

Dalla mia macchina linux se provo a fare una query dns su mio.dyndns.org ecco quello che ottengo:

Codice: Seleziona tutto

root@linuxbox:~# host mio.dyndns.org
mio.dyndns.org has address 192.168.9.1
Come avete notato l'ip che viene risolto (192.168.9.1) è lo stesso interno della box linux anzichè essere l'ip pubblico (come sarebbe stato logico).
Stessa cosa dalle macchine interne (dietro il nat della macchina linux).

Se provo invece a farla in modalità TCP funziona!

Codice: Seleziona tutto

root@linuxbox:~# host -T mio.dyndns.org
mio.dyndns.org has address 80.1.2.3
Se invece provo a fare un reverse lookup sul mio ip pubblico ottengo un errore strano:

Codice: Seleziona tutto

root@linuxbox:~# host 80.1.2.3
;; Got bad packet: bad label type
191 bytes
5d 3f 81 80 00 01 00 01 00 02 00 02 01 31 01 39
03 31 36 38 03 31 39 32 07 69 6e 2d 61 64 64 72
04 61 72 70 61 00 00 0c 00 01 c0 0c 00 0c 00 01
00 00 94 4a 00 33 11 68 6f 73 74 37 35 2d 33 35
2d 64 79 6e 61 6d 69 63 07 33 32 2d 37 39 2d 72
06 72 65 74 61 69 6c 0d 74 65 6c 65 63 6f 6d 69
74 61 6c 69 61 02 69 74 00 c0 0f 00 02 00 01 00
00 94 4a 00 16 05 64 6e 73 74 33 0d 69 6e 74 65
72 62 75 73 69 6e 65 73 73 c0 65 c0 0f 00 02 00
01 00 00 94 4a 00 08 05 64 6e 73 74 69 c0 7b c0
75 00 01 00 01 00 00 05 07 00 04 50 16 34 81 c0
97 00 01 00 01 00 00 05 07 00 04 97 63 7d 05
Anche qui, se la query viene effettuata in modalità TCP funziona correttamente, restituendo host-123.dynamic..blabla..telecom.it

Secondo me è un bug dello IOS che sto utilizzando (credo! non essendo esperto in materia) che come vede il suo ip pubblico in una richiesta dns, tende a sostituirlo con l'ip interno - non mi chiedete perchè :)

Lo scopo della configurazione del router era fare in modo che tutto il traffico proveniente da internet venga rigirato alla macchina linux tutto qui. Ho sbagliato qualcosa nella configurazione?

Vi allego anche la configurazione del mio router:

Codice: Seleziona tutto

!
version 12.3
no service pad
service timestamps debug datetime msec localtime
service timestamps log datetime localtime
service password-encryption
!
hostname soho97
!
boot-start-marker
boot system flash
boot system flash soho97-k9oy1-mz.123-7.T6.bin
boot-end-marker
!
memory-size iomem 5
logging buffered warnings
no logging console
no logging monitor
enable secret 5 <PWD MD5>
!
username <USERNAME> privilege 15 secret 5 <PWD MD5>
ip subnet-zero
no ip domain lookup
ip name-server 212.216.112.112
!
!
!
!
!
no crypto isakmp enable
!
!
!
interface Loopback0
 no ip address
!
interface Ethernet0
 ip address 192.168.9.2 255.255.255.0
 ip nat inside
 no ip mroute-cache
 hold-queue 100 out
!
interface ATM0
 no ip address
 no atm ilmi-keepalive
 dsl operating-mode auto
 pvc 8/35
  encapsulation aal5snap
  protocol ppp dialer
  dialer pool-member 1
 !
!
interface Dialer0
 ip address negotiated
 ip nat outside
 encapsulation ppp
 dialer pool 1
 ppp authentication pap callin
 ppp pap sent-username aliceadsl password 7 060703284F4B081D161B
!
interface Dialer1
 no ip address
!
ip classless
ip route 0.0.0.0 0.0.0.0 Dialer0
no ip http server
no ip http secure-server
ip nat translation timeout 3600
ip nat translation tcp-timeout 3600
ip nat translation max-entries 3000
ip nat inside source list 100 interface Dialer0 overload
ip nat inside source static 192.168.9.1 interface Dialer0
!
!
logging trap debugging
logging 192.168.9.1
access-list 100 permit ip 192.168.9.0 0.0.0.255 any
!
control-plane
!
!
line con 0
 password 7 XXXXXXXXXXXXXXXXXXXXXXX
 login
 no modem enable
 transport preferred all

 transport output all
 stopbits 1
line aux 0
 transport preferred all
 transport output all
 stopbits 1
line vty 0 4
 exec-timeout 120 0
 privilege level 15
 password 7 XXXXXXXXXXXXXXXXXXXXXX
 login local
 length 0
 transport preferred telnet
 transport input telnet
 transport output telnet
!
scheduler max-task-time 5000
!
end
Avatar utente
xanio
Cisco power user
Messaggi: 113
Iscritto il: mar 24 giu , 2008 11:21 am
Località: Messina
Contatta:

Per quello che so, è normale che avvenga una cosa del genere, se dall'interno cerchi di contattare il tuo apparato, i pacchetti arriveranno al router che a sua volta sa che è lui e li rimanda indietro, ovviamente a causa del doppio nat ti ritrovi la risoluzione dell'ip della linux box.

Dall'esterno la cosa è diversa è arriveresti direttamente al server linux.

Per quanto riguarda l'errore non saprei non mi è mai capito.

CMQ osservazione, perchè DynDNS non lo configuri sul router?

facci sapere.
[ Gnu/Linux The Power of UnderGround Knowledge ]
[ W3:http://www.nemesilabs.org - PGPKey: 0x70046843 ]
[ BC4E ABD0 E2BB 1E88 5595 8C5F 09A9 3D98 7004 6843 ]
mik.linux
Cisco fan
Messaggi: 28
Iscritto il: mer 15 ott , 2008 8:14 pm

Ciao,
grazie per la risposta.
Il dyndns non lo configuro sul router perchè la mia ios 12.3 non lo supporta, infatti attualmente lo aggiorna la macchina linux con uno script che mi sono scritto io e funziona egregiamente da qualche anno. E poi... l'updater dyndns dei cisco supporta anche dtdns.com ?

Unmm.. tu dici che sia colpa del doppio NAT? Quindi - teoricamente - se ci provo un altro router dovrebbe comportarsi allo stesso modo? Rimane comunque il fatto del perchè funziona in modalità TCP...

Non c'è un altro modo per fargli fare quello che serve a me?
Unica cosa: vorrei evitare di fare il forward delle porte direttamente dal router (anche se so che così funziona sicuro), perchè dovrei forwardare anche range da 10000 porte udp (rtp di asterisk) e *mi piacerebbe* che fosse la macchina linux a filtrare le connessioni entranti.

Allora.. c'è un altro modo? o devo comprare un modem ADSL PCI da mettere sulla box linux? :D

Grazie
Avatar utente
xanio
Cisco power user
Messaggi: 113
Iscritto il: mar 24 giu , 2008 11:21 am
Località: Messina
Contatta:

allora per quanto riguarda puoi fare un nat 1 a 1 e sputi tutto il traffico sul server linux e poi fai filtrare il tutto a lui, ma io preferisco sempre far fare un pre-filtraggio al router (se è possibile).


Per quanto riguarda il resto è tutto normale.

Cmq secondo me dopo che hai un apparato cisco, far fare il suo ad un'altra cose non va bene.

Il router cisco fa routing! perche cambiarlo con qualcoda che PUO' fare PURE il routing?
[ Gnu/Linux The Power of UnderGround Knowledge ]
[ W3:http://www.nemesilabs.org - PGPKey: 0x70046843 ]
[ BC4E ABD0 E2BB 1E88 5595 8C5F 09A9 3D98 7004 6843 ]
mik.linux
Cisco fan
Messaggi: 28
Iscritto il: mer 15 ott , 2008 8:14 pm

Beh, l'idea era, come ti avevo detto, di avere quel server che fosse direttamente raggiungibile dall'esterno e fargli fare da firewall. So che è un po' un casino col doppio nat, ma tramite linux ho più controllo sul traffico, posso fare packet inspection (ad esempio filtrare il p2p col modulo ipp2p di iptables) o impostare ad esempio il QoS, cosa che non credo sia possibile con un routerino che è questo SOHO97 (magari il QoS si).

Attualmente la mia configurazione di rete (completa) è questa:

Codice: Seleziona tutto

[ LINUX ] - eth0 <- 192.168.9.0  -> [ SOHO97 ] <--> (internet)
          - eth1 <- 192.168.10.0 -> [ RETE LAN ]
          - eth2 <- 192.168.11.0 -> [ RETE WLAN ]
Visto che non posso assegnare un ip diverso alle varie porte del router (ha solo l'interfaccia ethernet0) non posso gestire nè le vlan nè impostare un ip diverso su ogni porta..

Nat 1 a 1 mi sa che non lo posso fare, serve un ip statico per questo, mi sbaglio? Senno' ogni volta che cambia ip devo loggarmi sul router e cambiare la regola, no?

Sono sempre più convinto che a questo punto debba mettere un modem PCI (trovarne uno compatibile con linux) in modo che abbia direttamente ip pubblico e facendo un solo nat per la rete interna...
mik.linux
Cisco fan
Messaggi: 28
Iscritto il: mer 15 ott , 2008 8:14 pm

Ok la FAQ sul sito di cisco ha chiarito un po' la situazione.
http://www.cisco.com/en/US/tech/tk648/t ... shtml#qa31

Codice: Seleziona tutto

Q. Does Cisco IOS NAT support Domain Name System (DNS) queries?

A. Yes. Cisco IOS NAT will translate the addresses that appear in DNS responses to name lookups (A queries) and inverse lookups (PTR queries). Therefore, if an outside host sends a name lookup to a DNS server on the inside, and that server responds with a local address, the NAT code will translate that local address to a global address. The opposite is also true. This is how Cisco supports IP addresses overlapping: an inside host queries an outside DNS server and the response contains an address that matches the access list specified on the outside source command, so the code translates the outside global address to an outside local address.

Time-to-live (TTL) values on all DNS resource records, which receive address translations in resource records payloads, are automatically set to zero.

Cisco IOS NAT does not translate IP addresses embedded in DNS zone transfers.
PS: ho aggiornato la ios ad una versione 12.4 e provando a fare una query inversa sul mio ip pubblico sembra funzionare correttamente e non da più quell'errore.
Rispondi