IP'yi düzenli olarak değiştiren bir linux makineye nasıl bağlanılır?


12

Benim sorunum IP adresi her gün değişen bir Linux sunucu (Ubuntu 18.04) SSH için bir yol bulmak.

Yönetici görevlerinde ara sıra yardım ettiğim bir müşterim var. Yardıma ihtiyaç duyduklarında makineye ssh ihtiyacım var, ancak statik bir IP'si yok, bu yüzden sunucunun genel IP'si sürekli değişiyor. Linux makinesinin IP adresini bildirmek için küçük bir komut dosyası oluşturdum ve öğlen saatlerinde günde bir kez değiştiğini fark ettim.

SSH'yi ayarlayabiliyorum ve IP adresi değişene kadar hem yerel hem de uzaktan çalışıyor. Bu gerçekleştiğinde, yeni IP adresini kullanarak bile uzaktan bağlanamıyorum.

  • IP adresi her değiştiğinde SSH hizmetini yeniden başlatmam gerekir mi?
  • Öyleyse neden?
  • SSH erişimine izin vermek için IP adresi değiştiğinde yapmam gereken başka bir işlem var mı?

GÜNCELLEME

Açıkçası, sorunum yeni IP adresini bulmak DEĞİL. Bunu yapmak için bir senaryom var. Sorun, yeni IP adresini kullanarak bağlanmayı denememe rağmen IP değiştiğinde sunucunun yanıt vermemesidir.

Hedef makinede SSH hizmetini yeniden başlatırsam, yeniden uzaktan erişimim olur. Ama bunu neden yapmak zorunda olduğumu anlamıyorum. Daha iyi bir çözüm bulma umudundaki temel nedeni bilmek istiyorum.

Çoğu insan yeni IP'yi bildiğimiz sürece SSH'nin çalışması gerektiğini düşünüyor gibi görünüyor, bu yüzden 18.04'e özgü bir şey mi? Bu sunucuyu istemci için yakın zamanda yükledim, bu nedenle tüm yapılandırma ayarları hala varsayılan. (Nasıl değiştirileceğini bilemez.)


8
Dinamik dns kullanın .
Ipor Sircer

12
İSS'lerine bağır. IP adresini günde bir kez değiştirmek bir iş bağlantısı için saçmadır ve konut bağlantısı için nispeten duyulmamıştır.
Michael Hampton

2
IP adresi değiştiğinde ssh erişiminin durduğunu söylüyorsunuz. Ama yeniden çalışmaya başladığında söylemedin. Bir şekilde tekrar çalışmaya başlaması gerektiğini düşünüyorum, aksi takdirde her gün çalışmayı bırakamıyorsunuz. IP adresi değiştiğinde yapmanız gereken hiçbir şey yoktur. Ssh sunucusuna yeni IP adresinden hemen ulaşılabilir.
kasperd

1
DDNS'in çalışması gibi bazı tuhaflıklar olabilir ListenAddress <dynamic host name>ve sshd yapılandırma dosyasında olduğu gibi bir şey olabilir , çünkü birisi dahili kullanıcıların sunucuya ssh yapabilmesini istemiyordu. Bu aslında IP her değiştiğinde ssh sunucusunun yeniden başlatılmasını gerektirir.
Guntram Blohm, Monica'yı

1
@MichaelHampton: Bağırmak muhtemelen yardım etmeyecek, ödeyecek. IPv4 adreslerinin mevcut kıtlığı ile, çoğu sağlayıcı statik bir IPv4 adresi için ekstra ücret alır (bazıları statik olmayan bir genel IP adresi için ekstra ücret alır, aksi takdirde Dual Stack Lite alırsınız ). Tabii ki, OP IPv6'da ise, işler değişir ...
sleske

Yanıtlar:


21

Diğer cevaplar sorunuzdaki bir şeyi gözden kaçırmış gibi görünüyor:

Bu gerçekleştikten sonra, yeni IP adresini kullanarak bile uzaktan bağlanamıyorum

DDNS, yeni IP adresini bulmanıza yardımcı olacaktır, ancak buradaki sorun gibi görünmemektedir.

