Sei sicuro della tua prima osservazione? Cosa significa ip route show
o route -n
mostra allora? Il risultato cambia se aggiungi proto static
nel primo caso?
Ho trovato almeno due risorse che dicono esplicitamente che 0
è il valore predefinito in Linux:
- http://0pointer.de/lennart/projects/ifmetric/ :La metrica predefinita per un percorso nel kernel di Linux è 0, ovvero la priorità più alta.
- http://www.man7.org/linux/man-pages/man8/route.8.html :Se questa opzione non è specificata, la metrica per la famiglia di indirizzi inet6 (IPv6) è predefinita a '1' , per inet (IPv4) il valore predefinito è '0'. (suggerisce quindi che il valore predefinito potrebbe essere diverso quando si utilizza
iproute2
ma l'analisi di queste fonti non mostra di cosa si tratta)
Sarebbe sicuramente necessario un hacker del kernel Linux per risolverlo.
Inoltre, qualunque sia l'impostazione predefinita scelta è chiaramente specifica del sistema operativo. ) ad esempio mostra che Windows sceglie la metrica predefinita in base alla larghezza di banda del collegamento.
Poiché questi percorsi si trovano su sottoreti diverse, qui c'è molto di più della semplice metrica. Se il traffico di origine si trova sulla sottorete 192.168.1.1, ad esempio, e c'è una route non predefinita corrispondente nella tua tabella di routing, quindi tale route corrisponderà tramite la corrispondenza del prefisso più lungo prima che la metrica venga mai presa in considerazione.
Supponendo che un percorso non predefinito non corrisponda, non avere alcuna metrica dovrebbe esserlo interpretato dal kernel come avente una metrica di 0, e quindi la rotta con la priorità più alta. Anche se questa è una visione semplicistica perché alcuni demoni di routing in seguito tradurranno quella metrica predefinita in un altro valore come 1024. Mi aspetto che questo sia ciò che sta accadendo a te e alla tua distribuzione senza nome.
Se ip route
non mostra alcuna metrica, puoi confermare che è effettivamente 0 utilizzando il vecchio route -n
comando dal pacchetto net-tools o cat /proc/net/route
. Tuttavia, questo output non corrisponde necessariamente a ciò che il demone di routing utilizzerà internamente quando incontra un valore di metrica 0.
Inoltre, anche il modo in cui crei il percorso è importante. ip route
utilizza l'API netlink, mentre route
utilizza ioctl. Il codice per la modalità di creazione delle metriche predefinite tra i due approcci comporta valori di metrica diversi. Ad esempio:creazione di un percorso predefinito IPv6 tramite ip route
risulterà in un valore metrico di 1024 su RHEL 7, durante la creazione dello stesso percorso tramite route
risulterà in una metrica di 1.
Da RedHat:
- se non viene passato nulla al comando route come route metric, il valore 1 viene utilizzato dal comando stesso.
- Se non viene passato nulla al comando ip come route metric, l'attributo non viene creato affatto e il kernel lo interpreta come 0, che in seguito viene tradotto 1024 come predefinito.