Jeśli masz (w systemie Linux) te dwie trasy:
default via 192.168.1.1 dev enp58s0f1
default via 192.168.16.1 dev wlp59s0 proto static metric 600
Spodziewałbym się, że użyje się pierwszego, ale tak nie jest: zamiast tego użyto drugiego.
Jeśli zmienię to na to:
default via 192.168.1.1 dev enp58s0f1 proto static metric 100
default via 192.168.16.1 dev wlp59s0 proto static metric 600
Następnie działa zgodnie z oczekiwaniami. Wydaje się, że „brak metryki” to gorsza (wyższa) metryka niż dowolna liczba zamiast metryki 0.
Co się dzieje? Czy jest to specyficzne dla Linuksa, czy standard sieciowy?
Z góry dziękuję.
źródło
Ponieważ te trasy znajdują się w różnych podsieciach, tutaj jest więcej zaangażowanych niż tylko metryka. Jeśli ruch inicjujący odbywa się na przykład w podsieci 192.168.1.1 i w tabeli routingu znajduje się pasująca trasa inna niż domyślna, trasa ta zostanie dopasowana przez najdłuższe dopasowanie prefiksu, zanim metryka zostanie wzięta pod uwagę.
Zakładając, że trasa inna niż domyślna nie jest zgodna, wówczas brak metryki powinien być interpretowany przez jądro jako metryka 0, a zatem trasa o najwyższym priorytecie. Chociaż jest to uproszczony widok, ponieważ niektóre demony routingu później przetłumaczą tę domyślną metrykę na inną wartość, np. 1024. Oczekuję, że to właśnie dzieje się z tobą i twoją nienazwaną dystrybucją.
Jeśli
ip route
nie pokazuje żadnej metryki, możesz potwierdzić, że rzeczywiście jest to 0, używając starszejroute -n
komendy z pakietu net-tools lubcat /proc/net/route
. Jednak dane wyjściowe niekoniecznie muszą odpowiadać wewnętrznemu demonowi routingu, gdy napotka wartość metryczną 0.Ponadto liczy się również sposób tworzenia trasy.
ip route
używa interfejsu API netlink, podczas gdyroute
używa ioctl. Kod tworzenia domyślnych metryk między tymi dwoma podejściami powoduje różne wartości metryk. Na przykład: utworzenie domyślnej trasy IPv6 przezip route
spowoduje uzyskanie wartości metryki 1024 na RHEL 7, podczas gdy utworzenie tej samej trasy przezroute
da metrykę 1.Od RedHat :
źródło