Ne yazık ki, ISP'nin bir yönlendirici sağladığı, sunucunun yönlendiricinin arkasında dahili bir adresi olduğu ve yönlendiricinin bağlantı noktası yönlendirmesini yaptığı standart kurulumda yeni bir IP alan sunucu bir sorun olmamalıdır . İyi bir yanıt almak için ağ topolojisi hakkında daha fazla bilgi vermeniz gerekebilir.

Tahmin edebileceğim, sunucunun bir yönlendiricinin arkasında olmaması ve kendi PPPoE bağlantısını yapmaması ve a) sunucunun yeniden başlatılması sırasında belirli bir arabirim adresine bağlanan ssh sunucusunun, b) gelen ssh'a izin veren bir güvenlik duvarı IP değiştiğinde yalnızca güvenlik duvarına sahip sunucunun IP'si güncellenmez.

İlk durumu kontrol etmek için, a netstat -nta | grep -w 22 | grep LISTEN. Eğer 0.0.0.0:22 diyorsa, sorun değil; belirli bir IP listeliyorsa, sshd config dosyasını ( /etc/sshd.conf) kontrol edin ListenAddress.

İkinci durumu kontrol etmek için iptables -L -n, INCOMINGzincirdeki kurallardan birinin sunucunuzun IP ve port 22 ile eşleşip eşleşmediğini kontrol edin.

Bunlardan birinin geçerli sunucu adresi varsa, adresi 0.0.0.0 olarak değiştirmeniz gerekir (güvenlik sonuçları hakkında bilgi sahibi olduğunuzdan emin olun) veya IP her değiştiğinde kuralı / yapılandırmayı güncellemeniz gerekir.

Düzenle

Sunucu bir yönlendiricinin arkasında olduğundan, yukarıdaki fikirler muhtemelen geçerli değildir (*). Bu kurulumda, yönlendiricinin harici bir IP'si vardır (günlük olarak değişir) ve dahili cihazlarınızın değişmemesi gereken bazı 10.xyz veya 192.168.xy adresleri olmalıdır. Harici adrese bağlandığınızda, yönlendiricinin dahili adrese bir bağlantı noktası yönlendirme kuralı olması gerekir.

Harici IP değiştiğinde bu bağlantı noktası iletimi kesilmemelidir (ancak mevcut ssh bağlantıları bırakılacaktır), ancak belki sizin tarafınızdan ayarlanmamış bir kuraldır, ancak bazı UPNP sihirbazı tarafından, yönlendirici alındığında UPNP'yi düşürür yeni bir adres ve sshd kuralı yalnızca yeniden başlatıldığında çağırır. Yönlendiricinin içine kendiniz bir bağlantı noktası iletici mi kurdunuz?

Ya da, sunucunun dahili IP'si değişir - bu durumda DHCP'nizle ilgili bir şey kopar. Sunucunuza sabit bir dahili adres verin.

Veya IPV6 mı kullanıyorsunuz? Bir cihazın izlemeyi daha az kolaylaştırmak için IP'sini değiştirmeye devam ettiği bazı yapılandırmalar vardır. Örneğin, bkz. Https://www.internetsociety.org/blog/2014/12/ipv6-privacy-addresses-provide-protection-against-surveillance-and-tracking/ - ancak bu durumda, size utanmayın orijinal yayınınızda bahsederek. Bu, yönlendiricinizin NAT yapmaması ve orijinal fikirlerimin bir yönlendiricinin arkasında bile geçerli olması anlamına gelebilir.


2
Sorunda sorulan soruları ele alan ilk cevap olduğu için +1.
kasperd

@Guntram Blohm Cevabınız için teşekkürler! Sunucu bir yönlendiricinin arkasında. Bu iki olasılık bu senaryoda hala geçerli olur mu? Eğer öyleyse, hedef makineye yerel olarak erişebildiğim zaman ertesi gün ikisini de kontrol edeceğim.
Richard

11

