1

У меня есть два хозяина, А и Б. Узел A размещает службы на порте 8080 и имеет исходящие правила брандмауэра в Интернете, разрешающие портам 80 и 443 доступ к узлу C.

Узел B находится в той же подсети, что и узел A. Хост B заблокирован от доступа к Интернету Хосту C. Узел A, однако, имеет правила исходящих сообщений на внешнем брандмауэре, который разрешает порты 80 и 443 исходить к узлу C.

На хосте B запускается программный клиент с жестко закодированными URL-адресами для загрузки с хоста A (http-порт 8080) и хоста C (http-порт 80). Снова, Узел B заблокирован от доступа к Узлу C через межсетевой экран. Клиент на хосте B не поддерживает SOCKS или любые другие возможности прокси. Единственный способ, которым я могу достичь хоста C:80, - это перенаправление или туннелирование через хост A.

У меня есть root-доступ к узлу A и узлу B. Как хост B может достичь хоста C через хост A через порт 80?

Почему это не работает на хосте B?

ssh -L 80:hostC:80 root @ hostA -N

Я включил AllowTCPForwarding и GatewayPorts на хосте A. Правильно ли для этого или есть трюк iptables, который я могу использовать?

Это изображение является диаграммой желания сделать с тем, что у меня есть: http://i.imgur.com/rOhQ9Us.png

3 ответа3

0

Увидел это в поисках чего-то другого, но подумал, что я отвечу, хотя он старый:

На хосте B:

ssh -L 8080:hostC:80 user@hostA -N -f
sudo iptables -t nat -A OUTPUT -d hostC -p tcp --dport 80 -j DNAT --to 127.0.0.1:8080

Программное обеспечение на хосте B жестко задано для подключения к HostC:80 (в зависимости от вопроса), поэтому вы должны перенаправить соединение, чтобы пройти через созданный вами туннель SSH. Также с учетом вышеуказанных изменений вам не нужно запускать что-либо от имени пользователя root.

0

Как сказал @Nathan Adams, картина была бы особенно полезна для решения этой проблемы. Я не сталкивался с тем, что вы пытаетесь сделать раньше, но после создания диаграммы для себя и прочтения команды -L для SSH, я подозреваю, что проблема заключается в том, что вам нужно запустить его как root, как порт пытаются связать это привилегированный порт (то есть <1025).

0

Где находится брандмауэр, на самом B или на внешнем?

Ваша команда ssh не работает, потому что она связывает порт 80 на B для пересылки на C через A. Из вашего описания у вас есть жестко закодированный адрес, что означает, что B не пытается подключиться к порту 80 сам по себе. Закрепленный адрес является ключом к вашей проблеме. Содержит ли URL-адрес логический адрес или фактический жестко заданный IP-адрес?

Если брандмауэр установлен на B, вам следует избегать обращения к пакетам, адресованным C. Я предполагаю, что это не так, так как у вас есть root на B. Тем не менее, решение в этом случае также должно работать независимо от того, что именно, а именно найти способ получить подключения к C, чтобы перейти к A. Вы можете сделать это путем манипулирования DNS или с помощью правила перезаписи брандмауэра.

Другим трюком было бы использование A в качестве маршрута по умолчанию для B. Предполагая, что C является внешним и ударит по брандмауэру при попытке вернуть пакеты в B, вы бы хотели, чтобы A делал NAT для B. Действительно грубый подход заключается в том, чтобы А отвечал на запросы ARP, чтобы обманным путем заставить трафик проходить через него, но это вряд ли будет жизнеспособным, за исключением очень небольших установок.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .