Saya rasa tidak ada jawaban pasti yang benar untuk pertanyaan Anda. Sebaliknya, ada banyak cara untuk mendekati apa yang Anda inginkan. Karenanya saya akan memberikan beberapa petunjuk bagaimana menyelesaikannya.
Jika mesin memiliki lebih dari 2 antarmuka ( lo
dihitung sebagai satu) Anda akan mengalami masalah untuk mendeteksi otomatis antarmuka yang benar dengan mudah. Berikut beberapa resep tentang cara melakukannya.
Masalahnya, misalnya, adalah jika host berada dalam DMZ di belakang firewall NAT yang mengubah IP publik menjadi beberapa IP pribadi dan meneruskan permintaan. Mesin Anda mungkin memiliki 10 antarmuka, tetapi hanya satu yang sesuai dengan antarmuka publik.
Bahkan deteksi otomatis tidak berfungsi jika Anda menggunakan NAT ganda, di mana firewall Anda bahkan menerjemahkan IP sumber menjadi sesuatu yang sama sekali berbeda. Jadi Anda bahkan tidak dapat memastikan, bahwa rute default mengarah ke antarmuka Anda dengan antarmuka publik.
Mendeteksi melalui rute default
Ini adalah cara yang saya rekomendasikan untuk mendeteksi berbagai hal secara otomatis
Sesuatu seperti ip r get 1.1.1.1
biasanya memberi tahu Anda antarmuka yang memiliki rute default.
Jika Anda ingin membuat ulang ini dalam bahasa skrip / pemrograman favorit Anda, gunakan strace ip r get 1.1.1.1
dan ikuti jalan bata kuning.
Setel dengan /etc/hosts
Ini adalah rekomendasi saya jika Anda ingin tetap memegang kendali
Anda dapat membuat entri di /etc/hosts
like
80.190.1.3 publicinterfaceip
Kemudian Anda dapat menggunakan alias ini publicinterfaceip
untuk merujuk ke antarmuka publik Anda.
Sayangnya haproxy
tidak melakukan trik ini dengan IPv6
Gunakan lingkungan
Ini adalah solusi yang baik /etc/hosts
jika Anda tidakroot
Sama seperti /etc/hosts
. tetapi gunakan lingkungan untuk ini. Anda dapat mencoba /etc/profile
atau ~/.profile
untuk ini.
Karenanya, jika program Anda membutuhkan variabel MYPUBLICIP
maka Anda dapat memasukkan kode seperti (ini adalah C, silakan buat C ++ darinya):
#define MYPUBLICIPENVVAR "MYPUBLICIP"
const char *mypublicip = getenv(MYPUBLICIPENVVAR);
if (!mypublicip) { fprintf(stderr, "please set environment variable %s\n", MYPUBLICIPENVVAR); exit(3); }
Jadi Anda bisa memanggil script / program Anda /path/to/your/script
seperti ini
MYPUBLICIP=80.190.1.3 /path/to/your/script
ini bahkan berhasil crontab
.
Hitung semua antarmuka dan hilangkan yang tidak Anda inginkan
Cara putus asa jika Anda tidak dapat menggunakan ip
Jika Anda tahu apa yang tidak Anda inginkan, Anda dapat menghitung semua antarmuka dan mengabaikan semua yang salah.
Di sini sepertinya sudah menjadi jawaban https://stackoverflow.com/a/265978/490291 untuk pendekatan ini.
Lakukan seperti DLNA
Cara orang mabuk yang mencoba menenggelamkan dirinya dalam alkohol
Anda dapat mencoba menghitung semua gerbang UPnP di jaringan Anda dan dengan cara ini menemukan rute yang tepat untuk beberapa hal "eksternal". Ini bahkan mungkin pada rute di mana rute default Anda tidak menunjuk.
Untuk lebih lanjut tentang ini mungkin lihat https://en.wikipedia.org/wiki/Internet_Gateway_Device_Protocol
Ini memberi Anda kesan yang baik mana yang merupakan antarmuka publik Anda yang sebenarnya, meskipun rute default Anda mengarah ke tempat lain.
Ada lebih banyak lagi
Dimana gunung bertemu nabi
Router IPv6 mengiklankan dirinya sendiri untuk memberi Anda awalan IPv6 yang benar. Melihat awalan memberi Anda petunjuk tentang apakah itu memiliki beberapa IP internal atau global.
Anda dapat mendengarkan frame IGMP atau IBGP untuk mengetahui beberapa gateway yang sesuai.
Ada kurang dari 2 ^ 32 alamat IP. Oleh karena itu, tidak butuh waktu lama di LAN untuk melakukan ping ke semuanya. Ini memberi Anda petunjuk statistik tentang di mana sebagian besar Internet berada dari sudut pandang Anda. Namun Anda harus sedikit lebih bijaksana daripada https://de.wikipedia.org/wiki/SQL_Slammer yang terkenal
ICMP dan bahkan ARP adalah sumber yang baik untuk informasi sideband jaringan. Ini mungkin membantu Anda juga.
Anda dapat menggunakan alamat Ethernet Broadcast untuk menghubungi semua perangkat infrastruktur jaringan Anda yang sering kali akan membantu, seperti DHCP (bahkan DHCPv6) dan sebagainya.
Daftar tambahan ini mungkin tidak ada habisnya dan selalu tidak lengkap, karena setiap produsen perangkat jaringan sibuk menciptakan lubang keamanan baru tentang cara mendeteksi perangkat mereka sendiri secara otomatis. Yang sering membantu banyak tentang cara mendeteksi beberapa antarmuka publik di mana tidak boleh ada satu pun.
'Kata Nuff. Di luar.