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, я бы использовал:
Я бы также предложил проверить, работает ли dhclient с каким-либо интернет-провайдером, поскольку он может устанавливать неизвестные вам маршруты в фоновом режиме.
Я не знаю, почему я не узнаю вывод вашей команды netstat -rn, но я привык видеть там NETMASK.
Не знаю, почему ваши сетевые маски не отображаются, но поскольку это не так, у вас могут быть совершенно неверные сетевые маски, и это, безусловно, может быть вашей проблемой.