Moim problemem jest znalezienie sposobu SSH na serwer Linux (Ubuntu 18.04), którego adres IP zmienia się codziennie.
Mam klienta, któremu czasami pomagam w zadaniach administracyjnych. Potrzebuję ssh do komputera, kiedy potrzebują pomocy, ale nie mają statycznego adresu IP, więc publiczny adres IP serwera ciągle się zmienia. Stworzyłem mały skrypt do zgłaszania adresu IP maszyny z systemem Linux i stwierdzam, że zmienia się on raz dziennie około południa.
Jestem w stanie skonfigurować SSH i działa zarówno lokalnie, jak i zdalnie ... aż do zmiany adresu IP. Gdy to się stanie, nie będę już mógł połączyć się zdalnie, nawet przy użyciu nowego adresu IP.
- Czy muszę ponownie uruchamiać usługę SSH przy każdej zmianie adresu IP?
- Jeśli tak, to dlaczego?
- Czy muszę podjąć jakieś inne działania, gdy zmieni się adres IP, aby umożliwić dostęp do SSH?
AKTUALIZACJA
Dla jasności moim problemem NIE jest znalezienie nowego adresu IP. Mam już skrypt, aby to zrobić. Problem polega na tym, że serwer przestaje odpowiadać po zmianie adresu IP, mimo że próbuję połączyć się przy użyciu nowego adresu IP.
Jeśli zrestartuję usługę SSH na komputerze docelowym, mam ponownie dostęp zdalny. Ale nie rozumiem, dlaczego powinienem to zrobić. Chciałbym poznać przyczynę w nadziei na znalezienie lepszego rozwiązania.
Wydaje się, że większość ludzi uważa, że SSH powinno działać tak długo, jak znamy nowe IP, więc czy jest to coś wyjątkowego do 18.04? Niedawno zainstalowałem ten serwer dla klienta, więc wszystkie ustawienia konfiguracji są nadal domyślne. (Nie wiedziałby, jak to zmienić.)
źródło
ListenAddress <dynamic host name>
w pliku konfiguracyjnym sshd, być może dlatego, że ktoś nie chciał, aby użytkownicy wewnętrzni mogli ssh na serwerze. Wymagałoby to zrestartowania serwera ssh przy każdej zmianie adresu IP.Odpowiedzi:
Inne odpowiedzi wydają się przeoczyć jedną rzecz w twoim pytaniu:
DDNS pomoże ci znaleźć nowy adres IP, ale wydaje się, że nie stanowi to problemu.
Niestety, serwer otrzymujący nowy adres IP nie powinien stanowić problemu w standardowej konfiguracji, w której dostawca usług internetowych zapewnia router, serwer ma wewnętrzny adres za routerem, a router wykonuje przekierowanie portów. Konieczne może być podanie dodatkowych informacji na temat topologii sieci, aby uzyskać dobrą odpowiedź.
Mogę sobie wyobrazić, że serwer nie znajduje się za routerem i nie wykonuje własnego połączenia PPPoE, a a) serwer ssh wiąże się z określonym adresem interfejsu w punkcie restartu serwera, b) zapora sieciowa na komputerze, która pozwala przychodzącym ssh na tylko adres IP serwera z zaporą ogniową nie aktualizuje się, gdy zmienia się adres IP.
Aby sprawdzić pierwszy przypadek, zrobić
netstat -nta | grep -w 22 | grep LISTEN
. Jeśli mówi 0.0.0.0:22, to w porządku; jeśli wyświetla konkretny adres IP, sprawdź plik konfiguracyjny sshd (/etc/sshd.conf
) dlaListenAddress
.Aby sprawdzić drugi przypadek, zrób
iptables -L -n
i sprawdź, czy jedna z reguł wINCOMING
łańcuchu odpowiada adresowi IP twojego serwera i portowi 22.Jeśli jeden z nich ma bieżący adres serwera, musisz go zmienić na 0.0.0.0 (upewnij się, że wiesz o implikacjach bezpieczeństwa) lub zaktualizować regułę / konfigurację za każdym razem, gdy zmienia się adres IP.
Edytować
Ponieważ serwer znajduje się za routerem, powyższe pomysły prawdopodobnie nie mają zastosowania (*). W tej konfiguracji router ma zewnętrzny adres IP (który zmienia się codziennie), a urządzenia wewnętrzne powinny mieć adresy 10.xyz lub 192.168.xy, które nie powinny się zmieniać. Łączysz się z adresem zewnętrznym, a router powinien przekierować port na adres wewnętrzny.
Przekazywanie portów nie powinno się przerywać, gdy zmienia się zewnętrzny adres IP (istniejące połączenia ssh zostaną jednak zerwane), ale być może jest to reguła, która nie została skonfigurowana przez Ciebie, ale przez jakąś magię UPNP, gdy router upuszcza UPNP do przodu, gdy się dostanie nowy adres, a sshd wywołuje regułę tylko po ponownym uruchomieniu. Czy sam skonfigurowałeś port forwardera w routerze?
Lub zmienia się wewnętrzny adres IP serwera - w takim przypadku coś jest poważnie zepsute z twoim DHCP. Nadaj swojemu serwerowi stały adres wewnętrzny.
A może używasz IPV6? Istnieją pewne konfiguracje, w których urządzenie ciągle zmienia swój adres IP, aby utrudnić jego śledzenie. Zobacz na przykład https://www.internetsociety.org/blog/2014/12/ipv6-privacy-addresses-provide-protection-against-surveillance-and-tracking/ - ale w takim przypadku wstydź się, że nie wspominając o tym w swoim oryginalnym poście. Może to oznaczać, że router w ogóle nie wykonuje translacji NAT, a moje oryginalne pomysły są nadal aktualne nawet za routerem.
źródło
Dynamiczny DNS jest jedną z opcji, inną jest poczta serwera lub w inny sposób wysyłanie ci adresu IP. Wystarczy proste wywołanie HTTP (do punktu końcowego, który kontrolujesz i logujesz żądania).
Możliwe jest również rozwiązanie całej sieci publicznej na odwrót; serwer może skonfigurować tunel zwrotny lub połączenie VPN, na które zmiana IP nie będzie miała wpływu.
Jeśli chodzi o usługi, które nie odpowiadają na nowy adres: zależy to całkowicie od konfiguracji sieci. Na przykład: WAN IP na wewnętrznym interfejsie przez DHCP i serwer SSH ustawiony tak, aby nasłuchiwał tylko IP na twoim interfejsie znanym podczas uruchamiania, oznaczałoby to, że sshd musi zostać zrestartowany po zmianie interfejsu.
źródło
Naprawdę powinieneś zajrzeć do usług ddns. O ile zdalnie można połączyć się z pewną maszyną z dynamicznym adresem IP; ddns jest najczęściej stosowanym rozwiązaniem.
udaj się na https://noip.com i załóż konto (to, errr ... podobno..coff..cof .. Bezpłatnie dla 1-3 komputerów działających w tej samej sieci (jeśli się nie mylę, nie cytuj ja tutaj: minęło trochę czasu, odkąd zaufałem żadnej z tych „darmowych” usług ...) Istnieją również inne alternatywy, takie jak Afraid DNS ( https://freedns.afraid.org/ A nawet, Cisco, Open DNS: może być również wykorzystane (pod warunkiem, że nie jest to tylko klient, sugerowałbym, aby zapisać się na próbną próbę konta, wypróbować go, a później zarejestrować się na prawdziwą Okazja >>> otrzymali nawet jedno z nich, przypominające GUI, do pobrania rozszerzenia, które automatycznie odnawiają nazwę hosta ddns, ilekroć zmieni się adres IP twojego klienta. To naprawdę jest najłatwiejszy, bez wiedzy technicznej sposób, o którym wiem [tylko w jeśli musisz zadzwonić do jednego ze swoich klientów i poprosić o pobranie GUI zamiast ...])
źródło
Czasami zmiany DHCP zaczynają obowiązywać. Spróbuj ponownie uruchomić klienta DHCP na komputerze docelowym
Nie. Ponowne uruchomienie usługi ssh wymaga jedynie zmiany konfiguracji (
/etc/ssh/sshd_conf
).Nie.
Mam rozwiązanie, które zakłada, że masz skonfigurowane sendmail na komputerze docelowym.
Ten skrypt wysyła wiadomość e-mail, która pokazuje adres IP, który świat uważa, że mamy (Dzięki ipify.org). E-mail zawsze będzie miał najbardziej aktualny adres IP.
Włóż skrypt
/etc/dhcp/dhclient-exit-hooks.d
Jeśli to nie zadziała, zawsze możesz skonfigurować crona tak, aby wysyłał ci aktualny adres IP (stracił instrukcję case).
źródło
Myśląc nieszablonowo - czy możesz ustalić stały adres IPv6? Zwykle tylko adresy IPv4 wymagają zmiany ze względu na ich niedobór.
źródło
Co robiłem przez prawie rok. Wpadłem na twój problem w styczniu tego roku, wygłaszając przemówienie na moim lokalnym uniwersytecie.
Od tego czasu ten skrypt działa na moim komputerze: // Samo wyjaśnienie //
Python 3.x powinien działać bezbłędnie Może nie jest to najlepsze rozwiązanie, ale działa.
Otrzymasz wiadomość e-mail do skrzynki odbiorczej za każdym razem, gdy zmieni się publiczny adres IP urządzenia.
Teraz odnośnie twoich pytań:
Czy muszę ponownie uruchamiać usługę przy każdej zmianie adresu IP? Jeśli przez ponowne uruchomienie usługi masz na myśli przywrócenie połączenia ssh, tak.
Jeśli tak, to dlaczego? Ponieważ jeśli adres, z którym próbujesz się komunikować, nie zapewnia już usługi, której szukasz. To już nie jest twoja maszyna.
Czy muszę podjąć jakieś inne działania, gdy zmieni się adres IP, aby umożliwić dostęp do SSH? Po prostu SSH na nowy adres.
Twoje zdrowie! JSR
źródło
Warto to zobaczyć z innej strony: zazwyczaj znacznie łatwiej jest utworzyć zewnętrzne połączenie z komputerem, które wymaga Twojej uwagi (DNS, NAT i inne ustawienia zapory nie mają żadnego znaczenia lub są znacznie prostsze).
Możesz użyć tego do stworzenia odpornego na pociski i prostego rozwiązania, aby dostać się na zdalną maszynę
R
. Jedynym wymogiem jest to, że możesz zapewnić publicznyssh
dostęp do jednego ze swoich lokalnych komputerów (nazwijmy toS
). Następnie wykonaj następujące czynności:Utwórz
ssh
połączenie zewnętrzne odR
doS
, ustanawiając tunel zwrotny z powrotem doR
:ssh -L 22:<address-of-S>:22000
Włącz
S
, użyj tunelu zwrotnego dossh
zdalnego komputeraR
:ssh -p 22000 127.0.0.1
Krok 1 może być uruchamiany ręcznie i na żądanie przez zdalną stronę, gdy tylko potrzebna jest twoja pomoc. Alternatywnie, możesz utworzyć usługę,
R
która będzie stale utrzymywać taki tunel zwrotny doS
.Użyłem takiej konfiguracji do logowania się do zdalnych (mobilnych) systemów, które znajdowały się za firewallami / NAT i które w ogóle nie miały wpisów DNS.
źródło
Jeśli potrzebujesz tylko zdalnego logowania, użyj mosh . Poza tym, że doskonale radzi sobie ze zmianami adresu IP (prawie bez opóźnień podczas przełączania), ma również inne zalety w stosunku do zwykłego
ssh
, takie jak lokalne echo predykcyjne, małe opóźnienie, znacznie szybsze odzyskiwanie z uszkodzonych łączy.Jeśli konkretnie potrzebujesz
ssh
(powiedzmy, potrzebujesz przekierowania X11 lub czegoś takiego), sugeruję skonfigurowanie VPN (np. OpenVPN), najlepiej przez UDP, z krótkim podtrzymaniem. Połączenia TCP (tj. Twój ssh) przez VPN będą się leczyć i pozostaną połączone po zmianie adresu IP, potrwa to dłużej (do około minuty), ale możesz grać z/proc/sys/net/ipv4/tcp_*
wpisami, aby było bardziej akceptowalne.Edytować:
ssh
uwierzytelnienia, ale po uwierzytelnieniu połączenie pozostaje do wylogowania (lub zrestartowania) i możesz sprawdzić awarięssh
w wolnym czasie (np. strace -f -p pid_of_sshd )mosh
bezssh
, odpowiedź dostosowana stąd :Na serwerze uruchom:
otrzymujesz wynik jak
QzdRHbAWzL7eRobi75DCrz
W trybie klienta:
Pamiętaj, że
$serverip
musi to być adres IP, bez rozpoznawania nazw hostów.To, jak dostaniesz klucz z jednej strony na drugą, zależy od ciebie. Sugeruję szyfrowanie za pomocą klucza wstępnego i wiadomości błyskawicznych, wysyłanie wiadomości e-mail lub zmuszanie lokalnego użytkownika do dyktowania go przez telefon.
ssh
, zainstalujinetd
i uruchom stamtąd ssh, a nie jako samodzielny demon, np. za pomocą tej linii konfiguracyjnej dla „klasycznego” pliku inetd.conf, spowoduje to uruchomienie nowego demona przy każdym logowaniu (pamiętaj, że nie wszystkie Obsługa wideł inetd ipv6):ssh stream tcp6 nowait root /usr/sbin/sshd sshd -i
źródło