Назад | Перейти на главную страницу

почему изменение метрики не влияет на выбор маршрута

У меня есть следующий результат для моего маршрута по умолчанию:

Kernel IP routing table Destination     Gateway         Genmask        Flags Metric Ref    Use Iface
0.0.0.0         192.168.167.1   0.0.0.0         UG    100    0        0 enp1s0
192.168.167.0   0.0.0.0         255.255.255.0   U     100    0        0 enp1s0

И вот выбранный маршрут до 8.8.8.8. Пока здесь ничего экстраординарного.

traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
 1  192.168.167.1 (192.168.167.1)  0.326 ms  0.465 ms  0.527 ms
 2  192.168.1.254 (192.168.1.254)  1.409 ms  1.422 ms  1.429 ms

Когда я активирую VPN, маршрут становится:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.8.0.13       128.0.0.0       UG    0      0        0 tun0
0.0.0.0         192.168.167.1   0.0.0.0         UG    100    0        0 enp1s0
10.8.0.1        10.8.0.13       255.255.255.255 UGH   0      0        0 tun0
10.8.0.13       0.0.0.0         255.255.255.255 UH    0      0        0 tun0
128.0.0.0       10.8.0.13       128.0.0.0       UG    0      0        0 tun0
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 tun0
192.168.167.0   0.0.0.0         255.255.255.0   U     100    0        0 enp1s0
213.246.56.21   192.168.167.1   255.255.255.255 UGH   0      0        0 enp1s0

Какое бы значение я ни установил для метрики tun0:

sudo ifmetric tun0 3000

маршрут -n вывод:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.8.0.13       128.0.0.0       UG    3000   0        0 tun0
0.0.0.0         192.168.167.1   0.0.0.0         UG    100    0        0 enp1s0
10.8.0.1        10.8.0.13       255.255.255.255 UGH   3000   0        0 tun0
10.8.0.13       0.0.0.0         255.255.255.255 UH    3000   0        0 tun0
128.0.0.0       10.8.0.13       128.0.0.0       UG    3000   0        0 tun0
169.254.0.0     0.0.0.0         255.255.0.0     U     3000   0        0 tun0
192.168.167.0   0.0.0.0         255.255.255.0   U     100    0        0 enp1s0
213.246.56.21   192.168.167.1   255.255.255.255 UGH   0      0        0 enp1s0

Выбранный маршрут всегда проходит через интерфейс tun0:

traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
 1  10.8.0.1 (10.8.0.1)  28.510 ms  33.924 ms  33.941 ms
 2  ik056002.ikoula.com (213.246.56.2)  33.960 ms
...

Зачем ??

Спасибо !

Маршруты обрабатываются от наиболее специфичных до наименее специфичных. Если есть два маршрута с одинаковым уровнем специфичности, только тогда проверяется метрика.

Вы используете route -n формат, который отстой, ИМО, он выглядел бы лучше и был бы более очевидным, если бы вы сделали ip route show, который имеет вывод, вероятно, для вас выглядит так.

default via 192.168.167.1 dev enp1s0 metric 100
0.0.0.0/1 via 10.8.0.13 dev tun0 metric 3000
128.0.0.0/1 via 10.8.0.13 dev tun0 metric 3000
...

У этих двух маршрутов разная специфика, поэтому метрика не имеет значения. В /1 более конкретен (на 1 бит), чем /0 маршрут.

Когда вы смотрите на route -n вывода, вы должны помнить, что вы должны учитывать как 1-й, так и 3-й столбцы. Маршрут - это сетевой адрес и маска.