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