Моя проблема заключается в поиске пути к SSH на сервер Linux (Ubuntu 18.04), чей IP-адрес меняется ежедневно.
У меня есть клиент, которому я иногда помогаю с задачами администратора. Мне нужно подключиться к машине по ssh, когда им нужна помощь, но у них нет статического IP-адреса, поэтому открытый IP-адрес сервера постоянно меняется. Я создал небольшой скрипт для сообщения об IP-адресе компьютера с Linux и обнаружил, что он меняется один раз в день около полудня.
Я могу настроить SSH, и он работает как локально, так и удаленно ... пока IP-адрес не изменится. Как только это произойдет, я больше не смогу подключиться удаленно, даже используя новый IP-адрес.
- Нужно ли перезапускать службу SSH каждый раз, когда меняется IP-адрес?
- Если так, то почему?
- Есть ли какие-либо другие действия, которые мне нужно предпринять при изменении IP-адреса, чтобы разрешить доступ по SSH?
ОБНОВИТЬ
Чтобы было ясно, моя проблема не в том, чтобы найти новый IP-адрес. У меня уже есть скрипт для этого. Проблема в том, что сервер перестает отвечать на запросы после изменения IP-адреса, даже если я пытаюсь подключиться с использованием нового IP-адреса.
Если я перезапущу службу SSH на целевой машине, у меня снова будет удаленный доступ. Но я не понимаю, зачем мне это делать. Я хотел бы знать причину в надежде найти лучшее решение.
Кажется, что большинство людей думают, что SSH должен работать, пока мы знаем новый IP, так что это уникально для 18.04? Я недавно установил этот сервер для клиента, поэтому все настройки конфигурации по-прежнему остаются настройками по умолчанию. (Не знаю, как это изменить.)
источник
ListenAddress <dynamic host name>
Может быть какая-то странность, связанная с работой DDNS, и что-то вроде конфигурационного файла sshd, возможно, из-за того, что кто-то не хочет, чтобы внутренние пользователи могли подключаться по ssh к серверу. Это фактически потребовало бы перезапуска сервера ssh каждый раз, когда изменяется IP.Ответы:
Другие ответы, кажется, упустили из виду одну вещь в вашем вопросе:
DDNS поможет вам узнать новый IP-адрес, но здесь проблема не в этом.
К сожалению, сервер, получающий новый IP-адрес, не должен быть проблемой при стандартной настройке, где провайдер предоставляет маршрутизатор, сервер имеет внутренний адрес за маршрутизатором, а маршрутизатор выполняет переадресацию портов. Возможно, вам потребуется предоставить больше информации о топологии сети, чтобы получить хороший ответ.
Я мог бы себе представить, что сервер не находится за маршрутизатором и не выполняет свое собственное PPPoE-соединение, и a) привязка сервера ssh к определенному адресу интерфейса в момент перезапуска сервера, b) брандмауэр на машине, который разрешает входящий ssh для только IP-адрес сервера с брандмауэром не обновляется при изменении IP-адреса.
Чтобы проверить первый случай, сделайте
netstat -nta | grep -w 22 | grep LISTEN
. Если он говорит 0.0.0.0:22, это нормально; если в нем указан конкретный IP, то проверьте файл конфигурации sshd (/etc/sshd.conf
)ListenAddress
.Чтобы проверить второй случай, выполните
iptables -L -n
и проверьте, соответствует ли одно из правил вINCOMING
цепочке IP-адресу вашего сервера и порту 22.Если один из них имеет текущий адрес сервера, вам нужно либо изменить его на 0.0.0.0 (убедитесь, что вы знаете о последствиях для безопасности), либо обновлять правило / конфигурацию при каждом изменении IP-адреса.
редактировать
Поскольку сервер находится за маршрутизатором, приведенные выше идеи, вероятно, не применимы (*). В этой настройке маршрутизатор имеет внешний IP-адрес (который меняется ежедневно), а ваши внутренние устройства должны иметь несколько адресов 10.xyz или 192.168.xy, которые не должны изменяться. Вы подключаетесь к внешнему адресу, и маршрутизатор должен использовать правило переадресации портов на внутренний адрес.
Эта переадресация портов не должна прерываться при изменении внешнего IP-адреса (однако существующие соединения ssh будут сброшены), но, возможно , это правило не было настроено вами, но каким-то волшебством UPNP, когда маршрутизатор сбрасывает UPNP-сообщения вперед при получении новый адрес, и sshd вызывает правило только при перезапуске. Вы сами настроили перенаправитель портов в роутере.
Или это внутренний IP-адрес сервера, который изменяется - в этом случае что-то сильно сломано вашим DHCP. Дайте вашему серверу фиксированный внутренний адрес.
Или вы используете IPV6? В некоторых конфигурациях устройство постоянно меняет свой IP-адрес, чтобы его было легче отслеживать. См., Например, https://www.internetsociety.org/blog/2014/12/ipv6-privacy-addresses-provide-protection-against-surveillance-and-tracking/ - но в этом случае вам не стыдно упоминая это в своем оригинальном посте. Это может означать, что ваш маршрутизатор вообще не выполняет NAT, и мои оригинальные идеи остаются в силе даже за маршрутизатором.
источник
Динамический DNS - это один из вариантов, другой - иметь почту сервера или иным образом отправлять вам свой IP. Можно сделать простой HTTP-вызов (до конечной точки, которой вы управляете, и регистрируете запросы).
Решение всей общедоступной сети также возможно и наоборот; Вы можете настроить сервер на обратный туннель или VPN-соединение, которое не будет зависеть от изменения IP-адреса.
Что касается служб, не отвечающих на новый адрес: это полностью зависит от настроек вашей сети. Например: WAN IP на внутреннем интерфейсе через DHCP и SSH-сервер, настроенный на прослушивание только IP-адреса вашего интерфейса, известного при запуске, означают, что sshd необходимо перезапустить при изменении интерфейса.
источник
Вы должны действительно посмотреть на сервисы ddns. Насколько удаленно можно подключиться к определенной машине с динамическим IP-адресом; DDDS является наиболее часто используемым решением.
зайдите на https://noip.com и зарегистрируйтесь для учетной записи (это, errr ... предположительно..coff..cof .. Бесплатно для 1-3 машин, работающих в одной сети (если я не ошибаюсь, не цитируйте меня здесь: это было давно, так как я доверял любому из этих «бесплатных» сервисов ...). Есть и другие альтернативы, такие как Afraid DNS ( https://freedns.afraid.org/ И даже, Cisco, Open DNS: также может быть использован (при условии, что это не единственный клиент, я бы посоветовал вам подписаться на пробную учетную запись, принять ее на раскрутку, а позже - на настоящую). сделка >>> у них даже есть одно из загружаемых расширений, похожих на GUI, которое будет автоматически обновлять имя хоста ddns при изменении ip ваших клиентов. Это действительно самый простой, не технически подкованный способ, который я знаю [только в на случай, если вам нужно позвонить одному из ваших клиентов и попросить меня загрузить графический интерфейс, скорее ....])
источник
Иногда для того, чтобы изменения DHCP вступили в силу, требуется некоторое время. Попробуйте перезапустить DHCP-клиент на целевой машине
Нет. Вам нужно перезапускать службу ssh только при изменении конфигурации (
/etc/ssh/sshd_conf
).Нет.
У меня есть решение, которое предполагает, что вы настроили sendmail на целевой машине.
Этот скрипт отправляет электронное письмо с указанием IP-адреса, который, по нашему мнению, мы имеем в мире (спасибо ipify.org). Электронная почта всегда будет иметь самый последний IP-адрес.
Поместите скрипт в
/etc/dhcp/dhclient-exit-hooks.d
Если это не работает, вы всегда можете настроить cron для отправки вам текущего IP-адреса (потерять оператор case).
источник
Думая нестандартно - вы могли бы организовать фиксированный адрес IPv6? Обычно меняются только адреса IPv4 из-за их нехватки.
источник
Чем я занимаюсь почти год. Я столкнулся с вашей проблемой в январе этого года, когда выступал в моем местном университете.
С тех пор этот скрипт выполнялся на моей машине: // Довольно очевидно, //
Python 3.x должен работать без нареканий. Возможно, это не лучшее решение, но оно работает.
Вы будете получать электронное письмо в папку «Входящие» каждый раз, когда меняется публичный IP-адрес устройства.
Теперь по поводу ваших вопросов:
Нужно ли перезапускать сервис каждый раз, когда меняется IP-адрес? Если при перезапуске службы вы имеете в виду восстановление соединения ssh, да.
Если так, то почему? Потому что, если адрес, с которым вы пытаетесь установить связь, больше не предоставляет нужную вам услугу. Это больше не твоя машина.
Есть ли какие-либо другие действия, которые мне нужно предпринять при изменении IP-адреса, чтобы разрешить доступ по SSH? Просто SSH на новый адрес.
Ура! JSR
источник
Стоит посмотреть на это с другой стороны: обычно гораздо проще создать внешнее соединение с компьютера, которое требует вашего внимания (DNS, NAT и другие настройки брандмауэра не имеют значения или намного проще).
Вы можете использовать это, чтобы создать пуленепробиваемое и простое решение для доступа к удаленной машине
R
. Единственное требование - вы можете предоставить публичныйssh
доступ к одному из ваших локальных компьютеров (назовем его такS
). Затем действуйте следующим образом:Создайте исходящее
ssh
соединение отR
toS
, установив обратный туннель обратно вR
:ssh -L 22:<address-of-S>:22000
На
S
, использовать обратный туннельssh
в удаленной машинеR
:ssh -p 22000 127.0.0.1
Шаг 1 может быть запущен вручную и по требованию удаленной стороной, когда вам потребуется помощь. В качестве альтернативы вы можете создать сервис,
R
который будет постоянно поддерживать такой обратный туннельS
.Я использовал такую настройку для входа в удаленные (мобильные) системы, которые находились за брандмауэрами / NAT и у которых вообще не было записей DNS.
источник
Если вам просто нужен удаленный вход, используйте mosh . Помимо способности превосходно справляться с изменениями IP (практически без задержки во время переключения), у него есть и другие преимущества по сравнению с обычным
ssh
, например локальное прогнозирующее эхо, низкая задержка и намного более быстрое восстановление после неработающих каналов.Если вам конкретно нужно
ssh
(скажем, вам нужна пересылка X11 или что-то в этом роде), я предлагаю настроить VPN (например, OpenVPN), предпочтительно через UDP, с короткой поддержкой активности. TCP-соединения (т.е. ваш ssh) через VPN заживают и остаются подключенными после смены IP, это займет больше времени (до минуты или около того), но вы можете поиграть с/proc/sys/net/ipv4/tcp_*
записями, чтобы сделать его более приемлемым.Редактировать:
ssh
Для проверки подлинности mosh требуется , но после проверки подлинности соединение остается до тех пор, пока вы не выйдете из системы (или не перезагрузите компьютер), и вы сможете расследовать сбойssh
на досуге (например, strace -f -p pid_of_sshd )mosh
безssh
, ответ адаптирован отсюда :На сервере запускаем:
вы получите результат, как
QzdRHbAWzL7eRobi75DCrz
На клиенте запускаем:
Обратите внимание, что
$serverip
должен быть IP, без разрешения имени хоста.Как получить ключ с одной стороны на другую, решать только вам. Я бы посоветовал зашифровать с помощью предварительного ключа и обмена мгновенными сообщениями, рассылки или заставить локального пользователя диктовать его с помощью телефонного звонка.
ssh
, установитеinetd
и запустите ssh, а не как отдельный демон, например, с помощью этой строки конфигурации для «классического» inetd.conf, он будет запускать новый демон каждый раз, когда вы входите в систему (обратите внимание, что не все Inetd обрабатывает вилки ipv6):ssh stream tcp6 nowait root /usr/sbin/sshd sshd -i
источник