Dinamik DNS bir seçenektir, diğeri sunucu postasına sahip olmak veya size başka bir şekilde IP'sini göndermek. Basit bir HTTP çağrısı yapacaktır (istekleri kontrol ettiğiniz ve oturum açtığınız bir uç noktaya).

Tüm kamu ağını başka bir şekilde çözmek de mümkündür; sunucunun IP değişikliğinden etkilenmeyecek bir ters tünel veya bir VPN bağlantısı kurmasını sağlayabilirsiniz.

Hizmetlerin yeni adrese yanıt vermemesiyle ilgili: bu tamamen ağ kurulumunuza bağlıdır. Örneğin: DHCP aracılığıyla dahili bir arabirimdeki WAN IP'si ve yalnızca başlangıçta bilinen arabiriminizde IP'yi dinlemeye ayarlanmış bir SSH sunucusu, sshd'nin arabirim değişikliklerinde yeniden başlatılması gerektiği anlamına gelir.


1
Soruda açıklandığı gibi, yeni IP adresini bulmak için zaten bir çözüm var. Böylece dinamik DNS eklemek herhangi bir problemi gerçekten çözmez. Açıklandığı gibi sorun, ssh sunucusunun IP adresi değiştiğinde yanıt vermemesidir. Bu sorunu çözmediniz. VPN bağlantıları ve ters tünellerin IP değiştiğinde OTOH'nin çalışmayı durdurması beklenir, bu nedenle bunları otomatik olarak yeniden başlatmak için bir şeye ihtiyacınız vardır.
kasperd

7

Gerçekten ddns hizmetlerine bakmalısınız. Dinamik ip adresli belirli bir makineye uzaktan bağlanabildiği sürece; ddns en yaygın kullanılan çözümdür.

sından https://noip.com öyle errr ... supposedly..coff..cof .. Ücretsiz 1-3 makineleri (aynı ağ üzerinde çalışan için ise im değil yanlış, do not tırnak (bir hesap için ve kayıt Ben burada: Bu 'ücretsiz' hizmetlerin herhangi birine güvenmemin üzerinden bir süre geçti ...) Afraid DNS gibi başka alternatifler de var ( https://freedns.afraid.org/ Ve hatta, Cisco's, Açık DNS: de kullanılabilir (bu sadece müşteri değilseniz, bir şemsiye hesabı denemesi için kaydolmanızı, bir dönüş için almanızı ve daha sonra gerçek için kaydolmanızı öneririm anlaşma >>> hatta müşterileriniz ip değiştiğinde ddns ana bilgisayar adını otomatik olarak yenileyecek GUI benzeri indirilebilir uzantılardan birini aldım. müşterilerinizden birini çağırmanız ve GUI'yi indirmenizi istemeniz durumunda ....])


3
Bu, IP adreslerini değiştirme konusunda bir ana bilgisayara erişmek için kesinlikle yararlı olsa da, sorunun sorduğu şey bu değildir. Soru, ssh sunucusunun IP adresi değiştiğinde neden yanıt vermemesine ve nasıl düzeltileceğidir. Dinamik bir DNS hizmeti buna değinmez.
kasperd

4

SSH'yi ayarlayabiliyorum ve IP adresi değişene kadar hem yerel hem de uzaktan çalışıyor. Bu gerçekleştiğinde, yeni IP adresini kullanarak bile uzaktan bağlanamıyorum.

Bazen, DHCP değişikliklerinin geçerli olması biraz zaman alabilir. DHCP istemcisini hedef makinede geri dönüştürmeyi deneyin

$> sudo dhclient -r
$> sudo dhclient
Do I need to restart the service every time the IP address changes?
If so, why?

Hayır. Ssh hizmetinizi yalnızca yapılandırma değiştiğinde ( /etc/ssh/sshd_conf) geri dönüştürmeniz gerekir .

SSH erişimine izin vermek için IP adresi değiştiğinde yapmam gereken başka bir işlem var mı?

Hayır.

Hedef makinenizde sendmail kurulumu yaptığınızı varsayan bir çözümüm var.

