На моем MacBook Pro установлено два сетевых устройства:
У меня есть 4 IP-адреса, к которым мне нужно получить доступ в локальной сети:
Остальной трафик должен идти на WIFI. Я попытался настроить таблицу маршрутизации для определенных IP-адресов, но мне удалось только испортить мою сеть. Я не слишком часто выхожу в мир сетевых технологий, но это была последняя команда, которую я пробовал:
sudo route add -host 192.168.2.30 -interface en0
Эта команда убила мою способность использовать ping. Он сказал мне, что ping не может выделить память (возможно ли это)? Это также убило мой доступ к Wi-Fi. Выход из системы и возвращение в нее устранили проблему. Я действительно не против сделать это решение постоянным, поэтому меня устраивает временная маршрутизация.
РЕДАКТИРОВАТЬ:
Если я сейчас пытаюсь:
sudo route flush
sudo route add default 192.168.19.1
Это заставляет все работать примерно на минуту. Но по прошествии такой минуты он «забывает» маршрутизацию на WiFi, сохраняя при этом маршрутизацию LAN (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
Вам не нужно вручную создавать какие-либо правила маршрутизации для этой конфигурации, при условии, что все адреса 192.168.2.x, с которыми вы хотите взаимодействовать, не работают по интерфейсу с адресом 192.168.2.x.
Как только это будет сделано, netstat -rn
должен по-прежнему показывать маршруты для обеих подсетей, но только маршрут «ссылка №4» вместо маршрута по умолчанию через 192.168.2.1.
Если вам не нужен маршрут по умолчанию, оставьте поле маршрутизатора пустым. Значение в поле маршрутизатора используется только для установки маршрута по умолчанию через этот сетевой интерфейс и не используется ни для чего другого.
Проблема в том, что ваш en0
interface добавляет маршрут по умолчанию, который имеет приоритет над маршрутом по умолчанию, установленным интерфейсом 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
чтобы избежать запуска команды до того, как интерфейсы будут полностью задействованы и таблица маршрутизации не будет установлена.
Надеюсь, что это помогает и удачи!
Вы хотите установить свой Wifi 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.