如何在 Mac OS X 下设置路由特定的接口指标

如何在 Mac OS X 下设置路由特定的接口指标

更新:我在这里找到了部分问题的很好的答案https://superuser.com/a/525592/169461。我能够为接口 en1(wifi)设置优先级。但是,这还不够具体,因为它现在将通过 en1 路由所有流量。我需要能够专门为到我的网关的路由和到我的 NAS 的路由设置指标。所以如果你知道如何在 Mac 上做到这一点,请告诉我。


旧标题:优化机器上的路由,通过两种方式到达网关

我正在尝试优化我的 iMac、NAS 和电缆调制解调器之间的响应时间。iMac 位于我的办公室,通过 wifi 连接到客厅的路由器 1(192.168.0.1,Technicolor 电缆调制解调器)的互联网。

这里的困难在于,我有一个 NAS,地址为 192.168.0.100,我希望它随时都可以访问。它也位于办公室,所以我使用旧的 Linksys 路由器(路由器 2)和 DD-WRT 将它连接到互联网,用作无线网桥。该路由器的地址是 192.168.0.2。当然,办公室里还有一个额外的路由器,我还使用电缆将 iMac 和 NAS 连接到它。这一切都很顺利。可以通过路由器 2 在接口 en0* 上访问 NAS。无线连接在 en1 上。以下是 的相关输出netstat -nr

*更新 2:请注意,根据要求,我再次发布了完整的路由表。这是在我反转 en0 和 en1 的优先级之后(参见上面的更新)。因此,现在可以通过 en1 访问 NAS,也可以通过 en1 访问默认网关。问题仍然是一样的,我如何让 OSX 为每个路由使用最快的接口?

Routing tables

Internet:
Destination        Gateway            Flags        Refs      Use   Netif Expire
default            192.168.0.1        UGSc           75        0     en1
default            192.168.0.1        UGScI           1        0     en0
127                127.0.0.1          UCS             0        0     lo0
127.0.0.1          127.0.0.1          UH              5      285     lo0
169.254            link#5             UCS             1        0     en1
169.254            link#4             UCSI            0        0     en0
169.254.179.33     0:10:95:de:ad:7    UHLSW           0        0     en1   1171
192.168.0          link#5             UCS             2        0     en1
192.168.0          link#4             UCSI            3        0     en0
192.168.0.1/32     link#5             UCS             1        0     en1
192.168.0.1        link#4             UHLWIir         1        0     en0
192.168.0.1/32     link#4             UCSI            1        0     en0
192.168.0.1        cc:35:40:eb:57:e3  UHLWIir        77       24     en1   1089
192.168.0.11/32    link#5             UCS             1        0     en1
192.168.0.11       4:54:53:f:5d:a7    UHLWI           0        1     en0   1090
192.168.0.11       4:54:53:f:5d:a7    UHLWIi         22     2046     lo0
192.168.0.100      0:90:a9:b6:3c:5a   UHLWI           0        0     en0   1184
192.168.0.100      58:6d:8f:d7:d3:3e  UHLWIi          3       63     en1   1184
192.168.0.101/32   link#4             UCS             0        0     en0
192.168.0.255      ff:ff:ff:ff:ff:ff  UHLWbI          0        1     en0
192.168.0.255      ff:ff:ff:ff:ff:ff  UHLWbI          0        4     en1

更新 3:正如评论中所建议的那样,我尝试添加一个非常具体的静态路由,有时它可以工作,但它不会被 Mac OS X 持久化:sudo route add 192.168.0.100/32 -iface en0。这导致路由表中出现以下条目:

192.168.0.100/32   3c:7:54:34:5a:4b   ULSc            0        0     en0

输出ifconfig

