Сеть только с использованием одного DNS при подключении к VPN

9

У моей компании есть VPN, к которой мне нужно подключиться. В OSX я делаю это, используя openvpnследующую конфигурацию:

client
dev tun
proto udp
remote <GATEWAY_ADDRESS> <PORT>
resolv-retry infinite
nobind
user nobody
group nobody
persist-key
persist-tun
ca /Users/Tommy/.openvpn/dev/ca-dev.crt
cert /Users/Tommy/.openvpn/dev/tommy.brunn-20131122-dev.crt
key /Users/Tommy/.openvpn/dev/tommy.brunn-20131122-dev.key
ns-cert-type server
tls-auth /Users/Tommy/.openvpn/dev/ta-dev.key 1
cipher BF-CBC
comp-lzo
verb 3
auth-nocache
;daemon
;writepid openvpn.pid

В Ubuntu я установил network-manager-openvpnи добавил новое VPN-соединение (попытка импортировать файл конфигурации вызвала сбой) с теми же параметрами настройки: Скриншоты моих настроек

После подключения к VPN я не могу разрешить какие-либо домены.

Если я отредактирую /etc/NetworkManager/NetworkManager.conf, закомментирую строку dns=dnsmasqи перезапущу network-manager, я могу разрешить внутренние домены своей компании, но другие домены, такие как google.com, не будут разрешены вообще. Я установил свой «Метод» на «Только автоматические (VPN) адреса» на вкладках IPv4 и IPv6 диспетчера сети для моего VPN-подключения, но, похоже, это не имеет значения.

Я также попытался повторно включить dnsmasqи изменить, /etc/resolvconf/resolv.conf.d/base чтобы содержать nameserver 127.0.1.1, затем запустить sudo resolveconf -u, но тогда никакие домены не разрешат снова.

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

РЕДАКТИРОВАТЬ: Оказывается, dnsmasq на самом деле не был установлен, который я думал, что это будет по умолчанию. Тем не менее, если я его установлю, снова включу /etc/NetworkManager/NetworkManager.conf, добавлю локальный адрес сервера имен /etc/resolvconf/resolv.conf.d/base, перезапущу все службы и подключусь к VPN, я могу разрешить домены из DNS компании, но не могу разрешить другие домены. Так что в основном такая же ситуация, как когда я полностью отключил dnsmasq.

РЕДАКТИРОВАТЬ: Содержание /etc/dnsmasq.conf: http://paste.ubuntu.com/7297231/

Томми Брунн
источник
Можете ли вы показать нам свои настройки dnsmasq? Dnsmasq обычно получает свои вышестоящие DNS-серверы из /etc/resolv.conf, поэтому, если вы не изменились, вы, вероятно, используете только VPN через VPN.
jkt123
Конечно. Я добавил ссылку на мой/etc/dnsmasq.conf
Томми Брунн

Ответы:

4

Из вашей конфигурации ваша установка dnsmasq получает список DNS-серверов для использования /etc/resolv.conf. По умолчанию dnsmasq пытается использовать устаревшие DNS-серверы, но отправляет только один запрос на один DNS-сервер. Это может вызвать проблемы, если у вас есть несколько DNS-серверов, которые могут / будут обслуживать только определенные запросы.

Я полагаю, что вы можете решить эту проблему, убедившись, что у вас есть DNS-сервер в вашей локальной сети (тот, который вы используете, когда вы не подключены к VPN) /etc/resolv.conf, а также DNS-сервер в корпоративной сети, которую вы хотите использовать через VPN.

Затем вам нужно будет отредактировать /etc/default/dnsmasqи добавить или отредактировать DNSMASQ_OPTS=строку для включения --all-servers.

Если вам все еще не удается получить DNS-запросы с этой настройкой, скопируйте файл resolv.conf, созданный вами на предыдущих этапах, в другое место, например ~/resolv.conf, настройте /etc/resolv.confего nameserver 127.0.0.1и установите следующую опцию в /etc/dnsmasq.conf:

resolv-file=/home/your_username/resolv.conf

Это должно настроить вашу систему на запрос вашей установки dnsmasq для DNS, и она будет в свою очередь использовать ваш локальный DNS-сервер и VPN-DNS-сервер для каждого запроса.

Изменить : вы можете найти DNS-серверы, которые вы используете в данный момент для определенного соединения, используя nmcliинструмент. Для поиска DNS-серверов, используемых моим беспроводным соединением, я использовал следующий синтаксис:

