我在一台 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 个问题。
您的无线接口似乎在 en0、en3 和 en5 之间切换。
在我的 MacBook Air 上,en0 始终是无线的;Thunderbolt 转以太网始终是 en3,USB 转以太网始终是 en5。但是,如果您将适配器插入 Mac 上的其他端口,则其 NIC 名称会发生变化。您需要先解决这个问题。确保您的无线始终具有相同的名称。否则,当您输入静态路由命令时,如果该
en0
位置没有插入 NIC,则该命令(显然)会失败并显示“地址错误”(物理地址没有链接)。同样,请确保适配器始终连接到相同的 SSID。网关地址显然必须对子网有效,而不同的 WiFi 网络将具有不同的子网。这可能会导致另一种类型的错误。
您没有指定无线是否是您唯一的网络连接。鉴于上述情况,我猜不是……?这和 VMware 或 Parallels 的虚拟网络可能会导致额外的复杂性。(例如,如果两个连接的网络使用相同的 IP 空间……虚拟机通常是桥接的,并且有自己的 IP/路由/链接……)发布网络拓扑会有所帮助。
完成后,尝试
sudo route add -host 54.81.143.201 -iface en0
或sudo 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
如果您重新启动,这种情况可能不会持续。您需要单独处理。
答案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 地址‘。‘分隔符。当然,大多数所需信息都可以解析出来是否配置命令输出,但我太懒了=)