Freebsd изменить маршрут интернет-канала по умолчанию

У меня два интернет канала и шлюз на 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

4 ответа

Если вы используете route change команда, вам нужно перезапустить сетевую службу, чтобы применить изменения, например:

$ sudo /etc/rc.d/netif restart

Возможно ли, что у вас есть кэшированный маршрут до 8.8.8.8? Полный вывод netstat -nr покажет это. Если это так, вам нужно будет удалить его перед тестированием изменений - либо этот маршрут специально, или вы могли бы route flush а затем добавьте, а не измените шлюз по умолчанию (но, если иметь в виду, это будет прерывать нелокальный трафик между двумя командами, если вы пойдете таким образом).

Судя по выводам команды ping, вы нацеливаетесь на локальный IP-адрес, а не на удаленный шлюз.

Таким образом, если вашему узлу FreeBSD назначен xxx.xxx.183.54/29 (как показано в ifconfig), вам необходимо использовать IP-адрес следующего перехода, который выглядит так, как будто это xxx.xxx.183.53/29. То же самое может быть верно в том смысле, что адрес xxx.xxx.144.125 — это адрес, назначенный локальному интерфейсу.

Например, у меня есть машина со следующим:

      ifconfig:
  em0: flags=8863<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
  inet xxx.xxx.123.99 netmask 0xffffff00 broadcast xxx.xxx.xxx.255
  
  em1: flags=8863<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
  inet xxx.xxx.234.99 netmask 0xffffff00 broadcast xxx.xxx.xxx.255

netstat -rn
  Destination        Gateway            Flags     Netif Expire
  default            xxx.xxx.123.254    UGS       em0

В моем примере выше весь трафик в настоящее время выходит из интерфейса em0 к IP-адресу маршрутизатора № 1 интернет-провайдера (xxx.xxx.123.254) в качестве следующего перехода.

Если бы я хотел направить весь трафик из em1, а не из em0, я бы использовал:, если xxx.xxx.234.1 был IP-адресом маршрутизатора моего интернет-провайдера №2 в этом сегменте локальной сети.

Я бы также предложил проверить, работает ли dhclient с каким-либо интернет-провайдером, поскольку он может устанавливать неизвестные вам маршруты в фоновом режиме.

Я не знаю, почему я не узнаю вывод вашей команды netstat -rn, но я привык видеть там NETMASK.

Не знаю, почему ваши сетевые маски не отображаются, но поскольку это не так, у вас могут быть совершенно неверные сетевые маски, и это, безусловно, может быть вашей проблемой.

Другие вопросы по тегам