Маршрутизация WIFI и LAN для конкретного трафика

12

На моем MacBook Pro есть два сетевых устройства:

  1. WIFI (en1): используется для общего трафика. Подключается к ip 192.168.19. * Через DHCP
  2. LAN (en0): используется для определенного трафика. Подключается к ip 192.168.2.10 как статический IP. Не подключен к маршрутизатору, только переключатель для прямой маршрутизации соединения.

У меня есть 4 IP-адреса, которые мне нужны для доступа в локальной сети:

  1. 192.168.2.1
  2. 192.168.2.21
  3. 192.168.2.20
  4. 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
jakebird451
источник
ОС управляет маршрутизацией, а не оборудованием.
Игнасио Васкес-Абрамс
Все ли 192.168.2.X в локальной сети? Если это так, это делает решение намного проще.
LawrenceC
@ultrasawblade Да, все в этой сети - 192.168.2. *
jakebird451

Ответы:

11

Вам не нужно создавать какие-либо правила маршрутизации вручную для этой конфигурации, при условии, что все адреса 192.168.2.x, с которыми вы хотите общаться, находятся по интерфейсу с адресом 192.168.2.x.

  1. Перейдите в Системные настройки -> Сеть
  2. Выберите устройство Ethernet, убедитесь, что для параметра «Настройка IPv4» установлено значение «Вручную», для маски подсети установлено значение 255.255.255.0 и поле маршрутизатора пусто.

Как только это будет сделано, netstat -rnвсе равно должны отображаться маршруты для обеих подсетей, но только маршрут «ссылка № 4» вместо маршрута по умолчанию через 192.168.2.1.

Если вы не хотите использовать маршрут по умолчанию, оставьте поле маршрутизатора пустым. Значение в окне маршрутизатора используется только для настройки маршрута по умолчанию через этот сетевой интерфейс и не используется ни для чего другого.

rakslice
источник
Спасибо! Вот и все! У меня все настроено правильно, кроме поля в роутере. Я вставил IP-адрес 192.168.2.1в поле маршрутизатора, чтобы он соответствовал «маршрутизатору» на локальной сети. Я думал, что это необходимо, но теперь я вижу, что он принял маршрут по умолчанию для общего трафика.
jakebird451
Спасибо за это! Была такая же проблема и отлично сработала для меня.
BaronVonKaneHoffen
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чтобы избежать запуска команды до полного запуска интерфейсов и создания таблицы маршрутизации.

Надеюсь, что это помогает и удачи!

d34dh0r53
источник
Спасибо за ваш длинный ответ. Маршрут по умолчанию 192.168.2.1был проблемой, но @rakslice обнаружил, что я допустил ошибку при вводе информации о маршрутизации для соединения en0. Я положил IP-адрес 192.168.2.1в поле маршрутизатора, полагая, что это было необходимо. После удаления IP-адреса маршрутизатора по умолчанию я также удалил неверный маршрут по умолчанию 192.168.2.1. Еще раз спасибо за вашу помощь.
jakebird451
1
В некотором роде я не получил награду: «Первое, что я проверю, это на панели конфигурации для en0 убедиться, что вы ничего не ввели в поле маршрутизатора. Информация в этом поле добавляется как шлюз по умолчанию. " Но в конце концов все хорошо, рад, что у тебя все получилось.
d34dh0r53
0

Вы хотите установить свой 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.

LawrenceC
источник
Я установил свой порядок Wi-Fi наверх через настройки сети sys. Но я не уверен, как remove any default gateway connected to the LAN.
jakebird451
возможно sudo route del default 192.168.2.10?, не совсем уверен, как это сделать на FreeBSD / Mac OSX, но это должно быть похоже.
LawrenceC
Команда на Mac есть sudo route delete default 192.168.2.10. Пинг все еще активен. Тем не менее, он закрывает доступ к трафику Wi-Fi, за исключением маршрутизатора IP.
jakebird451
Вы получаете интернет через Wi-Fi, правильно, то есть, если вы не подключаетесь через локальную сеть и только через Wi-Fi, вы можете получить доступ к внешним сайтам, таким как Google и т. Д.?
LawrenceC
Да, WiFi предназначен для общего трафика, такого как google.com (в основном для API карт Google)
jakebird451