如何在 OS X 中通过特定接口直接路由 IP?

如何在 OS X 中通过特定接口直接路由 IP?

我在一台 Mac 上,试图通过我的 WiFi 连接上的特定网关路由一个特定的地址。

我在用着:

route add -host 54.81.143.201 192.168.15.1

有时这会起作用,有时则不会。我发现它选择的接口每次都不同。它需要这样才能en0工作

netstat -nr不起作用时的输出:

54.81.143.201      192.168.15.1       UGHS            1       89     en5

这是它工作的时候:(注意 en0)

54.81.143.201      192.168.15.1       UGHS            0        1     en

我为什么要这样做?因为我们公司有一个 HipChat 无法使用的代理。因此,我通过开放的 wifi 网络路由 hipchat 流量,同时仍然使用我的工作以太网。

编辑:

我也尝试过仅使用界面添加条目

route add -host 54.81.143.201 -interface en0

54.81.143.201      78:31:c1:c7:52:74  UHS             0        2     en0

HipChat 连接失败。

编辑 2:有人要求提供我的整个路由表,今天就提供给您。请注意,54.81.143.201 现在绑定到 en3 而不是 en0

Internet:
Destination        Gateway            Flags        Refs      Use   Netif Expire
default            10.7.90.1          UGSc           31        6     en3
10.7.90/24         link#4             UCS             4        0     en3
10.7.90.1          0:23:ac:3d:db:c2   UHLWIir        16        0     en3   1200
10.7.90.44         40:6c:8f:19:4a:bb  UHLWI           0        3     en3    946
10.7.90.63         127.0.0.1          UHS             0        0     lo0
54.81.143.201      192.168.15.1       UGHS            0        0     en3
127                127.0.0.1          UCS             0        0     lo0
127.0.0.1          127.0.0.1          UH              3      209     lo0
169.254            link#4             UCS             1        0     en3
169.254.255.255    0:23:ac:3d:db:c2   UHLSW           0        0     en3

答案1

尝试:

route add -host 54.81.143.201 -interface en0

答案2

sudo route -n add -net 54.81.143.201/32 192.168.15.1

答案3

正如其他人指出的,这实际上是 3 个问题。

  1. 您的无线接口似乎在 en0、en3 和 en5 之间切换。

    在我的 MacBook Air 上,en0 始终是无线的;Thunderbolt 转以太网始终是 en3,USB 转以太网始终是 en5。但是,如果您将适配器插入 Mac 上的其他端口,则其 NIC 名称会发生​​变化。您需要先解决这个问题。确保您的无线始终具有相同的名称。否则,当您输入静态路由命令时,如果该en0位置没有插入 NIC,则该命令(显然)会失败并显示“地址错误”(物理地址没有链接)。

    同样,请确保适配器始终连接到相同的 SSID。网关地址显然必须对子网有效,而不同的 WiFi 网络将具有不同的子网。这可能会导致另一种类型的错误。

    您没有指定无线是否是您唯一的网络连接。鉴于上述情况,我猜不是……?这和 VMware 或 Parallels 的虚拟网络可能会导致额外的复杂性。(例如,如果两个连接的网络使用相同的 IP 空间……虚拟机通常是桥接的,并且有自己的 IP/路由/链接……)发布网络拓扑会有所帮助。

  2. 完成后,尝试sudo route add -host 54.81.143.201 -iface en0sudo ipfw。如果你不确定适配器的名称,可以指定其 MAC 地址,如下所示:sudo route add -host 54.81.143.201 -link 14:10:9f:e7:fd:0a

    有关的: https://discussions.apple.com/thread/5049994?searchText=policy%20route

  3. 如果您重新启动,这种情况可能不会持续。您需要单独处理。

答案4

此解决方案适用于最新的 MacOS 10.12 (Sierra)。以下是要旨

#!/bin/bash

# NOTE: wifi network interface is: en1
wifi_router=192.168.200.1
wifi_address=en1:ec.35.86.4f.00.cc
TOADDR=`ifconfig en1 inet | sed -nl 's/\w*inet \([^ ]*\).*/\1/p'`
TO=`echo -n ${TOADDR//[[:space:]]}`

echo "ADDING ROUTE TO $1 VIA en1 (wi-fi): $TO"
route -n add -host $1 $wifi_router -ifp $wifi_address -ifa $TO -static

echo ""
echo "ROUTE ADDED:"
route get $1

使用方式如下:

> sudo ./route_wifi.sh IP_ADDRESS

假设wifi接口是:en1

不要忘记输入正确的值wifi_路由器wifi地址变量。注意wifi地址格式为:网络接口名称接口 mac 地址分隔符。当然,大多数所需信息都可以解析出来是否配置命令输出,但我太懒了=)

相关内容