3

Я работаю в компании, где - по нескольким странным причинам - у меня есть следующие настройки:

  • Ethernet: находится в гостевой сети и имеет доступ к Интернету
  • Wi-Fi: находится в корпоративной сети и имеет доступ к интранету
  • порядок адаптера установлен, так что Ethernet является первым
  • route add используется для добавления нужных мне маршрутов в интрасети (10. [4/6/1/39].xx и т. д.)

Проблема в том, что некоторые программы не работают, так как они не используют IP-адреса, а именуют адреса. Следовательно, scutil --dns имеет преобразователь № 1 с внешними DNS-серверами, а затем следует преобразователь № 2 с DNS-серверами интрасети. (если я отсоединяю кабель и нахожусь только в Wifi Corp, имена разрешаются просто отлично).

Я думал о двух возможных решениях, но я не знаю, как заставить их работать:

  • хотя Wi-Fi является первым адаптером по порядку, я каким-то образом переключаю порядок распознавателя DNS, чтобы использовать DNS в интрасети перед Интернет-DNS
  • поместите адаптер Wi-Fi на первое место, а затем найдите "исключающую" команду маршрута, которая не говорит "отправить IP X через en0", но вместо этого «отправить любой IP, не равный X через en1»

Может ли кто-нибудь помочь мне здесь?

2 ответа2

3

Похоже, я работал в той же компании ;-)

Ниже приведена ссылка на скрипт Ruby, который можно адаптировать для выполнения действий, описанных Хеннесом как вариант 4), хотя он использует переадресацию DNS-запроса вместо представлений. Это должно быть легко исправить, хотя. https://github.com/simonair/pubcode/blob/master/multihome_setup/multihome_setup.rb

Этот скрипт будет использовать sudo по мере необходимости.

Используйте его только если вы точно понимаете, что он делает.

Лучше всего создать новое Location с помощью « System Preferences > Network прежде чем вы начнете экспериментировать с этим сценарием, поскольку это позволит вам отменить любые изменения, переключившись обратно в известное исправное Location .

Что это будет делать:

  • Перечислите все сетевые интерфейсы и определите один, подключенный к корпоративной сети, и тот, который подключен к другой сети, на основе IP-адреса их ШЛЮЗОВ ПО УМОЛЧАНИЮ (а не адреса, назначенного самому интерфейсу)
  • Сконфигурируйте встроенный DNS-сервер BIND для обработки запросов как для корпоративной сети, так и для Интернета, и перенаправляйте их по доменам. Например, example.com будет перенаправлен на корпоративные серверы имен, тогда как example.net будет перенаправлен на другие серверы имен.
  • Установить маршрутизацию в список подсетей через корпоративный интерфейс, остальные через другую сеть
  • При желании он также будет инициировать VPN-соединение, если настроено правильно.

Вам необходимо адаптировать скрипт под свои нужды.

Имейте в виду, что вам нужно снова вызвать сценарий с аргументом restore после отключения от корпоративной сети, так как в противном случае все запросы DNS будут попадать на ваш локальный сервер имен, и он не сможет их разрешить за пределами вашей корпоративной среды.

0

Я не уверен, что это правильный полный ответ, но использование его в нескольких комментариях кажется препятствием.

1) Быстрый обходной путь:

Добавьте имена интрасети в файл хоста. (Он находится в /private/etc/hosts). Это работает, если вам нужен только доступ к нескольким серверам, и это относительно просто сделать. Это также похоже на клудж, и если IP-адреса сервера когда-либо изменятся, вам нужно будет вручную обновить файл hosts.

2) Предполагая, что DNS-сервер в интрасети также вращает имена в Интернете, вы можете использовать только этот DNS-сервер. Я считаю это маловероятным, поскольку вы прямо упомянули, что гостевая сеть имеет доступ к Интернету, а другая - к интрасети. (Может быть, если интрасеть имеет доступ к Интернету, но она заблокирована с помощью некоторых правил брандмауэра, которые не блокируют все. Например, не порт 53).

3) Использование обоих DNS-серверов (что вы и пытаетесь сделать) может не сработать.

У меня нет машины OS/X, на которой это можно было бы протестировать, но недавно я узнал, как некоторые операционные системы не запрашивают DNS-серверы по порядку и не обращаются к вторичному серверу имен при сбое первого. Вместо этого они, кажется, используют перечисленные серверы имен случайным образом.

Результатом этого будет:
(заказать интернет DNS, интранет DNS)
Запрос хоста в интернете -> работает.
Запрос хоста в интрасети -> Сбой поиска через DNS-сервер в Интернете, скорее сдавайтесь, затем попробуйте следующий.

Я не знаю, так ли это на OS/X, и у меня нет Mac, чтобы проверить его.

4) Локальный сервер имен

(Жирным шрифтом, потому что я думаю, что это лучшее решение).

OS/X поставляется с BIND, и, кажется, его легко включить. Ключевое слово, которое вы хотите найти в BIND - это просмотры

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .