GNU/Linux >> Belajar Linux >  >> Linux

Linux – Cara Portabel Untuk Mendapatkan Alamat Sumber Rute Default?

Saya perlu mendapatkan alamat IP yang digunakan sebagai sumber untuk paket yang dikirim melalui default rute . (EDIT) Harap dicatat bahwa saya mengacu pada default rute, yang ditandai sebagai default di ip r (lihat di bagian akhir untuk mengetahui rute sebenarnya yang akan diambil paket di bawah pengaturan VPN saya).

Ide pertama saya adalah menggunakan ip r dan menyimpulkan ini dari sana:

# ip r
0.0.0.0/1 via 10.0.2.1 dev tun0
default via 10.237.76.1 dev enxb827eb4297a4 src 10.237.77.206 metric 202
10.0.2.0/24 dev tun0 proto kernel scope link src 10.0.2.100
10.81.102.133 via 10.237.76.1 dev enxb827eb4297a4
10.237.76.0/22 dev enxb827eb4297a4 proto kernel scope link src 10.237.77.206 metric 202
128.0.0.0/1 via 10.0.2.1 dev tun0

Itu terlihat bagus, sebuah ip r | grep default | cut -d" " -f7 memberi saya 10.237.77.206 yang diharapkan .

Kemudian, pada sistem lain (keduanya merupakan turunan debian) saya mendapatkan

# ip r
0.0.0.0/1 via 10.0.2.1 dev tun0
default via 10.237.76.1 dev eth0  metric 202
10.0.2.0/24 dev tun0  proto kernel  scope link  src 10.0.2.5
10.81.102.133 via 10.237.76.1 dev eth0
10.237.76.0/22 dev eth0  proto kernel  scope link  src 10.237.76.56  metric 202
128.0.0.0/1 via 10.0.2.1 dev tun0

Di sini solusinya tidak sesederhana:Saya perlu mengekstrak IP rute default (10.237.76.1 ), cocokkan dengan rute yang sesuai (10.237.76.0/22 dev eth0 proto kernel scope link src 10.237.76.56 metric 202 ) yang diharapkan akan menyertakan src .

Akhirnya memotong dari output ip tidak akan menahan air dalam jangka panjang (perubahan output, variasi output antara distro atau versi, ...)

Apakah ada cara yang lebih portabel untuk mendapatkan IP tersebut?

Dengan “portabel” yang saya maksud:

  • idealnya “berfungsi di semua Linux”
  • kurang ideal tapi masih bagus "berfungsi di Debian dan turunannya"

Harap dicatat bahwa perangkat dalam VPN eksklusif jadi saya tidak dapat langsung menganalisis rute sebenarnya yang akan diambil paket saat VPN menyala (yaitu, sebagian besar waktu):default rute ditutupi oleh dua rute lain, yang secara efektif mencakup seluruh rentang IP. Mohon koreksi saya jika saya salah di sini.

Jawaban yang Diterima:

Anda dapat memilih alamat arbitrer yang Anda yakini akan selalu diakses melalui rute default, misalnya google DNS, lalu mencetak alamat sumber untuk itu rute:

ip route get 8.8.8.8 | awk '{ for (nn=1;nn<=NF;nn++) if ($nn~"src") print $(nn+1) }'

Linux
  1. Dapatkan alamat IP dari sebuah antarmuka di Linux

  2. Python:dapatkan gateway default untuk antarmuka/alamat ip lokal di linux

  3. Bagaimana cara menentukan alamat gateway eth0 jika itu bukan gateway default?

  1. Linux memberi kekuatan pada internet, konfirmasi komisaris UE

  2. 4 sesi video untuk sysadmin Linux

  3. Linux - temukan hit dari rute default

  1. Cara Meningkatkan ke Linux Mint 20.3:Cara yang Benar

  2. Cara Portabel (posix) Untuk Mencapai Substitusi Proses?

  3. Cara Mengubah Shell Default Di Linux