Вот ситуация. Мой Mac подключается к двум сетям - одна внутренняя, одна внешняя. Внутренний DNS работает как для внутренних, так и для внешних URL, внешний DNS (очевидно) ничего не знает о внутренних URL. Внутренняя сеть не подключается к внешним IP-адресам, внешняя сеть не подключается к внутренним IP-адресам.
Поэтому в зависимости от того, как я настроил Сервисный заказ в разделе «Сеть» Системных настроек:
Так что если я поставлю внутреннюю сеть перед внешней в сервисном заказе:
- Внутренний DNS отвечает на все запросы правильно (как для внутренних, так и для внешних URL)
- Внутренняя сеть не может подключиться к внешним URL-адресам, поэтому, я думаю, мне нужно добавить несколько записей в таблицу маршрутизации, чтобы все, что не является внутренним IP-адресом, отправлялось во внешнюю сеть.
Если я сначала поставлю внешнюю сеть, а затем внутреннюю сеть и добавлю запись в таблицу маршрутизации, чтобы все внутренние запросы отправлялись во внутреннюю сеть:
- Даже если я сначала добавлю внутренний DNS в настройках внешней сети, я все равно не смогу разрешить внутренние URL.
Итак, вот мои вопросы:
1) Почему я не могу разрешить внутренние URL? Так как у меня есть запись в таблице маршрутизации, отправляющая все внутренние IP-адреса во внутреннюю сеть, разве DNS-запросы не должны идти во внутренний DNS, даже если внешняя сеть является первой в заказе на обслуживание?
2) Есть ли умный способ добавить записи в таблицу маршрутизации, чтобы сказать «все, кроме 10.xxx идет в сеть X»?
ps Что касается моего вопроса №2, я подумал, что способ указать «все, кроме 10.xxx» состоит в том, чтобы иметь целую серию команд маршрута:
/sbin/route add -net 128.0.0.0 -netmask 128.0.0.0 -interface en0
/sbin/route add -net 64.0.0.0 -netmask 192.0.0.0 -interface en0
/sbin/route add -net 32.0.0.0 -netmask 224.0.0.0 -interface en0
/sbin/route add -net 16.0.0.0 -netmask 240.0.0.0 -interface en0
но я надеюсь, что есть более простой способ.
источник
Ответы:
Предполагая, что ваша внутренняя сеть похожа на 10.0.0.0/8 со шлюзом 10.0.0.1 на eth1, а ваш внешний шлюз по умолчанию на eth1 с IP abcd, это должно сделать это:
route change default -interface en0 route add -net 10.0.0.0 -netmask 255.0.0.0 -interface en1
Вы также можете настроить их в своих сетевых скриптах (вы можете сделать это в Linux - не уверен насчет Mac), см. здесь в качестве примера. На самом деле это был бы более стойкий способ, так как вам не нужно добавлять туда маршруты вручную при каждой загрузке (или помещать их в скрипт).
Обновление: команды обновлены для Mac OS X в соответствии с комментариями ОП, см. Ссылку для альтернатив Linux.
источник