nmcli dev list iface wlan0 | grep IP4.DNS

Если вы запускаете эту команду, когда вы не подключены к VPN, а затем снова, когда вы подключены и можете разрешить свои корпоративные адреса, вы должны отключить и включить свой список DNS-серверов в VPN. Надеюсь, это поможет.

Редактировать 2 : При просмотре таблиц маршрутизации выясняется, что администратор VPN настроил вас на маршрутизацию всего трафика через VPN, пока вы подключены (ваш шлюз по умолчанию меняется на адрес VPN). Поскольку оба ваших DNS-сервера являются общедоступными адресами, и ни один из них не настроен на определенный маршрут, пока вы находитесь в VPN, вы пытаетесь выполнить обычный поиск DNS через VPN, и это не помогает.

У вас может быть несколько способов сделать это в зависимости от настроек VPN:

  • Если VPN позволит вам получать доступ к Интернету через корпоративную сеть, но не выполнять DNS-запросы к серверам в Интернете, добавьте маршруты к своим DNS-серверам следующим образом: sudo route add -host 83.255.245.11 gw 192.168.0.1и sudo route add -host 193.150.193.150 gw 192.168.0.1после подключения к VPN.

  • Если VPN не позволит вам получить доступ к Интернету через корпоративную сеть, вам потребуется изменить настройки шлюза по умолчанию на вашем компьютере, указав 192.168.0.1 после подключения к VPN. В этом случае вы захотите настроить свой обычный шлюз по умолчанию, а затем добавить сетевые маршруты для доступа к оборудованию только для VPN.

Возможно, вам придется сократить таблицу маршрутизации в случае подключения к VPN, показанной во второй пастбине, к следующему:

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.1     0.0.0.0         UG    0      0        0 eth0
192.168.0.0     0.0.0.0         255.255.255.0   U     1      0        0 eth0
10.100.0.0      10.100.0.105    255.255.255.0   UGH   0      0        0 tun0
10.100.0.105    0.0.0.0         255.255.255.255 UH    0      0        0 tun0

Затем добавьте маршруты по мере необходимости для доступа к корпоративному оборудованию. В приведенной выше таблице маршрутизации я предположил, что сеть / 24 в VPN может быть неправильной. Вы должны будете установить маску соответствующим образом.

jkt123
источник
Как мне узнать адреса моего локального DNS-сервера и сервера корпоративной сети?
Томми Брунн
Я отредактировал свой ответ, чтобы предоставить эту информацию.
jkt123
Согласно nmcli, я получаю те же DNS-серверы, когда я подключен к VPN, как и когда я не подключен, хотя я явно не должен, поскольку я могу разрешить внутренний домен в сети компании, когда м подключен.
Томми Брунн
Когда вы работали nmcliбез VPN-подключения, смогли ли вы правильно разрешить DNS? Если нет, вам следует отключиться от VPN, убедиться, что ваш DNS работает правильно, а затем запустить nmcli.
jkt123
Да, я смог нормально разрешить DNS при отключении от VPN. Пример вывода: paste.ubuntu.com/7345250
Томми Брунн
0

Есть некоторые пробелы, которые я не могу заполнить для вас, связанные с тем, как заставить NetworkManager координировать ваши действия. Я постараюсь прояснить, как вещи, которые он координирует, должны работать. Не идеальный ответ, но, надеюсь, полезный. На самом деле, учитывая, что это старый вопрос, это действительно для потомков.

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

Это все еще оставляет вас с потенциальной проблемой DNS. Комментарии jtk123 о том, что dnsmasq делает с DNS, не являются специфическими для dnsmasq - так работает DNS. Если клиент DNS или промежуточный распознаватель получают ответ о том, что запись DNS не существует, то это ненормальное поведение, чтобы обратиться к другому DNS-серверу. Это означает, что вам нужен DNS-распознаватель, который будет отвечать так, как вы хотите, независимо от того, относится запрос к сети компании или нет.

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

dnsmasq можно настроить для пересылки запросов для определенных доменов конкретным вышестоящим DNS-серверам. например, смотрите параметр --server, как описано на справочной странице dnsmasq.conf. Я не совсем понимаю, как заставить NetworkManager хорошо с этим играть (именно это я сейчас и хочу выяснить).

mc0e
источник