Маршрутизация WIFI и LAN для конкретного трафика
На моем MacBook Pro есть два сетевых устройства:
- WIFI (en1): используется для общего трафика. Подключается к ip 192.168.19.* Через DHCP
- LAN (en0): используется для определенного трафика. Подключается к ip 192.168.2.10 как статический IP. Не подключается к роутеру, только коммутатор для прямого соединения.
У меня есть 4 IP-адреса, которые мне нужны для доступа в локальной сети:
- 192.168.2.1
- 192.168.2.21
- 192.168.2.20
- 192.168.2.30
Остальная часть трафика должна идти в WIFI. Я попытался настроить таблицу маршрутизации для определенных IP-адресов, но мне удалось только испортить мою сеть. Я не слишком часто выхожу в мир сетей, но это была последняя команда, которую я пробовал:
sudo route add -host 192.168.2.30 -interface en0
Эта команда убила мою способность использовать пинг. Он сказал мне, что пинг не может выделить память (это вообще возможно)? Это также убило мой доступ к Wi-Fi. Выйдя и вернувшись в исправленную проблему. Я действительно не против сделать это решение постоянным, так что я в порядке с временной маршрутизацией.
РЕДАКТИРОВАТЬ:
Если я в настоящее время пытаюсь:
sudo route flush
sudo route add default 192.168.19.1
Это заставляет все работать примерно минуту. Но после такой минуты он "забывает" маршрутизацию к WiFi, сохраняя маршрутизацию локальной сети (en0). Если я отключу и снова подключу кабель LAN (en0), процесс будет работать еще одну минуту.
РЕДАКТИРОВАТЬ 2:
Это были некоторые команды, введенные в качестве запроса d34dh0r53.
$ netstat -rn
Routing tables
Internet:
Destination Gateway Flags Refs Use Netif Expire
default 192.168.2.1 UGSc 4 0 en0
default 192.168.19.1 UGScI 0 0 en1
127 127.0.0.1 UCS 0 1 lo0
127.0.0.1 127.0.0.1 UH 5 1429023 lo0
169.254 link#4 UCS 0 0 en0
192.168.2 link#4 UCS 4 0 en0
192.168.2.1 0:27:22:2e:5f:1a UHLWIi 2 0 en0 1199
192.168.2.10 127.0.0.1 UHS 0 0 lo0
192.168.2.30 90:a2:da:0:f5:63 UHLWIi 1 1433 en0 1191
192.168.2.255 ff:ff:ff:ff:ff:ff UHLWbI 0 7 en0
192.168.19 link#5 UCS 2 0 en1
192.168.19.1 3e:d0:f8:aa:28:56 UHLWIi 0 2 en1 1192
192.168.19.3 127.0.0.1 UHS 1 0 lo0
192.168.19.255 ff:ff:ff:ff:ff:ff UHLWbI 0 5 en1
Internet6:
Destination Gateway Flags Netif Expire
::1 link#1 UHL lo0
fe80::%lo0/64 fe80::1%lo0 UcI lo0
fe80::1%lo0 link#1 UHLI lo0
fe80::%en0/64 link#4 UCI en0
fe80::226:4aff:fe00:b68a%en0 0:26:4a:0:b6:8a UHLI lo0
fe80::%en1/64 link#5 UCI en1
fe80::226:bbff:fe03:cbd%en1 0:26:bb:3:c:bd UHLI lo0
ff01::%lo0/32 fe80::1%lo0 UmCI lo0
ff01::%en0/32 link#4 UmCI en0
ff01::%en1/32 link#5 UmCI en1
ff02::%lo0/32 fe80::1%lo0 UmCI lo0
ff02::%en0/32 link#4 UmCI en0
ff02::%en1/32 link#5 UmCI en1
$ traceroute -n 192.168.2.1
traceroute to 192.168.2.1 (192.168.2.1), 64 hops max, 52 byte packets
1 192.168.2.1 2.499 ms 3.392 ms 3.829 ms
$ traceroute -n google.com
traceroute: unknown host google.com
3 ответа
Вам не нужно создавать какие-либо правила маршрутизации вручную для этой конфигурации, при условии, что все адреса 192.168.2.x, с которыми вы хотите общаться, находятся по интерфейсу с адресом 192.168.2.x.
- Перейдите в Системные настройки -> Сеть
- Выберите ваше устройство Ethernet, убедитесь, что для параметра "Настройка IPv4" установлено значение "Вручную", для маски подсети установлено значение 255.255.255.0 и поле маршрутизатора пусто.
Как только это будет сделано, netstat -rn
должны по-прежнему показывать маршруты для обеих подсетей, но вместо маршрута по умолчанию через 192.168.2.1 должен быть только маршрут "ссылка № 4".
Если вы не хотите использовать маршрут по умолчанию, оставьте поле маршрутизатора пустым. Значение в поле маршрутизатора используется только для настройки маршрута по умолчанию через этот сетевой интерфейс и не используется ни для чего другого.
Проблема в том, что ваш en0
Интерфейс добавляет маршрут по умолчанию, который имеет приоритет над маршрутом по умолчанию, установленным интерфейсом 802.11. Я не совсем уверен, почему, но это либо тот факт, что BSD предпочитает проводной интерфейс беспроводному, либо предпочитает статически настроенный интерфейс динамически настроенному. Вы можете сказать, что en0
маршрут по умолчанию используется Refs
колонка; Refs
является метрикой, показывающей текущее количество активных использований маршрута, поэтому мы можем видеть, что он получает весь трафик.
Решение состоит в том, чтобы удалить этот маршрут, предпочтительно навсегда из таблицы маршрутизации, чтобы трафик, предназначенный для узлов, отличных от локальных сетей, проходил через шлюз по умолчанию, установленный DHCP на en1
, Первое, что я хотел бы проверить, находится в панели конфигурации для en0
убедитесь, что вы ничего не ввели в router
поле. Информация в этом поле добавляется как шлюз по умолчанию. Если это не работает, нам нужно вручную удалить маршрут, причина в том, что route flush
не работает, я полагаю, что он говорит OS X перезагружать информацию о маршрутизации из файлов конфигурации интерфейса, поэтому через короткое время ваши изменения будут отменены. Следующая команда должна удалить маршрут по умолчанию для en0
интерфейс, пока либо сеть не будет перезапущена или система не будет IPL:
sudo route delete -net 0.0.0.0 192.168.2.1
Если вы хотите сделать это изменение постоянным, вы можете либо: /Library/StartupItems
что мне кажется слишком большой работой или б) добавить эту строку в /etc/rc.local
с помощью команды, такой как:
echo 'route delete -net 0.0.0.0 192.168.2.1' >> /etc/rc.local
Вам может понадобиться добавить sleep <number_of_seconds>
Команда до этой строки в /etc/rc.local
чтобы не запускать команду до полного запуска интерфейсов и создания таблицы маршрутизации.
Надеюсь, что это помогает и удачи!
Вы хотите установить свой Wi-Fi IP в качестве шлюза по умолчанию и удалить любой шлюз по умолчанию (или маршрут к 0.0.0.0), подключенный к локальной сети или 192.168.2.0/24.
Это, конечно, проще, если вы можете установить свой en1 на фиксированный IP, который будет работать с Wi-Fi.
Возможно, вам придется добавить 192.168.2.10 в качестве маршрута к сети 192.168.2.0/24. Однако это должно быть автоматическим, так как он может сказать, что 192.168.2.0/24 напрямую связан с виртуальным из того, что вы назначили для интерфейса.
Таким образом, трафик, идущий на любой 192.168.2.X, будет выходить из 192.168.2.10, а трафик, идущий куда-либо еще, будет выходить с IP-адреса вашего en1.