en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=10b<RXCSUM,TXCSUM,VLAN_HWTAGGING,AV>
ether 3c:07:54:34:5a:4b 
inet6 fe80::3e07:54ff:fe34:5a4b%en0 prefixlen 64 scopeid 0x4 
inet 192.168.0.101 netmask 0xffffff00 broadcast 192.168.0.255
nd6 options=1<PERFORMNUD>
media: autoselect (1000baseT <full-duplex,flow-control>)
status: active
en1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether 04:54:53:0f:5d:a7 
inet6 fe80::654:53ff:fe0f:5da7%en1 prefixlen 64 scopeid 0x5 
inet 192.168.0.11 netmask 0xffffff00 broadcast 192.168.0.255
nd6 options=1<PERFORMNUD>
media: autoselect
status: active

现在我注意到 iMac 上的网络有时响应缓慢,连接似乎出现问题。使用 ping 我发现这至少部分是由于响应时间过长造成的。响应时间有很大差异:

PING 192.168.0.1 (192.168.0.1): 56 data bytes
64 bytes from 192.168.0.1: icmp_seq=0 ttl=64 time=67.161 ms
64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=86.217 ms
64 bytes from 192.168.0.1: icmp_seq=2 ttl=64 time=5.536 ms
64 bytes from 192.168.0.1: icmp_seq=3 ttl=64 time=26.307 ms
64 bytes from 192.168.0.1: icmp_seq=4 ttl=64 time=47.608 ms
64 bytes from 192.168.0.1: icmp_seq=5 ttl=64 time=67.585 ms
64 bytes from 192.168.0.1: icmp_seq=6 ttl=64 time=89.349 ms
64 bytes from 192.168.0.1: icmp_seq=7 ttl=64 time=8.408 ms
64 bytes from 192.168.0.1: icmp_seq=8 ttl=64 time=30.391 ms
64 bytes from 192.168.0.1: icmp_seq=9 ttl=64 time=51.700 ms
64 bytes from 192.168.0.1: icmp_seq=10 ttl=64 time=72.978 ms
64 bytes from 192.168.0.1: icmp_seq=11 ttl=64 time=94.858 ms

与此同时,traceroute他说:

1  192.168.0.1 (192.168.0.1) 36 bytes to 192.168.0.101  88.989 ms  1.824 ms  1.705 ms

因此,我怀疑互联网网关的某些数据包是通过 en0 上的路由器 2 的(较慢的)无线网桥路由的,而某些数据包是通过速度足够快的 en1 路由的。显然,我的下一步是尝试通过执行以下命令设置到网关的静态路由:

sudo route add -host 192.168.0.1 -iface en1

我以为这会强制所有与网关的连接都通过 en1 的无线接口。然而,事情并非如此:当我这样做时,iMac 上的互联网连接断开了,即使我将路由改回来,连接也没有恢复。

我不是手动设置路由的专家,所以问题是:我在这里做错了什么,我必须做什么才能让 iMac 通过 en1 路由所有流量(除了到 192.168.0.2 和 192.168.0.100 的包)?

我猜一种方法是定义不同的子网,但我仍然希望每台机器都能从任何地方访问。另外,我不确定该怎么做。如果能提供其他有关优化流量的提示,我将不胜感激。

答案1

对此最简单的解决方案并不涉及定义(并找到持久的方法)静态路由。

我建议您使用不同的子网(在同一物理网络上)进行存储。

  • 关闭en0Mac 上的 DHCP,并将其设置为此新子网上的静态 IP en0,并且该接口上不定义网关。例如,192.168.1.1,子网掩码为 255.255.255.0。

  • 也为 NAS 指定一个此子网的 IP。例如,192.168.1.2,子网掩码为 255.255.255.0。

  • 网络上需要访问 NAS 的任何其他设备也可以在此子网上拥有 IP,并能够与其通信。无需特殊路由。它甚至可以拥有两个 IP 地址,一个在 0.0 网络上,一个在 1.0 网络上,只要其中一个分配有网关即可。

  • 您的 Mac 现在将有一条到网关的路由(en1、Wi-Fi)和一条到 NAS 的路由(en0、以太网)。

相关内容