Bu komut dosyası, dünyanın sahip olduğumuzu düşündüğü IP adresini gösteren bir e-posta gönderir (Teşekkürler ipify.org). E-posta her zaman en güncel IP adresine sahip olacaktır.

  1. Dhcp-notify bash betiği oluşturma (.sh uzantısı olmadan)
  2. Betiği koy /etc/dhcp/dhclient-exit-hooks.d

    #!/bin/sh
    case "$reason" in (BOUND|RENEW|REBIND|REBOOT)
    (
       echo To: me@my.email
       echo From: me@my.email
       echo "Content-Type: text/html; "
       echo Subject: DHCP reason: $reason
       echo
       echo Your IP address is: `curl -s https://api.ipify.org`
    ) | sendmail -t
    ;;
    esac
    

Bu işe yaramazsa, size geçerli IP adresini göndermek için her zaman bir cron ayarlayabilirsiniz (büyük / küçük harf ifadesini kaybetmek).

#!/bin/sh
(
   echo To: me@my.email
   echo From: me@my.email
   echo "Content-Type: text/html; "
   echo Subject: IP address change
   echo
   echo Your IP address is: `curl -s https://api.ipify.org`
) | sendmail -t

Bunu önermek üzereydim, bu harika bir fikir ve soruyu okuduğumda akla ilk gelen şeydi. Ayrıca, api.ipify.org ile ilgili sorun yaşıyorsanız (herhangi bir nedenle okul ağımda engelleniyorsa), birkaç ay önce yaptığım ve aynı şeyi yapan bu diğer siteyi kullanabilirsiniz: findip.win
undo

@karlchilders Cevabınız için teşekkürler! Zaten bana ip adresini bildiren bir cron betiğim var, ancak dhclient kancaları hakkında hiçbir fikrim yoktu. Bu muhteşem! Ben sadece gerçekten değiştiğinde IP rapor olmasını tercih ederim. Soru: Bu komut dosyası çalışıp IP adresini bildirebiliyorsa, geri dönüşüm DHclient'in SSH erişimi üzerinde neden bir etkisi olur?
Richard

@karlchilders Yoksa bu komut dosyası yalnızca dhclient'i el ile geri dönüştürdüğünüzde mi çalışır?
Richard

dhclient -r; dhclient, ana makinenizin güncel olması için dhcp kirasını yenileyecektir. Kancalar, manuel olarak veya başka bir şekilde bir dhcp olayı meydana geldiğinde çalışacaktır.
karlchilders

@Richard Lütfen cevaplardan birini tercih edilen cevap olarak işaretleyin. Teşekkür ederim.
karlchilders

3

Kutunun dışında düşünmek - sabit bir IPv6 adresi ayarlayabilir misiniz? Genellikle kıtlıkları nedeniyle değişmesi gereken sadece IPv4 adresleri.


Aşağı çektiğim IP adresi aslında her seferinde IPv6.
Richard

1
@Richard: Senin için işe yaramadığını duyduğuma üzüldüm. IPv4 ile bu sorunu yaşayan diğer insanlar için cevabı bırakacağım.
MSalters

@Richard Sorunuzda IPv6 ile uğraştığınızı gerçekten belirtmelisiniz. Bu, sorunu oldukça farklı kılar.
Dubu

1
@Dubu Gerçekten de sorunu farklı kılıyor. Bu tür bir problemin IPv6'da olması gerekmiyor, bu yüzden herkes IPv4 olduğunu varsaymış olabilir. Ancak, yanlışlıkla statik bir adres yerine bir gizlilik adresi kullanırsanız açıklanan belirtilerden bazılarını alabilirsiniz. Örneğin bir web sitesine IP adresinizin ne olduğunu sorarsanız, statik adresiniz yerine gizlilik adresinizi gösterir. Ve bunu ssh bağlantıları için kullanmak iyi bir fikir değildir. Yine de ssh sunucusu yeniden başlatılıncaya kadar neden çalışmadığını açıklamıyor.
kasperd

