Di Linux, metrik apa yang memiliki rute tanpa metrik?

11

Jika Anda memiliki (dalam Linux) dua rute ini:

default via 192.168.1.1 dev enp58s0f1
default via 192.168.16.1 dev wlp59s0  proto static  metric 600

Saya berharap yang pertama digunakan, tapi bukan itu masalahnya: yang kedua digunakan.

Jika saya mengubahnya ke ini:

default via 192.168.1.1 dev enp58s0f1  proto static  metric 100 
default via 192.168.16.1 dev wlp59s0  proto static  metric 600

Maka itu berfungsi seperti yang diharapkan. Tampaknya "tidak ada metrik" adalah metrik yang lebih buruk (lebih tinggi) daripada angka apa pun, alih-alih metrik 0.

Apa yang terjadi? Apakah khusus untuk Linux, atau standar jaringan?

Terima kasih sebelumnya.

rsuarez
sumber

Jawaban:

6

Apakah Anda yakin dengan pengamatan pertama Anda? Apa yang ditunjukkan ip route showatau route -nditunjukkan? Apakah hasilnya berubah jika Anda menambahkan proto staticdalam kasus pertama?

Saya telah menemukan setidaknya dua sumber yang secara eksplisit mengatakan bahwa itu 0adalah nilai default di Linux:

Seorang hacker kernel Linux pasti akan dibutuhkan untuk menyelesaikannya.

Default apa pun yang dipilih jelas OS spesifik. Artikel ini ( https://support.microsoft.com/en-us/help/299540/an-explanation-of-the-automatic-metric-feature-for-ipv4-routes ) misalnya menunjukkan bahwa Windows memilih metrik default berdasarkan bandwidth dari tautan tersebut.

Patrick Mevzek
sumber
Saya menandai jawaban Anda sebagai yang benar karena saya tidak melihat lagi perilaku ini di komputer saya. Saya menyalahkan itu dalam beberapa hal aneh yang terjadi di komputer desktop dengan Ubuntu, setidaknya dengan versi yang saya miliki pada saat pertanyaan. Saya belum melihatnya terjadi di beberapa kotak lain yang menjalankan Ubuntu LTS. Jadi, X-File (apakah referensi itu terlalu tua saat ini?). Terima kasih atas jawaban anda!
rsuarez
6

Karena rute ini berada di subnet yang berbeda, ada lebih banyak yang terlibat di sini daripada hanya metrik. Misalnya, jika lalu lintas berasal pada subnet 192.168.1.1, dan ada rute non-default yang cocok di tabel perutean Anda, maka rute itu akan cocok melalui pencocokan awalan terpanjang sebelum metrik dipertimbangkan.

Dengan asumsi rute non-default tidak cocok, maka tidak memiliki metrik harus ditafsirkan oleh kernel sebagai memiliki metrik 0, dan karenanya rute prioritas tertinggi. Meskipun itu adalah tampilan yang sederhana karena beberapa daemon routing nantinya akan menerjemahkan metrik default menjadi nilai lain seperti 1024. Saya berharap ini adalah apa yang terjadi pada Anda dan distro Anda yang tidak disebutkan namanya.

Jika ip routetidak menunjukkan metrik sama sekali, Anda dapat mengonfirmasi bahwa itu memang 0 dengan menggunakan route -nperintah yang lebih lama dari paket net-tools atau cat /proc/net/route. Namun, output ini tidak selalu cocok dengan apa yang akan digunakan daemon routing secara internal ketika menemui nilai 0 metrik.

Lebih jauh lagi bagaimana Anda membuat rute juga penting. ip routemenggunakan netlink API, sementara routemenggunakan ioctl. Kode untuk bagaimana metrik default dibuat antara dua pendekatan menghasilkan nilai metrik yang berbeda. Misalnya: membuat rute default IPv6 via ip routeakan menghasilkan nilai metrik 1024 pada RHEL 7, sementara membuat rute yang sama via routeakan menghasilkan metrik 1.

Dari RedHat :

  • jika tidak ada yang dilewatkan ke perintah rute sebagai metrik rute, nilai 1 digunakan oleh perintah itu sendiri.
  • Jika tidak ada yang dilewatkan ke perintah ip sebagai metrik rute atribut tidak dibuat sama sekali dan kernel memahaminya sebagai 0, yang kemudian diterjemahkan 1024 sebagai default.
noobish
sumber