У меня два интернет канала и шлюз на freebsd. Когда я переключаю канал с помощью команды route change default chan2
, команда netstat -nr
показывает измененный маршрут по умолчанию. Но traceroute
показывает, что пакеты проходят по старому маршруту chan1.
Пример:
$netstat -nr
Routing tables Internet: Destination Gateway Flags Refs Use Netif Expire
default xxx.xxx.183.54 US 0 8432 em3
$sudo route change default xxx.xxx.144.125
change net default: gateway> xxx.xxx.144.125
$netstat -nr
Routing tables Internet: Destination Gateway Flags Refs Use Netif Expire
default xxx.xxx.144.125 US 2 16450 em3
НО
$ traceroute 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 64 hops max, 52 byte packets
1 xxx.xxx.183.53 (xxx.xxx.183.53) 0.527 ms 0.415 ms 0.483ms
Все работает, если я запускаю следующую комбинацию:
$ sudo route del default
$ спать 10
$ sudo route add default xxx.xxx.144.125
uname -a
должен показать)?netstat -rnf inet
?arp -d -a
и / или таблицы маршрутизацииroute flush
перед добавлением нового маршрута по умолчанию. Возможно, ядро / пользовательское пространство обращаются к устаревшим данным.Ответы:
Если вы используете
route change
команду, вам нужно перезапустить сетевую службу, чтобы применить изменения, например:источник
Возможно ли, что у вас есть кэшированный маршрут до 8.8.8.8? Полный вывод
netstat -nr
показывает, что. Если это так, вам нужно будет удалить его перед тестированием вашего изменения - либо этот маршрут специально, либо вы могли бы,route flush
а затем добавить, а не изменить шлюз по умолчанию (но помните, что это будет прерывать нелокальный трафик, в то время как между двумя командами, если вы идете, что путь).источник