1
@Dubu: Bu oldukça standart olmayan bir yaklaşım. DHCPv6-PD (Önek Temsilcisi), DHCP Benzersiz Kimlikleri (DUID) ile birlikte bunu engellemelidir.
MSalters

1

Neredeyse bir yıldır yaptığım şey. Yerel üniversitemde bir konuşma yaparken bu yıl Ocak ayında sorununuzla karşılaştım.

Bu komut dosyası o zamandan beri makinemde çalışıyor: // Oldukça açıklayıcı //

import smtplib
from requests import get
import time

user = 'exampleemail@gmail.com'
psd = 'examplepassword'
msg = 'Hey, your ip has changed! Use this one from now on: '
currip = '0.0.0.0' # It'll send an email the first time you execute this aswell
while True:
    newip = get('https://api.ipify.org').text
    if currip == newip:
        print("nonewip")
        #You can just comment the line above this one if you want to
    else:
        tmpmsg = "\n"+msg + newip +" The old one used to be: "+currip
        currip = newip
        server = smtplib.SMTP('smtp.gmail.com', 587)
        server.connect('smtp.gmail.com')
        server.ehlo()
        server.starttls()
        server.ehlo()
        server.login(user,psd)
        #You can change the second parameter, use ('from','to','message')
        server.sendmail(user, user, tmpmsg)

        server.quit()
        with open('/home/pi/DEV/iphistory.txt', 'a') as f:
            f.write('newip: '+currip+'\n')
            f.close()
        print('New IP Found: '+tmpmsg)
    time.sleep(7200)

Python 3.x kusursuz çalışmalıdır Belki orada en iyi çözüm değil, ama işe yarıyor.

Makinenin genel IP'si her değiştiğinde Gelen Kutunuza bir e-posta gönderilir.

Şimdi, sorularınızla ilgili olarak:

IP adresi her değiştiğinde hizmeti yeniden başlatmam gerekir mi? Hizmeti yeniden başlatarak ssh bağlantısını yeniden kurmayı kastediyorsanız, evet.

Öyleyse neden? Çünkü iletişim kurmaya çalıştığınız adres artık aradığınız hizmeti sağlamıyorsa. Artık senin makinen değil.

SSH erişimine izin vermek için IP adresi değiştiğinde yapmam gereken başka bir işlem var mı? Yeni adrese sadece SSH.

Şerefe! JSR


@ JSR cevabı için teşekkürler! Aslında IP adresini bana bildirmek için benzer bir komut dosyası yazdım. Ancak bir kez değiştiğinde, hatta yeni IP adresini bile bilerek, uzak makineye SSH yapamıyorum. Bu sorunla karşılaştınız mı?
Richard

Doğru adresi aldığınızdan emin misiniz? öyleyse, IP'yi aldıktan sonra ping atmayı deneyin. Bu sorunu daha önce hiç görmedim Ayrıca bilmiyor olmanız durumunda, komut dosyasını "python3 scriptname.py &" ile arka planda çalıştırabilirsiniz. Ayrıca, yönlendiricinin yönlendirme portlarını kontrol edin, yerel IP'nin değişmiyor, ama yine de kontrol etmeye değer.
Jaime Satorres Rey

Evet, IP doğrudur. Hedef makinede SSH hizmetini yeniden başlatırsam, tekrar bağlanabilirim. Ama neden böyle olması gerektiğini anlamıyorum.
Richard

@ Buradaki sorun, IP'niz değiştiği için, kimlik doğrulamak için kullandığınız RSA Anahtarı istediği anahtarla eşleşmediği için ana makinenizin her bağlantıyı durdurmasıdır. Hiçbir şekilde bu konuda uzman değilim, bu yüzden sözlerimi gerçek olarak almayın ... Ama durumunuz muhtemelen söylediğimden dolayı böyle.
Jaime Satorres Rey

1

Bunu farklı bir taraftan görüntülemeye değer: genellikle, dikkatinizi gerektiren makineden dışa doğru bir bağlantı oluşturmak çok daha basittir (DNS, NAT ve diğer güvenlik duvarı ayarları hiç önemli değildir veya çok daha basittir).

