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