TL / DR
Configuré una regla nat estática, de modo que pueda usar mi dirección IP pública de Internet para ingresar directamente en una máquina dedicada en la red interna. Como resultado, ya no puedo ingresar a la máquina dedicada cuando estoy conectado a través de AnyConnect VPN. ¿Por qué? ¿Cómo puedo solucionar esto?
Larga historia:
Tengo un ASA 5512-X que uso para terminar las sesiones de AnyConnect VPN. Esto ha estado funcionando muy bien. Las personas usan AnyConnect para conectarse al ASA, obtienen direcciones IP del grupo de IP especialmente asignado y pueden acceder a todo lo que pongo en las listas de acceso.
Ahora, tengo esta idea de reenviar directamente el puerto 22 a una máquina dedicada en mi red (solo tengo interfaces internas y externas), de modo que pueda SSH en mi dirección IP pública y terminar en la máquina dedicada, sin el requisito de Una conexión VPN.
La configuración parecía bastante simple:
object network MyEndpoint
host 10.0.0.1
nat (inside, outside) static interface service tcp ssh ssh
access-list from_outside_inside extended permit tcp any object MyEndpoint eq ssh
access-group from_outside_inside in interface outside
y en realidad funciona Ahora puedo
ssh ssh.mydomain.com
y de hecho obtener una sesión ssh en mi máquina dedicada. Sin embargo, este éxito tiene un costo que ssh 10.0.0.1
ya no funciona cuando estoy conectado a mi ASA / red a través de AnyConnect como solía hacerlo, antes de configurar la NAT estática.
Puedo controlar de manera determinista el comportamiento del ASA:
Cuando no tengo la nat (inside,outside)
línea en mi configuración,
ssh 10.0.0.1
funciona perossh ssh.mydomain.com
No funciona.
Cuando tengo la nat (inside,outside)
regla como parte de la configuración, es al revés:
ssh ssh.mydomain.com
funciona perossh 10.0.0.1
No funciona.
Para investigar configuré una captura en el ASA
capture MyEndpoint type raw-data interface inside
capture MyEndpoint type raw-data interface outside
capture MyEndpoint match tcp host 10.0.0.1 any
Cuando me conecto por primera vez a través de AnyConnect y luego intento ssh 10.0.0.1
, la captura no muestra / captura nada, siempre que la nat (inside,outside)
regla esté activa. Además, mis intentos de conexión SSH nunca llegan al servidor.
Claramente, el ASA está consumiendo las solicitudes de conexión que se originan en los puntos finales conectados a AnyConnect, cuando la nat
regla está activa.
Al principio pensé que necesitaba agregar algo a la lista de acceso, pero no pude hacerlo funcionar de esa manera. ¿En qué interfaz ingresa el tráfico VPN al ASA? afuera o adentro? Supongo que en este caso no importa, porque estoy usando un comodín ( any
) para la fuente, que, en mi opinión, también incluye el tráfico VPN.
Entonces pensé que el ASA siempre aplicaría el nat, lo que significa que el paquete que lleva el SYN-ACK se conectaría a mi IP externa, lo que interrumpe la conexión, ya que me estoy conectando desde una dirección VPN privada, no desde Internet. Pero los SYN nunca llegan al servidor, por lo tanto, no hay SYN-ACK.
Pasé todo el día deformando mi cabeza alrededor del nat
comando "nuevo" . Cuando hago un show nat
en mi ASA me sale
Auto NAT Policies (Section 2)
1 (inside) to (outside) source static MyEndpoint interface service tcp ssh ssh
translate_hits = 0, untranslate_hits = 0
Hasta donde obtuve hoy, esto solo hace una traducción de la dirección de origen para dejar el tráfico. No tengo idea de cómo / por qué esto implica una traducción de la dirección de destino para el tráfico que se origina en Internet y llega al ASA. ¿Alguien puede explicarme por qué ASA se comporta de esta manera?
Editar 1: packet-tracer
Leyendo a través de las documentaciones me encontré con el comando ASA packet-tracer
. Cuando lo hago
packet-tracer input inside tcp 10.100.0.2 31337 10.0.0.1 22
El ASA me dice que se creará un flujo y se aceptará el paquete. Cuando lo hago
packet-tracer input outside tcp 10.100.0.2 31337 10.0.0.1 22
yo obtengo
Phase: 6
Type: WEBVPN-SVC
Subtype: in
Result: DROP
Config:
Additional Information:
Result:
input-interface: outside
input-status: up
input-line-status: up
output-interface: inside
output-status: up
output-line-status: up
Action: drop
Drop-reason: (acl-drop) Flow is denied by configured rule
Así que supongo que este es un comportamiento implícitamente deseado, excepto si eres yo.
Edición 2: Buscando horquillas
Encontré algunos artículos que eventualmente me señalaron a este prometedor que contenía la información que podría necesitar una regla nat en la línea de
nat (outside,outside) \
source static \
client_vpn_pool client_vpn_pool \
destination static \
remote_office_net remote_office_net
Pero no funcionó. Tengo un objeto de red para mi subred de cliente vpn y un objeto de red para la subred de 10.0.0.1. La adaptación de la plantilla anterior no produjo el resultado esperado.
Cuando mi nat (inside,outside)
regla está en su lugar, SSH no funciona, pero puedo hacer ping 10.0.0.1 muy bien. Cuando agrego una nat (outside,ouside)
regla como lo sugiere el artículo, el ping deja de funcionar. También probé versiones de la regla externa con objetos de red para el host específico y solo el rango de los ip local pool
utilizados para clientes vpn. Todos simplemente hacen que el ping se detenga.
Edición 3: no importa
Está funcionando ahora. Literalmente no cambié nada. Me acabo de acostar. Supongo que hubo un estado interno en el ASA que causó este comportamiento y expiró mientras dormía.
Todavía hay algo que cuando uso el packet-tracer input [inside|outside] tcp <my vpn ip> 31337 10.0.0.1 22
paquete-trazador siempre dice que el paquete se descartará.
Cuando lo pongo packet-tracer input inside
falla en:
Phase: 6
Type: WEBVPN-SVC
Subtype: in
Result: DROP
Config:
Additional Information:
[...]
Drop-reason: (acl-drop) Flow is denied by configured rule
y cuando lo pongo packet-tracer input outside
falla en:
Phase: 6
Type: NAT
Subtype: rpf-check
Result: DROP
Config:
object network MyEndpoint
nat (inside,outside) static interface service tcp ssh ssh
Additional Information:
[...]
Drop-reason: (acl-drop) Flow is denied by configured rule
Sin embargo, a partir de hoy, hacer ping y SSH a / desde mi computadora portátil conectada a VPN a MyEndpoint (también conocido como 10.0.0.1) funciona de maravilla. ¿Cómo funciona esta cosa ASA?