
No estoy seguro de si debería preguntar esto en Unix y Linux o en Ingeniería de Redes.
Aquí está el escenario físico.
[Host 1]----[NAT de nivel de operador]---->AWS<----[NAT de nivel de operador]----[Host 2]
Anfitrión 1yAnfitrión 2se realizan con ssh inverso (autossh) en una AWS Box, por lo que tienen conectividad de shell si es necesario y la posibilidad de exponer cualquier otro puerto si es necesario.
Anfitrión 2empuja los volcados de copia de seguridad aAnfitrión 1utilizando SCP de forma regular. En realidad hayAnfitrión2 X 10cajas que empujan los volcados de datos. La ubicación de AWS más cercana está bastante lejos de la ubicación de las cajas, por lo que la latencia es bastante alta.
¿Existe la posibilidad de utilizar la caja de AWS como punto de encuentro para negociar un túnel ssh entre las cajas? Conozco los corredores de túneles IPv6, pero los ISP de la región aún no los han adoptado (20 años de retraso... ¡duh!). Estoy explorando una solución basada en:
- Perforación TCP / UDP (con implementación práctica)
- Servicio UPnP/NAT-PMP en AWS
- Usando herramientas como Chrome Remote Desktop, hackéelo para exponer el puerto SSH en lugar de VNC
- Cualquier otro servicio de enrutador.
- Cualquier otro enfoque práctico.
Las cajas ejecutan CentOS 6/7 en su mayoría.
Respuesta1
Sin embargo, no es exactamente lo que necesita: puede exponer el puerto local invertido host1 o host2 como un puerto externo usando iptables. Entonces digamos que conectó su host2 como un túnel invertido ssh:
user2@host2 $ ssh -R 9999:localhost:22 [email protected]
Ahora puede reenviar el puerto entrante aws.com:9999 a aws [localport:9999]: en el servidor AWS:
[email protected] # iptables -t nat -I PREROUTING -p tcp --dport 9999 -j DNAT --to 127.0.0.1:9999
Y ahora puedes conectarte desde el host2 al host1 de esta manera:
user1@host1 $ ssh [email protected] -p 9999
Bingo. Te conectaste de esta manera:
[host 1] --> [aws:puerto 9999] --> [aws: túnel invertido en 127.0.0.1:9999] --> [host 2]
Debes eliminar el registro de iptable cuando esta conexión ya no se use:
[email protected] # iptables -t nat -A PREROUTING -p tcp --dport 9999 -j DNAT --to 127.0.0.1:9999
La desventaja de esta solución es que el host2 está expuesto a todos a través del puerto externo 9999. Aún debe ingresar una contraseña para iniciar sesión, sin embargo, está expuesta.
UPD: es posible que también necesites habilitar el reenvío local:
awsuser@aws # ls echo 1 > /proc/sys/net/ipv4/conf/all/route_localnet
O en lugar de habilitarlo para todas las interfaces, habilítelo solo en la interfaz de ingresos:
awsuser@aws # ls echo 1 > /proc/sys/net/ipv4/conf/eth0/accept_local