Я пытаюсь настроить контейнер docker, который я использую для обхода брандмауэров / NAT, чтобы разрешить доступ по SSH к компьютерам за этими барьерами маршрутизации. По сути, у меня есть служба SSH, прослушивающая внутри контейнера docker, к которому подключаются другие мои компьютеры, открывая переадресацию портов с обратным SSH, а затем, если я хочу подключиться к компьютеру за брандмауэром, я вместо этого подключаюсь к своему докеризованному прокси-серверу на обратном порту. Пример:
Защищенный брандмауэром компьютер "Bob" подключается к прокси-серверу:
ssh -R 2024:localhost:22 -N remote.server
Далее я подключаюсь к удаленному серверу по порту 2024
чтобы следовать по туннелю обратно вниз и подключиться к localhost:22
на Бобе:
ssh -p 2024 remote.server
Все это отлично работает, когда оно не привязано к dockerized, однако, когда я попытался перенести это в dockerized service, я обнаружил, что мой sshd
сервер в контейнере docker упорно отказывается открывать удаленный порт для пересылки. Соединение с ssh -vvv
на первом шаге выше дается:
...debug1: Entering interactive session.debug1: pledge: networkdebug3: receive packet: type 4debug1: Remote: Server has disabled port forwarding.debug3: receive packet: type 82debug1: remote forward failure for: listen 2024, connect localhost:22Warning: remote port forwarding failed for listen port 2024debug1: All remote forwarding requests processed
Что очень похоже на мой sshd
не настроен на разрешение удаленной переадресации портов. Однако мой sshd_config
кажется, он думает, что это так:
# tail /etc/ssh/sshd_config -n 5GatewayPorts yesAllowTcpForwarding yesAllowStreamLocalForwarding yesPermitTunnel yesUsePrivilegeSeparation no
Действительно, бег с ssh -ddd
внутри контейнера docker, затем сначала соединяясь со строкой, показанной выше:
debug3: /etc/ssh/sshd_config:91 setting GatewayPorts yesdebug3: /etc/ssh/sshd_config:92 setting AllowTcpForwarding yesdebug3: /etc/ssh/sshd_config:93 setting AllowStreamLocalForwarding yesdebug3: /etc/ssh/sshd_config:94 setting PermitTunnel yesdebug3: /etc/ssh/sshd_config:95 setting UsePrivilegeSeparation no
С последующим:
debug1: server_input_global_request: rtype tcpip-forward want_reply 1debug1: server_input_global_request: tcpip-forward listen localhost port 2024debug1: server_input_global_request: rtype no-more-sessions@openssh.com want_reply 0
Итак, очевидно, что моя конфигурация настроена правильно, но, похоже, клиент все еще думает, что сервер не может выполнить переадресацию портов. Как я могу убедить сервер openssh выполнить удаленную переадресацию? Что может вызвать этот сбой?
Клиент запущен OpenSSH_7.2p2 Ubuntu-4ubuntu2.4
, сервер запущен OpenSSH_6.7p1 Debian-5+deb8u4
, версия docker - это 17.09.1-ce
на Amazon Linux 2017.09
.
Спасибо!