Problemas para publicar un servicio en internet con dos ISP

Fecha: 30 octubre del 2018

 

Escenario

 

Este escenario se plantea debido a un servicio que debe ser publicado en internet a traves de dos ISP.

Generalmente la solución a esto es a traves de BGP y un sistema autónomo, pero en infraestructuras

mas chicas esto no es posible.

La dificultad consiste en que el server que presta el servicio correspondiente tiene un solo gateway,

en este caso 192.168.1.1 y publicará por la IP 200.45.0.1, y a su vez este router, como la mayoría de los

routers tiene una default route.

Un segundo router tiene la IP interna 192.168.1.2 y publica por la IP 200.69.0.1, pero el servidor tiene

su gateway apuntando a 192.168.1.1, por lo que aquí se plantea el problema: las peticiones a 200.69.0.1

llegarán al servidor y este responderá por 192.168.1.1 convirtiendose (nateandose) en 200.45.0.1,

lo que hará la conexión TCP inicial nunca suceda. Aunque la sesión NAT entrante no sucedió por lo que

tampoco se realizaría.

Para solucionar este problema deberemos recurrir a la magia del NAT.

 

1.- Verificación inicial:

                               1.1.- Verificación del gateway del server:

 

1.2.- Verificación de acceso vía 200.45.0.1:

!

ip nat inside source static tcp 192.168.1.10 80 200.45.0.1 80

!

ip route 0.0.0.0 0.0.0.0 200.45.0.2

!

1.3.- Verificación de acceso vía 200.69.0.1:

!

ip nat inside source static tcp 192.168.1.10 80 200.69.0.1 80

!

ip route 0.0.0.0 0.0.0.0 200.69.0.2

!

1.4.- Cambiamos el gateway para tener acceso vía 200.69.0.1:

Las respuestas del servidor se reenviarán por el router 2 (192.168.1.2/200.69.0.1).

1.5.- Verificación de acceso vía 200.69.0.1:

1.3.- Verificación de acceso vía 200.45.0.1:

2.- Se crea un mecanismo de NAT para enmarcarar las IP de origen y diferenciar lo que llega por un ISP y otro:

 

2.1.- Router-2:

 

2.1.1.- Generamos un pool de direcciones dummies:

 

Estas direcciones enmascaran la dirección original de los hosts de internet - sean cual sean –

para que Router-1 tenga la capacidad de diferenciar lo que llega por un ISP u otro.

 

ip nat pool NAT-SRC 172.16.0.1 172.31.255.254 netmask 255.240.0.0 (esto aplica al rango 172.16.0.0/12 del RFC 1918)

 

2.1.2.- Generamos una ACL de direcciones de origen para aplicar a un NAT:

 

Al tratarse de direcciones de internet aplica el argumento any y por ser de sólo origen aplica una ACL standard.

 

access-list 10 permit any

 

2.1.3- Generamos una regla de NAT que aplica a la interface outside (generalmente es al revés):

 

ip nat outside source list 10 pool NAT-SRC

 

2.2.- Router-1:

 

2.2.1.- Se configura una ruta para alcanzar las direcciones dummies generadas por el NAT

basado en el origen de las direcciones remotas.

 

O sea, todo lo que llegue por ISP_2 (200.69.0.1) se convertirá en 172.16.x.x/12 y luego se natea la IP 200.69.0.1 en

192.168.1.10, cuando el server responda a 172.16.x.x utilizando el gateway 192.168.1.1, este reenviará a 192.168.1.2.

Luego Router-2 al recibir el paquete lo traducirá de 192.168.1.10 a 200.69.01 y 172.16.x.x a la IP pública de origen

que corresponda (en esta maqueta es 200.69.0.2).

 

ip route 172.16.0.0 255.240.0.0 192.168.1.2

 

                2.3.- Verificación:

 

3.- Verificación con equipo real:

 

Se realiza la verificación para descartar que sea una “casualidad” de Packet Tracer.

 

3.1.- Verificación preliminar:

 

Router-2#sh ip nat trans

Pro    Inside global       Inside local                Outside local      Outside global

--- ---                ---           172.16.0.1                200.69.0.2

--- ---                ---           172.16.0.2                192.168.1.1

icmp 200.69.0.1:1       192.168.1.10:1        200.69.0.2:1       200.69.0.2:1

tcp    200.69.0.1:80     192.168.1.10:80      ---                ---

Router-2#

 

3.2.- Se abre una sesión Winbox desde adentro hacia afuera para probar el PAT:

 

Router-2#sh ip nat translations

Pro  Inside global           Inside local                  Outside local          Outside global

--- ---                ---             172.16.0.1                   200.69.0.2

--- ---                ---             172.16.0.2                   192.168.1.1

tcp 200.69.0.1:80          192.168.1.10:80         ---                ---

tcp 200.69.0.1:58269   192.168.1.10:58269 200.69.0.2:8291    200.69.0.2:8291

       |                                 |                                    |

       (origen nateado)     (origen)                        (destino)

Router-2#

 

Resultado del debug nat:

 

Router-2#debug ip nat

IP NAT debugging is on

Router-2#

*Mar  1 01:36:43.891: NAT*: s=192.168.1.10->200.69.0.1, d=200.69.0.2 [398]

*Mar  1 01:36:43.891: NAT*: s=200.69.0.2, d=200.69.0.1->192.168.1.10 [0]

