Encaminhamento de porta remota dentro de contêineres do Docker

2

Estou tentando configurar um contêiner docker que uso para contornar firewalls / NATs para permitir o acesso SSH aos computadores por trás dessas barreiras de roteamento. Em essência, tenho um serviço SSH escutando dentro de um contêiner docker ao qual meus outros computadores se conectam, abrindo um encaminhamento de porta SSH reverso e, se eu quiser conectar a um computador atrás de um firewall, conecto ao dockerized servidor proxy na porta reversa. Exemplo:

O computador com firewall "Bob" se conecta ao servidor proxy:

ssh -R 2024:localhost:22 -N remote.server

Em seguida, conecto-me ao servidor remoto na porta 2024 para seguir o túnel de volta e conectar-me a localhost:22 on bob:

ssh -p 2024 remote.server

Isso tudo funciona muito bem quando não é dockerizado, no entanto, quando tentei movê-lo para um serviço dockerizado, descobri que meu sshd server dentro do contêiner docker se recusa a abrir remotamente a porta remota. Conectar-se com ssh -vvv no primeiro passo acima fornece:

...
debug1: Entering interactive session.
debug1: pledge: network
debug3: receive packet: type 4
debug1: Remote: Server has disabled port forwarding.
debug3: receive packet: type 82
debug1: remote forward failure for: listen 2024, connect localhost:22
Warning: remote port forwarding failed for listen port 2024
debug1: All remote forwarding requests processed

O que parece muito com meu sshd não é configurado para permitir o encaminhamento remoto de portas. No entanto, meu sshd_config parece achar que é:

# tail /etc/ssh/sshd_config -n 5
GatewayPorts yes
AllowTcpForwarding yes
AllowStreamLocalForwarding yes
PermitTunnel yes
UsePrivilegeSeparation no

De fato, executando com ssh -ddd dentro do contêiner docker, em seguida, conectar-se com a linha acima mostra primeiro:

debug3: /etc/ssh/sshd_config:91 setting GatewayPorts yes
debug3: /etc/ssh/sshd_config:92 setting AllowTcpForwarding yes
debug3: /etc/ssh/sshd_config:93 setting AllowStreamLocalForwarding yes
debug3: /etc/ssh/sshd_config:94 setting PermitTunnel yes
debug3: /etc/ssh/sshd_config:95 setting UsePrivilegeSeparation no

Seguido por:

debug1: server_input_global_request: rtype tcpip-forward want_reply 1
debug1: server_input_global_request: tcpip-forward listen localhost port 2024
debug1: server_input_global_request: rtype [email protected] want_reply 0

Então, claramente, minha configuração está sendo configurada corretamente, mas parece que o cliente ainda acha que o servidor não pode fazer o encaminhamento de porta. Como posso convencer o servidor openssh a realizar o encaminhamento remoto? O que poderia causar essa falha?

O cliente está executando OpenSSH_7.2p2 Ubuntu-4ubuntu2.4 , o servidor está executando OpenSSH_6.7p1 Debian-5+deb8u4 , a versão do docker é 17.09.1-ce on Amazon Linux 2017.09 .

Obrigado!

    
por staticfloat 04.03.2018 / 00:06

2 respostas

1

Aha! Eu percebi isso. Isso ocorreu porque docker estava criando uma rede interna ipv6 para meus contêineres e meu kernel não tinha o ipv6 encaminhamento ativado. Portanto, ao executar sshd fora do contêiner, ele funcionaria acima de ipv4 , mas ao executar sshd dentro do contêiner na rede da ponte de encaixe, ouviria ipv6 e não conseguiria abrir a porta para a frente.

Quando habilitei o encaminhamento de ipv6 , (adicionando net.ipv6.conf.all.forwarding = 1 em /etc/sysctl.conf e reinicializando) tudo começou a funcionar bem.

    
por 05.03.2018 / 06:14
0

Você também pode tentar forçar o sshd a usar o ipv4. No seu exemplo, adicione o parâmetro "-4" da seguinte forma:

ssh -4 -R 2024:localhost:22 -N remote.server
    
por 21.10.2018 / 03:10