Masalah saya adalah menemukan cara untuk SSH ke server Linux (Ubuntu 18.04) yang alamat IP-nya berubah setiap hari.
Saya memiliki klien yang saya sesekali membantu tugas admin. Saya perlu ssh ke mesin ketika mereka membutuhkan bantuan, tetapi mereka tidak memiliki IP statis, sehingga IP publik server terus berubah. Saya membuat skrip kecil untuk melaporkan alamat IP mesin Linux, dan menemukan bahwa itu berubah sekali per hari sekitar tengah hari.
Saya dapat mengatur SSH, dan berfungsi baik secara lokal maupun jarak jauh ... sampai alamat IP berubah. Setelah itu terjadi, saya tidak lagi dapat terhubung dari jarak jauh bahkan menggunakan alamat IP baru.
- Apakah saya perlu memulai kembali layanan SSH setiap kali alamat IP berubah?
- Jika demikian, mengapa?
- Apakah ada tindakan lain yang perlu saya ambil ketika alamat IP berubah untuk memungkinkan akses SSH?
MEMPERBARUI
Agar jelas, masalah saya BUKAN menemukan alamat IP baru. Saya sudah punya skrip untuk melakukannya. Masalahnya adalah server berhenti merespons setelah perubahan IP, meskipun saya mencoba menghubungkan menggunakan alamat IP baru.
Jika saya memulai kembali layanan SSH pada mesin target, saya memiliki akses jarak jauh lagi. Tetapi saya tidak mengerti mengapa saya harus melakukan ini. Saya ingin tahu akar penyebabnya dengan harapan menemukan solusi yang lebih baik.
Kebanyakan orang tampaknya berpikir SSH harus bekerja selama kita tahu IP baru, jadi apakah ini sesuatu yang unik untuk 18,04? Saya menginstal server ini untuk klien baru-baru ini, jadi semua pengaturan konfigurasi masih default. (The tidak akan tahu bagaimana mengubahnya.)
sumber
ListenAddress <dynamic host name>
di file konfigurasi sshd, mungkin karena seseorang tidak ingin pengguna internal dapat ssh ke server. Ini sebenarnya membutuhkan restart server ssh setiap kali IP berubah.Jawaban:
Jawaban lain tampaknya mengabaikan satu hal dalam pertanyaan Anda:
DDNS akan membantu Anda menemukan alamat IP baru, tetapi itu tampaknya tidak menjadi masalah di sini.
Sayangnya, server yang mendapatkan IP baru seharusnya tidak menjadi masalah dalam pengaturan standar di mana ISP menyediakan router, server memiliki alamat internal di belakang router, dan router melakukan port forwarding. Anda mungkin perlu memberikan informasi lebih lanjut tentang topologi jaringan untuk mendapatkan jawaban yang baik.
Apa yang bisa saya bayangkan adalah server tidak berada di belakang router dan melakukan koneksi PPPoE sendiri, dan a) server ssh mengikat ke alamat antarmuka spesifik pada titik server restart, b) firewall pada mesin yang memungkinkan masuk ssh untuk hanya IP server dengan firewall yang tidak diperbarui ketika IP berubah.
Untuk memeriksa kasus pertama, lakukan a
netstat -nta | grep -w 22 | grep LISTEN
. Jika dikatakan 0.0.0.0:22, tidak apa-apa; jika daftar IP tertentu, lalu periksa file konfigurasi sshd (/etc/sshd.conf
) untukListenAddress
.Untuk memeriksa kasus kedua, lakukan
iptables -L -n
dan periksa apakah salah satu aturan dalamINCOMING
rantai cocok dengan IP dan port 22 server Anda.Jika salah satu dari ini memiliki alamat server saat ini, Anda harus mengubahnya ke 0.0.0.0 (pastikan Anda tahu tentang implikasi keamanan), atau perbarui aturan / konfigurasi setiap kali IP berubah.
Edit
Karena server berada di belakang router, ide-ide di atas mungkin tidak berlaku (*). Dalam pengaturan ini, router memiliki IP eksternal (yang berubah setiap hari), dan perangkat internal Anda harus memiliki beberapa alamat 10.xyz atau 192.168.xy yang seharusnya tidak berubah. Anda terhubung ke alamat eksternal, dan router harus aturan penerusan port ke alamat internal.
Port forwarding ini seharusnya tidak rusak ketika IP eksternal berubah (koneksi ssh yang ada akan dihapus namun), tapi mungkin itu aturan yang tidak diatur oleh Anda, tetapi oleh beberapa sihir UPNP, dengan router menjatuhkan UPNP ke depan saat mendapat alamat baru, dan sshd hanya menjalankan aturan ketika restart. Apakah Anda mengatur port forwarder di dalam router sendiri.
Atau, itu adalah IP internal server yang berubah - dalam hal ini, ada sesuatu yang sangat rusak dengan DHCP Anda. Berikan server Anda alamat internal yang tetap.
Atau, apakah Anda menggunakan IPV6? Ada beberapa konfigurasi di mana perangkat terus mengubah IP-nya untuk membuatnya lebih mudah dilacak. Lihat, misalnya, https://www.internetsociety.org/blog/2014/12/ipv6-privacy-addresses-provide-protection-against-surveillance-and-tracking/ - tetapi dalam kasus itu, malu Anda karena tidak menyebutkannya di posting asli Anda. Ini mungkin berarti router Anda tidak melakukan NAT sama sekali, dan ide asli saya masih berlaku bahkan di belakang router.
sumber
Dynamic DNS adalah satu opsi, yang lain memiliki server mail atau mengirimkan IP kepada Anda. Panggilan HTTP sederhana akan dilakukan (ke titik akhir yang Anda kontrol dan masuk permintaan).
Memecahkan seluruh jaringan publik dengan cara sebaliknya juga dimungkinkan; Anda bisa meminta server memasang tunnel terbalik, atau koneksi VPN, yang tidak akan terpengaruh oleh perubahan IP.
Mengenai layanan yang tidak merespons pada alamat baru: ini sepenuhnya tergantung pada pengaturan jaringan Anda. Sebagai contoh: WAN IP pada antarmuka internal melalui DHCP dan server SSH diatur untuk hanya mendengarkan IP pada antarmuka Anda yang dikenal saat startup akan berarti sshd harus dihidupkan ulang pada perubahan antarmuka.
sumber
Anda harus benar-benar melihat ke layanan dns. Sejauh bisa terhubung ke mesin tertentu dengan alamat ip dinamis; ddns adalah solusi yang paling umum digunakan.
buka https://noip.com dan daftar untuk akun (ini, errr ... seharusnya..coff..cof .. Gratis untuk 1-3 mesin yang berjalan di jaringan yang sama (jika saya tidak salah, jangan kutip, jangan kutip) saya di sini: sudah lama sejak saya percaya salah satu dari layanan 'gratis' ini ...). Ada juga alternatif lain seperti DNS Takut ( https://freedns.afraid.org/ Dan bahkan, Cisco's, Open DNS: juga dapat digunakan (asalkan ini bukan Anda hanya klien, saya sarankan Anda mendaftar untuk uji coba akun payung, ambil putaran dan kemudian daftar untuk yang sebenarnya berurusan >>> mereka bahkan mendapat salah satu dari mereka ekstensi yang dapat diunduh seperti GUI yang secara otomatis akan memperbarui hostname ddns setiap kali klien Anda berubah. Ini benar-benar, cara cerdas yang paling tidak mengerti teknologi yang saya ketahui [hanya di jika Anda harus memanggil salah satu klien Anda dan meminta saya untuk mengunduh GUI ...])
sumber
Terkadang, perlu beberapa saat agar perubahan DHCP berlaku. Cobalah untuk mendaur ulang klien DHCP pada mesin target
Tidak. Anda hanya perlu mendaur ulang layanan ssh Anda ketika konfigurasi berubah (
/etc/ssh/sshd_conf
).Tidak.
Saya punya solusi yang mengasumsikan Anda telah mengatur sendmail di mesin target Anda.
Skrip ini mengirimkan email yang menunjukkan alamat IP yang menurut dunia kami miliki (Terima kasih ipify.org). Email akan selalu memiliki alamat IP terbaru.
Masukkan skrip
/etc/dhcp/dhclient-exit-hooks.d
Jika ini tidak berhasil, Anda selalu dapat mengatur cron untuk mengirimi Anda alamat IP saat ini (kehilangan pernyataan kasus).
sumber
Berpikir di luar kotak - dapatkah Anda mengatur alamat IPv6 yang tetap? Biasanya hanya alamat IPv4 yang perlu diubah, karena kelangkaannya.
sumber
Apa yang telah saya lakukan selama hampir setahun. Saya mengalami masalah Anda pada bulan Januari tahun ini saat memberikan pidato di universitas lokal saya.
Script ini telah berjalan di komputer saya sejak saat itu: // Cukup jelas
Python 3.x harus bekerja dengan sempurna. Mungkin bukan solusi terbaik di luar sana, tetapi berhasil.
Anda akan mendapatkan email di Kotak Masuk Anda setiap kali IP publik mesin berubah.
Sekarang, mengenai pertanyaan Anda:
Apakah saya perlu memulai ulang layanan setiap kali alamat IP berubah? Jika dengan me-restart layanan yang Anda maksud membangun kembali koneksi ssh, ya.
Jika demikian, mengapa? Karena jika alamat yang Anda coba komunikasikan tidak lagi menyediakan layanan yang Anda cari. Ini bukan mesinmu lagi.
Apakah ada tindakan lain yang perlu saya ambil ketika alamat IP berubah untuk memungkinkan akses SSH? Hanya SSH ke alamat baru.
Bersulang! JSR
sumber
Ada baiknya melihat ini dari sisi yang berbeda: biasanya, jauh lebih mudah untuk membuat koneksi keluar dari mesin yang membutuhkan perhatian Anda (DNS, NAT dan pengaturan firewall lainnya tidak masalah sama sekali atau jauh lebih sederhana).
Anda bisa menggunakan ini untuk membuat solusi anti peluru dan sederhana untuk masuk ke mesin jarak jauh
R
. Satu-satunya persyaratan adalah Anda dapat memberikanssh
akses publik ke salah satu mesin lokal Anda sendiri (sebut sajaS
). Kemudian lanjutkan sebagai berikut:Buat
ssh
koneksi keluar dariR
keS
, buat terowongan terbalik kembali keR
:ssh -L 22:<address-of-S>:22000
Aktif
S
, gunakan terowongan terbalik untukssh
masuk ke mesin jarak jauhR
:ssh -p 22000 127.0.0.1
Langkah 1 dapat dipicu secara manual dan sesuai permintaan oleh sisi jarak jauh kapan pun bantuan Anda diperlukan. Atau, Anda dapat membuat layanan
R
yang akan terus mempertahankan terowongan terbalik tersebutS
.Saya menggunakan pengaturan seperti itu untuk masuk ke sistem (mobile) jarak jauh yang berada di belakang firewall / NAT dan yang tidak memiliki entri DNS sama sekali.
sumber
Jika Anda hanya perlu login jarak jauh, gunakan mosh . Selain mampu mengatasi perubahan IP dengan sangat baik (dengan hampir tidak ada latensi selama sakelar), ia juga memiliki keunggulan lain dibandingkan dataran
ssh
, seperti gema prediksi lokal, latensi rendah, cara pemulihan yang lebih cepat dari tautan yang rusak.Jika Anda secara khusus membutuhkan
ssh
(katakanlah, Anda memerlukan penerusan X11 atau sesuatu), saya sarankan untuk menyiapkan VPN (misalnya OpenVPN), lebih disukai daripada UDP, dengan keepalive singkat. Koneksi TCP (yaitu ssh Anda) melalui VPN akan pulih dan tetap terhubung setelah perubahan IP, itu hanya akan memakan waktu lebih lama (hingga satu menit atau lebih), tetapi Anda dapat bermain dengan/proc/sys/net/ipv4/tcp_*
entri untuk membuatnya lebih dapat diterima.Edit:
ssh
otentikasi, tetapi setelah dikonfirmasi, koneksi tetap sampai Anda keluar (atau reboot), dan Anda dapat menyelidiki kegagalanssh
sesuka hati (mis. strace -f -p pid_of_sshd )mosh
tanpassh
, jawab diadaptasi dari sini :Di server dijalankan:
Anda mendapatkan hasil seperti
QzdRHbAWzL7eRobi75DCrz
Pada klien dijalankan:
Catatan yang
$serverip
harus ip, tidak ada resolusi nama host.Bagaimana Anda mendapatkan kunci dari satu sisi ke sisi yang lain terserah Anda. Saya sarankan mengenkripsi dengan kunci yang dibagikan sebelumnya dan pesan instan, mengirim surat, atau membuat pengguna lokal mendiktekannya melalui panggilan telepon.
ssh
, instalinetd
dan jalankan ssh dari sana, bukan sebagai daemon mandiri, misalnya dengan baris konfigurasi ini untuk inetd.conf "klasik", ini akan menjalankan daemon baru setiap kali Anda masuk (perhatikan bahwa tidak semua garpu inetd menangani ipv6):ssh stream tcp6 nowait root /usr/sbin/sshd sshd -i
sumber