Freebsd 更改默认上网通道路由

Freebsd 更改默认上网通道路由

我在 freebsd 上有两个 Internet 通道和网关。当我使用命令切换通道时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 路线添加默认 xxx.xxx.144.125

答案1

看起来您的路由表中还有其他内容。您是否尝试过使用路由命令查看路由,以查看它是否使用默认路由或其他路由?

路线显示 8.8.8.8

它应该显示默认...

路线显示 8.8.8.8

 route to: dns.google
destination: default 
mask: default 
gateway: your-gateway.whatever 
  fib: 0 
interface: ixl3 flags:
<UP,GATEWAY,DONE,STATIC>
recvpipe sendpipe ssthresh rtt,msec mtu weight expire 
      0        0        0        0  1500   1     0

如果它没有显示默认值,而你需要 ip,则使用 route -n

答案2

如果使用route change命令,则需要重新启动网络服务以应用更改,例如:

$ sudo /etc/rc.d/netif restart

答案3

您是否可能有一条到 8.8.8.8 的缓存路由? 的完整输出netstat -nr将显示这一点。如果是这样,您需要在测试更改之前将其删除 - 要么专门删除该路由,要么可以route flush添加而不是更改默认网关(但请记住,如果您这样做,这将在两个命令之间中断非本地流量)。

答案4

从 ping 命令的输出来看,您似乎针对的是本地 IP 地址,而不是远程网关。

因此,如果 xxx.xxx.183.54/29 被分配给您的 FreeBSD 节点(如 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 接口传出,并以 ISP #1 路由器 IP(xxx.xxx.123.254)作为下一跳。

如果我想将所有流量从 em1 而不是 em0 路由出去,我会使用: $sudo route change default xxx.xxx.234.1,如果 xxx.xxx.234.1 是我在该 LAN 段上的 ISP #2 路由器 IP 地址。

我还建议检查 dhclient 是否正在与任一 ISP 一起运行,因为它可能在后台安装您不知道的路由。

相关内容