*Mar  1 01:36:43.895: NAT*: s=192.168.1.10->200.69.0.1, d=200.69.0.2 [399]

*Mar  1 01:36:43.911: NAT*: s=192.168.1.10->200.69.0.1, d=200.69.0.2 [400]

*Mar  1 01:36:43.911: NAT*: s=200.69.0.2, d=200.69.0.1->192.168.1.10 [1351]

*Mar  1 01:36:43.911: NAT*: s=200.69.0.2, d=200.69.0.1->192.168.1.10 [1352]

*Mar  1 01:36:44.039: NAT*: s=192.168.1.10->200.69.0.1, d=200.69.0.2 [401]

*Mar  1 01:36:44.039: NAT*: s=200.69.0.2, d=200.69.0.1->192.168.1.10 [1353]

*Mar  1 01:36:44.043: NAT*: s=192.168.1.10->200.69.0.1, d=200.69.0.2 [402]

*Mar  1 01:36:44.047: NAT*: s=200.69.0.2, d=200.69.0.1->192.168.1.10 [1354]

*Mar  1 01:36:44.047: NAT*: s=192.168.1.10->200.69.0.1, d=200.69.0.2 [403]

---omitido---

Router-2#

 

3.3.- Se abre una sesión desde afuera:

 

Router-2#sh ip nat trans

Pro Inside global            Inside local                 Outside local           Outside global

--- ---                ---            172.16.0.1                  200.69.0.2

--- ---                ---            172.16.0.2                  192.168.0.1

tcp 200.69.0.1:80         192.168.1.10:80        172.16.0.1:34978  200.69.0.2:34978

      |                                 |                                    |                                |

       (destino)                  (destino nateado)      (origen nateado)   (origen)

tcp 200.69.0.1:80         192.168.1.10:80         ---                ---

tcp 200.69.0.1:58515  192.168.1.10:58515 200.69.0.2:8291    200.69.0.2:8291

       |                                 |                                    |

       (origen nateado)     (origen)                        (destino)

Router-2#

 

Tráfico de ida:

 

*Mar  1 01:33:44.795: NAT*: s=200.69.0.2->172.16.0.2, d=200.69.0.1 [13]

*Mar  1 01:33:44.795: NAT*: s=172.16.0.2, d=200.69.0.1->192.168.1.10 [13]

 

Tráfico de retorno:

 

*Mar  1 01:33:44.799: NAT*: s=192.168.1.10->200.69.0.1, d=172.16.0.2 [317]

*Mar  1 01:33:44.799: NAT*: s=200.69.0.1, d=172.16.0.2->200.69.0.2 [317]

---omitido---

Router-2#

 

3.4.- Verificación en el servidor:

 

C:\>netstat -na

 

Conexiones activas

 

  Proto  Dirección local              Dirección remota     Estado

---omitido---

  TCP    192.168.1.10:80            172.16.0.2:34978   ESTABLISHED (sesión entrante)

                                                       |

                                                       es el mismo equipo con (arriba) y sin NAT (abajo)

                                                       |

  TCP    192.168.1.10:58515     200.69.0.2:8291      ESTABLISHED (sesión saliente)

---omitido---

C:\>

 

4.- Configuración de los routers:

 

Router-2#sh runn (sólo lo mas relevante)

Building configuration...

 

Current configuration : 1334 bytes

!

version 12.4

!

hostname Router-1

!

interface FastEthernet0/0

 ip address 192.168.1.1 255.255.255.0

 ip nat inside

!

interface FastEthernet1/0

 ip address 200.45.0.1 255.255.255.252

 ip nat outside

!

ip route 0.0.0.0 0.0.0.0 200.45.0.2

ip route 172.16.0.0 255.240.0.0 192.168.1.2 (ruta para alcanzar las IP dummies de Router-2)

!

ip nat inside source list 10 interface FastEthernet1/0 overload (src PAT saliente)

ip nat inside source static tcp 192.168.1.10 80 200.45.0.1 80 extendable (dst NAT entrante)

!

access-list 10 permit 192.168.0.0 0.0.0.255 (utilizado en src PAT saliente)

!

end

 

Router-1#

 

Router-2#sh runn (sólo lo mas relevante)

Building configuration...

 

Current configuration : 1357 bytes

!

version 12.4

!

hostname Router-2

!

interface FastEthernet0/0

 ip address 192.168.1.2 255.255.255.0

 ip nat inside

!

interface FastEthernet1/0

 ip address 200.69.0.1 255.255.255.252

 ip nat outside

!

ip route 0.0.0.0 0.0.0.0 200.69.0.2

!

ip nat pool NAT 172.16.0.1 172.23.255.254 netmask 255.240.0.0 (rango IP para src NAT entrante)

ip nat inside source list 20 interface FastEthernet1/0 overload (src PAT saliente)

ip nat inside source static tcp 192.168.1.10 80 200.69.0.1 80 extendable (dst NAT entrante)

ip nat outside source list 10 pool NAT (src NAT entrante, ver que aplica a outside)

!

!

access-list 10 permit any (utilizado en src NAT entrante)

access-list 20 permit 192.168.0.0 0.0.0.255 (utilizado en src PAT saliente)

!

end

 

Router-2#

 

(2018) Drugs cause us to  see packets everywhere

Rosario, Argentina