37

Это в среде Unix. У меня есть несколько маршрутов на хосте (отображается командой ip route show). Если я пингую адрес, как я могу узнать, какой шлюз использовался для маршрутизации трафика?

Я попытался использовать команду traceroute, но она не показывает непосредственный шлюз.

Вывод снизу, 10.58.227.1 - мой шлюз по умолчанию.

# ip r l
10.58.227.0/24 dev front_eth1  proto kernel  scope link  src 10.58.227.231
169.254.0.0/17 dev bond0  proto kernel  scope link  src 169.254.0.4
default via 10.58.227.1 dev front_eth1  proto gated

Когда я выполняю трассировку на внешний адрес, используемый шлюз (шлюз по умолчанию 10.58.227.1) не отображается в выходных данных.

# traceroute -n -I 10.63.21.118
traceroute to 10.63.21.118 (10.63.21.118), 30 hops max, 40 byte packets
 1  10.58.112.1  0.507 ms  1.008 ms  1.017 ms
 2  10.63.21.118  0.228 ms  0.233 ms  0.234 ms

Есть ли возможность просмотреть ту же информацию, которая указана командой traceroute, включая шлюз, используемый для маршрутизации?

1 ответ1

61

Вы можете использовать команду ip route get <address> чтобы попросить ядро сообщить маршрут, по которому он отправит пакет на указанный адрес:

$ ip route get 4.2.2.1
4.2.2.1 via 192.168.0.1 dev eth0  src 192.168.0.121 
    cache 
$ 

192.168.0.1 - мой маршрут по умолчанию. Если я попрошу адрес, который не будет идти по маршруту по умолчанию:

$ ip route get 192.168.0.116
192.168.0.116 dev eth0  src 192.168.0.121 
    cache 
$ 

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .