обновление: я нашел отличный ответ на часть моей проблемы здесьhttps://superuser.com/a/525592/169461. Я смог установить приоритет для интерфейса en1 (wifi). Однако это не является достаточно определенным, так как это теперь направит весь трафик через en1. Я должен иметь возможность установить метрики специально для маршрута к моему шлюзу и для маршрута К моему NAS. Так что если вы знаете, как делать это на Mac, пожалуйста, дайте мне знать.
старое название: оптимизация маршрутизации на машина с двумя способами добраться до шлюза
Я пытаюсь оптимизировать время отклика между моим iMac, NAS и cablemodem. IMac расположен в моем офисе и подключен к интернету через Wi-Fi к маршрутизатору 1 по адресу 192.168.0.1 (Technicolor cablemodem), расположенному в гостиной.
трудность здесь в том, что у меня есть NAS в 192.168.0.100, который я хочу быть доступным в любое время. Он находится в офисе, поэтому я подключил его к интернету используя старый маршрутизатор Linksys (маршрутизатор 2) с DD-WRT на нем, используя его в качестве беспроводного моста. Адрес роутера 192.168.0.2. Конечно, имея дополнительный маршрутизатор в офисе, я также подключил iMac и NAS к нему с помощью кабелей. Все это прекрасно работает. NAS достижим через маршрутизатор 2 на интерфейсе en0*. Беспроводное соединение установлено на en1. Вот соответствующий вывод netstat -nr
.
*UPDATE2: пожалуйста, обратите внимание, что по запросу я разместил полную таблицу маршрутизации снова. Этот после того, как я поменял приоритеты en0 и en1 (см. обновление выше). Таким образом, теперь NAS достигнут через en1 и шлюз по умолчанию через 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
UPDATE3: как было предложено в комментариях, я попытался добавить статический маршрут, который очень специфичен, и он иногда работает, он просто не сохраняется в 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
поэтому я подозреваю, что некоторые из пакетов для интернет-шлюза маршрутизируемый через (более медленный) беспроводной мост маршрутизатора 2 на en0, и некоторые маршрутизируются через en1, который достаточно быстр. Очевидно, моим следующим шагом была попытка задать статический маршрут к шлюзу, выполнив:
sudo route add -host 192.168.0.1 -iface en1
который, как я думал, заставит любое соединение со шлюзом пройти через беспроводной интерфейс в en1. Нет такой удачи, однако: когда я делаю это, я теряю подключение к интернету на iMac, который даже не восстанавливается, когда я изменяю маршрут назад.
я не эксперт по настройке маршрутов вручную, поэтому вопрос: Что я делаю неправильно здесь и что я должен сделать, чтобы заставить iMac маршрутизировать весь трафик (кроме пакетов до 192.168.0.2 и 192.168.0.100) через en1?
Я думаю, что одним из способов было бы определить разные подсети, но я все равно хочу, чтобы каждая машина была доступна из любого места. Кроме того, я не уверен, как бы я пошел об этом. Другие советы по оптимизации трафика также будут оценены.