Apakah Anda yakin tentang pengamatan pertama Anda? Apa artinya ip route show
atau route -n
menunjukkan kemudian? Apakah hasilnya berubah jika Anda menambahkan proto static
dalam kasus pertama?
Saya telah menemukan setidaknya dua sumber yang secara eksplisit mengatakan bahwa 0
adalah nilai default di Linux:
- http://0pointer.de/lennart/projects/ifmetric/ :Metrik default untuk rute di kernel Linux adalah 0, artinya prioritas tertinggi.
- http://www.man7.org/linux/man-pages/man8/route.8.html :Jika opsi ini tidak ditentukan, metrik untuk keluarga alamat inet6 (IPv6) default ke '1' , untuk inet (IPv4) standarnya adalah '0'. (kemudian mengisyaratkan bahwa default mungkin berbeda saat menggunakan
iproute2
tetapi analisis sumber-sumber ini tidak menunjukkan apa itu)
Seorang peretas kernel Linux pasti diperlukan untuk menyelesaikannya.
Juga default apa pun yang dipilih jelas spesifik untuk OS. 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 lebar pita tautan.
Karena rute ini berada di subnet yang berbeda, ada lebih banyak hal yang terlibat di sini selain metrik. Jika lalu lintas asal ada di subnet 192.168.1.1, misalnya, dan ada rute non-default yang cocok di tabel perutean Anda, maka rute tersebut akan cocok melalui pencocokan awalan terlama sebelum metrik dipertimbangkan.
Dengan asumsi rute non-default tidak cocok, maka tidak ada metrik seharusnya ditafsirkan oleh kernel memiliki metrik 0, dan oleh karena itu rute prioritas tertinggi. Meskipun itu pandangan sederhana karena beberapa daemon perutean nantinya akan menerjemahkan metrik default tersebut ke nilai lain seperti 1024. Saya berharap inilah yang terjadi pada Anda dan distro Anda yang tidak disebutkan namanya.
Jika ip route
tidak menunjukkan metrik sama sekali, Anda dapat mengonfirmasi bahwa itu memang 0 dengan menggunakan route -n
yang lebih lama perintah dari paket net-tools atau cat /proc/net/route
. Namun, output ini tidak selalu cocok dengan apa yang akan digunakan daemon perutean secara internal saat menemukan nilai metrik 0.
Selain itu, cara Anda membuat rute juga penting. ip route
menggunakan API netlink, sedangkan route
menggunakan ioctl. Kode bagaimana metrik default dibuat antara dua pendekatan menghasilkan nilai metrik yang berbeda. Misalnya:membuat rute default IPv6 melalui ip route
akan menghasilkan nilai metrik 1024 pada RHEL 7, sambil membuat rute yang sama melalui route
akan menghasilkan metrik 1.
Dari RedHat:
- jika tidak ada yang diteruskan ke perintah rute sebagai metrik rute, nilai 1 digunakan oleh perintah itu sendiri.
- Jika tidak ada yang diteruskan ke perintah ip sebagai metrik rute, atribut tidak dibuat sama sekali dan kernel memahaminya sebagai 0, yang kemudian diterjemahkan 1024 sebagai default.