Вопрос или проблема
Я пытался изучить SSH туннелирование. Поэтому я настроил локальную переадресацию портов SSH, чтобы получить доступ к веб-серверу, работающему локально на той же машине, что и SSH-сервер:
ssh -g -L *:8080:localhost:80 [email protected]
GatewayPorts yes
установлено на стороне сервера. Моя машина (SSH-клиент) находится на 192.168.56.0/24
с IP-адресом 192.168.56.102
. Я предполагаю, что с данной переадресацией любое соединение, установленное с 192.168.56.102:8080
внутри локальной сети, перенаправляется и может получить доступ к веб-странице. Итак, с другой машины внутри локальной сети (192.168.56.101
) я пытаюсь получить доступ к странице из браузера: http://192.168.56.102:8080
. Но я получил обычное предупреждение Хммм… не удается открыть эту страницу.
Я пытаюсь проверить, слушает ли машина. netstat -ano | findstr :8080
говорит:
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 812
TCP [::]:8080 [::]:0 LISTENING 812
Оказывается, слушает. Моя догадка теперь переходит к файрволу. Возможно, файрвол не позволяет. Поэтому я временно отключаю файрвол и снова пытаюсь получить доступ к странице по адресу: http://192.168.56.102:8080
. На этот раз я получил страницу, к которой хотел получить доступ. Итак, я подумал, что мне следует добавить некоторые правила файрвола, чтобы это соединение заработало. Исходя из трафика, захваченного при успешном доступе к странице (при отправке и получении на порт 8080), как показано на изображении: захват wireshark. Были установлены следующие правила для разрешения входящего и исходящего трафика к порту 8080:
netsh advfirewall firewall add rule name="Разрешить входящий порт 8080" dir=in action=allow protocol=TCP localport=8080
netsh advfirewall firewall add rule name="Разрешить исходящий порт 8080" dir=out action=allow protocol=TCP localport=8080
Я проверил, что правила были добавлены, и файрвол включен. Теперь снова пытаюсь получить доступ к странице, но, к сожалению, опять вижу сообщение Хммм… не удается открыть эту страницу.
Я не очень хорош в написании правил файрвола и только учусь этим ssh туннелированию
. Я уверен, что я где-то ошибаюсь в своем понимании. Я буду благодарен за вашу помощь. Кстати, ssh сервер – OpenSSH_9.6p1 Ubuntu-3ubuntu13.5, OpenSSL 3.0.13
на Linux-хосте, а клиент на Windows 10.
Ответ или решение
Для настройки правил брандмауэра, позволяющих доступ к SSH переадресации локального порта в вашей локальной сети, давайте пройдемся по всем шагам.
Предпосылки
Вы правильно используете SSH-туннелирование, и с настройками GatewayPorts yes
на стороне сервера SSH вы должны иметь возможность получать доступ к перенаправленному порту на других машинах в вашей локальной сети. Однако, вы столкнулись с проблемами, связанными с настройками брандмауэра, что является распространенной проблемой.
Проверка перенаправления порта
Команда SSH, которую вы используете:
ssh -g -L *:8080:localhost:80 [email protected]
позволяет принимать входящие соединения на порту 8080, и делать их доступными на локальном сервере в качестве перенаправления на порт 80. Убедитесь, что SSH-сервер правильно настроен и позволяет такие подключения.
Проверка работы сервера
Вы можете использовать netstat
для проверки, действительно ли сервер работает и принимает соединения:
netstat -ano | findstr :8080
Если вы видите, что порт 8080 находится в состоянии LISTENING (Слушает), значит проблема не в самом сервере.
Настройки брандмауэра
Вы правильно предположили, что брандмауэр мог блокировать подключения. Поскольку временное отключение брандмауэра решило проблему, пришло время настроить правила более аккуратно.
-
Убедитесь, что вы правильно добавили правила брандмауэра. Ваши команды выглядят правильно, но стоит добавить немного дополнительных деталей:
netsh advfirewall firewall add rule name="Allow Incoming Port 8080" dir=in action=allow protocol=TCP localport=8080 netsh advfirewall firewall add rule name="Allow Outgoing Port 8080" dir=out action=allow protocol=TCP localport=8080
Вы также можете добавить правила, которые разрешают входящий и исходящий трафик для всей сети (на случай, если проблема кроется в ограничениях сети):
netsh advfirewall firewall add rule name="Allow Incoming SSH Tunneling" dir=in action=allow protocol=TCP localport=22 netsh advfirewall firewall add rule name="Allow Outgoing SSH Tunneling" dir=out action=allow protocol=TCP localport=22
-
Также можно проверить, существуют ли другие правила брандмауэра, которые могут блокировать трафик на других уровнях. В случае, если у вас установлен сторонний антивирус или брандмауэр, убедитесь, что они не блокируют трафик на порт 8080 или порт 22.
Протестируйте доступ
После применения всех правил, попробуйте снова получить доступ к вашей веб-странице, используя:
http://192.168.56.102:8080
Дополнительные рекомендации
- Убедитесь, что другие устройства в вашей сети не имеют аналогичных правил брандмауэра, которые могут блокировать ваши попытки.
- Попробуйте протестировать подключение с помощью инструмента, такого как
curl
илиtelnet
, чтобы удостовериться, что порт 8080 доступен:curl http://192.168.56.102:8080
Если проблема продолжается, возможно, стоит просмотреть логи SSH-сервера для выявления дополнительных подсказок по проблемам с подключением.