Я могу подключиться к своему Linux-серверу по SSH из домашней сети, используя его внутренний IP-адрес, например 192.168.10.2. Или извне я могу подключиться через свой внешний IP-адрес, например 74.23.43.98, через перенаправление портов на моем маршрутизаторе, который я настроил для перенаправления входящих подключений через порт 22 на внутренний адрес 192.168.10.2. Однако я не могу подключиться через свой внешний IP-адрес, если я дома. Это работает только вне моей сети. Это универсальная правда или особенность моего конкретного роутера Motorola?
Спасибо
Это общая проблема, связанная с NAT и локальными сетями. Обычно, когда маршрутизатор перезаписывает 74.23.43.98 на 192.168.10.2, адрес источника не перезаписывается, поэтому конечный компьютер отправляет пакеты прямо обратно источнику, а не проходит через маршрутизатор. Поскольку исходный компьютер не ожидал пакетов от 192.168.10.2 (вместо этого он хочет видеть их от 74.23.43.98), он отбрасывает эти пакеты, и ничего полезного не делается.
Если ваш маршрутизатор в порядке, его следует настраивать для правильной работы (переписать исходный адрес для внутреннего трафика с внутренним NAT), но если он этого не делает по умолчанию, он, вероятно, не считается "любой хорошо". В качестве альтернативы, если это функционально, вы должны иметь возможность настроить вторую внутреннюю сеть для своего сервера, которая обеспечит прохождение всего трафика через маршрутизатор.
Это должно быть возможно (я сделал это на своем маршрутизаторе Linksys), хотя я не совсем уверен, почему вы хотите это сделать.
Для начала стоит уточнить, что означает «не может подключиться». Можете ли вы пропинговать свой внешний адрес и получить ответ? Ведение журнала sshd - это попытка подключения? Можете ли вы использовать telnet через перенаправленный порт (чтобы доказать, что порт хотя бы открыт)?
У меня есть несколько машин, которыми я управляю, которые находятся за брандмауэрами, ограничивающими доступ к сети по SSH. По большей части это не проблема, поскольку у меня обычно есть статический IP-адрес, когда я дома или в офисе, но не доставляет мне особых проблем, когда я нахожусь в удаленной сети где-то еще. Мое решение состояло в том, чтобы упростить пересылку через один из моих хостов со статическим IP-адресом, разрешенным через брандмауэр, с использованием ProxyCommand
в моей конфигурации клиента SSH. Это работает для меня, использующего OpenSSH, и должно работать с другими клиентами SSH, которые поддерживают ProxyCommand
так что проверьте документацию вашего клиента, если сомневаетесь. Также требуется установка netcat
швейцарский армейский нож TCP / IP.
Внутри моего ~ / .ssh / config файл у меня следующая конфигурация:
Host InternalHost
ProxyCommand ssh StaticHost nc %h 22
HostName InternatHost-FQDN
Я использую короткое имя хоста для ссылки на конфигурацию, что позволяет мне использовать полное доменное имя для доступа к нему без использования пересылки. Эта конфигурация подключается к StaticHost и запустите netcat, чтобы перейти к InternalHost-FQDN на порту 22. Если у вас не настроен ключ идентификации SSH для входа в StaticHost и InternalHost без запроса пароля, вы получите два запроса на ввод пароля. В моем случае у меня установлен ключ идентификации SSH на обоих, и я загружаю ключ SSH в агент SSH и обнаруживаю, что вошел в систему без каких-либо запросов пароля.
Эта конфигурация также будет работать, чтобы вы могли передавать файлы туда и обратно с помощью InternalHost, используя scp
command так же легко, как и войти в оболочку.