Bunu, uzak bir makineye girmek için kurşun geçirmez ve basit bir çözüm oluşturmak için kullanabilirsiniz R. Tek gereklilik, sshkendi yerel makinelerinizden birine genel erişim sağlayabilmenizdir (diyelim S). Sonra aşağıdaki gibi devam edin:

  1. Dışa oluşturma sshbağlantıyı Riçin S, ters bir tünel geri kurulmasıR :

    ssh -L 22:<address-of-S>:22000

  2. Açık S, sshuzak makineye gitmek için ters tüneli kullanın R:

    ssh -p 22000 127.0.0.1

Adım 1, yardım gerektiğinde uzak taraf tarafından manuel olarak ve isteğe bağlı olarak tetiklenebilir. Alternatif olarak, Rböyle bir ters tüneli sürekli olarak koruyacak bir hizmet oluşturabilirsiniz S.

Güvenlik duvarlarının / NAT'ın arkasında olan ve hiç DNS girişi olmayan uzak (mobil) sistemlerde oturum açmak için böyle bir kurulum kullandım.


1

Sadece uzaktan oturum açmaya ihtiyacınız varsa, mosh kullanın . IP değişiklikleriyle (geçiş sırasında neredeyse hiç gecikme olmadan) mükemmel bir şekilde baş edebilmenin yanı sıra, sshyerel tahmin yankısı, düşük gecikme, kırık bağlantılardan daha hızlı kurtarma gibi düzeye göre başka avantajları da vardır .

Özellikle ihtiyacınız varsa ssh(örneğin, X11 yönlendirmesine veya başka bir şeye ihtiyacınız varsa), VPN'yi (örn. OpenVPN), tercihen UDP üzerinden, kısa bir kalmayla kurmanızı öneririm. VPN üzerinden TCP bağlantıları (yani ssh'niz) IP değişikliğinden sonra iyileşir ve bağlı kalır, yalnızca daha uzun sürer (bir dakika kadar), ancak /proc/sys/net/ipv4/tcp_*daha kabul edilebilir hale getirmek için girişlerle oynayabilirsiniz .

Düzenle:

  • mosh sshkimlik doğrulaması gerektirir, ancak kimlik doğrulandıktan sonra bağlantı, siz oturumu kapatana (veya yeniden başlatılıncaya kadar) kalır ve sshboş zamanınızdaki başarısızlığı araştırabilirsiniz (örn. strace -f -p pid_of_sshd )
  • buradan uyarlanmış cevap mosholmadan kullanmak mümkündür :ssh

Sunucu çalıştırıldığında:

mosh-server new -p $randomport -- $shellprogram

şöyle bir sonuç alırsın QzdRHbAWzL7eRobi75DCrz

İstemci çalıştırıldığında:

MOSH_KEY=QzdRHbAWzL7eRobi75DCrz mosh-client $serverip $radomport

Bunun $serveripbir ip olması gerektiğini, ana bilgisayar adı çözümlemesi olmadığını unutmayın.

Anahtarı bir taraftan diğerine nasıl alacağınız size kalmış. Önceden paylaşılan bir anahtarla şifrelemeyi ve anlık mesajlaşma, posta göndermeyi veya yerel bir kullanıcıyı telefon görüşmesi yoluyla dikte etmeyi öneririm.

  • Eğer gerçekten bir sorun varsa, ssh'yi oradan daemon olarak değil, oradan sshyükleyin inetdve çalıştırın, örn. inetd forks handle ipv6) ile ilişkili olan kısmını dışarı aktarmak suretiyle yedek oluşturmanız gerekir:

ssh stream tcp6 nowait root /usr/sbin/sshd sshd -i


1
Cevabınız için teşekkürler @Radovan! Mosh ilginç görünüyor, ancak kimlik doğrulaması için SSH kullanıyor gibi görünüyor. Yani problemimin kökü hala var olacaktı, değil mi? Dokümanları yanlış anladıysam bana bildirin.
Richard

@Richard Evet, ancak olasılıklar var ... Cevabımı düzenledim.
Radovan Garabík
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.