OpenVPN & SplitDNS в Linux, часть 1

Mar 02, 2023 16:03


В прошлом выпуске журнала "Мурзилка" я рассматривал варианты виртуальных TUN-адаптеров для работы с OpenVPN под Windows и вскользь затронул тему Split DNS. Например, когда нужно IP-адреса внутрикорпоративных ресурсов разрешать через "внутренние" же DNS-сервера, а все остальные - через "внешние". С неких пор под форточками этот вопрос решается ( Read more... )

linux, сети, openvpn

Leave a comment

coctic March 2 2023, 22:26:48 UTC
Я могу, конечно, ошибаться, но мне кажется, что SplitDNS - это когда разные ответы отдаются разным клиентам, чаще всего в зависимости от IP. А когда один и тот же клиент спрашивает разные домены у разных серверов - на мой взгляд, это уже не SplitDNS.
И еще, кажется, перенаправление всех DNS-запросов в VPN обычно считается средством от утечек информации о запросах мимо VPN, ну и от подделки ответов.

А зачем может понадобиться одному клиенту ходить к разным серверам? Ну если это не тестирование "как это выглядит с той стороны".

Reply

klink0v March 2 2023, 22:47:53 UTC

> на мой взгляд, это уже не SplitDNS

Вопрос в терминологии. Давайте тогда придумаем какое-нибудь другое название рассматриваемому явлению. Например, "Ы-DNS". Только опасаюсь, что кроме меня и вас больше никто не поймет.

> когда разные ответы отдаются разным клиентам ... а когда один и тот же клиент спрашивает разные домены у разных серверов

Я это называю "Multi-view DNS". B в рассматриваемом мной примере по сути речь идёт об одном и том же. Одна и та же инфраструктура, один и тот же админ. И один и тот же клиент запрашивает одну и ту же запись с одного и того же авторитетного сервера либо "изнутри", либо "снаружи". Но в общем случае, да, может быть по-всякому.

> А зачем может понадобиться одному клиенту ходить к разным серверам?

Ситуация. Есть энное количество внутрикорпоративных ресурсов, которые ну никак не хочется выставлять внаружу. Всякие там тикетницы, гитлабы, вики, не знаю что ещё. Белых адресов в закромах маловато, на всё на это не хватит. И очень хочется ко всему к этому прикрутить "честные" X509-сертификаты от Lets Encrypt ( ... )

Reply

coctic March 3 2023, 07:34:09 UTC

Ну споры о терминологии - они ж самые увлекательные, они же самые бесплодные. Я для себя термин SplitDNS узнал, когда разбирался с view в BIND (named), и оно относилось исключительно с настройке сервера. Собственно, эта часть документации до сих пор так и называется: https://bind9.readthedocs.io/en/v9_16_4/advanced.html#split-dns Не исключаю, что с тех пор общепринятое значение термина сместилось в сторону особенностей настройки клиента, про что и написано в посте.

> Ситуация. Есть энное количество внутрикорпоративных ресурсов, которые ну
никак не хочется выставлять внаружу. Всякие там тикетницы, гитлабы,
вики, не знаю что ещё. Белых адресов в закромах маловато, на всё на это
не хватит. И очень хочется ко всему к этому прикрутить "честные"
X509-сертификаты от Lets Encrypt. Как будем решать?

Я ее всегда решал вот тем самым SplitDNS, который настройка view в сервере (ну или два сервера на разных адресах, если view почему-то нет). Особенных настроек резолверов клиентов это не требует, кроме указания правильного сервера.

Собственно, я ( ... )

Reply

klink0v March 3 2023, 11:03:39 UTC

Хорошо. Упрощаю ситуацию. Есть контора с кучей разных внутренних ресурсов (да хотя бы обычные виндовые файловые шары). Есть сотрудник "на удалёнке", который цепляется по OpenVPN в сеть конторы. Как клиент должен понять с каких DNS-серверов запрашивать те или иные ресурсы: с конторских или с провайдерских?

Reply

coctic March 3 2023, 11:08:14 UTC

О! Вот этот сценарий (VPN внутрь корпоративной сети) мне в голову не пришел, хотя он, конечно, очевидный.

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

Reply

klink0v March 3 2023, 11:13:52 UTC

> весь трафик DNS на внутренние DNS-сервера конторы

Во-первых, если контора и удалённый сотрудник находятся в разных странах или просто очень далеко друг от друга, то это поломает работу всяких сервисов, которые используют поиск географически ближайшего сервера на основании DNS-запросов. CDN разные и иже с ними. Да банально какие-нибудь YouTube могут начать "не на том языке" открываться у сотрудника дома.

Во-вторых, ладно. Договорились пускать весь трафик через корпоративные сервера, ок. Как это объяснить клиенту? Как ему сказать, что начиная с момента XX:XX:XX он должен прекратить использовать DNS-сервера провайдера и начать использовать корпоративные сервера?

Reply

coctic March 3 2023, 11:29:53 UTC

Нуу, CDN, ухудшившиеся на время работы в корп. сети - не самое страшное, на мой взгляд.

Завернуть все DNS в OpenVPN - есть параметр конфига block-outside-dns.

Reply

klink0v March 3 2023, 11:37:34 UTC

Читаю описание директивы.

Block DNS servers on other network adapters to prevent DNS leaks. This
option prevents any application from accessing TCP or UDP port 53 except one inside the tunnel. It uses Windows Filtering Platform (WFP) and works on Windows Vista or later.This option is considered unknown on
non-Windows platforms and unsupported on Windows XP, resulting in fatal error.

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

Reply

coctic March 3 2023, 11:44:06 UTC

Эмм, ну чтобы переключиться на корпоративные, нужно или в конфиге сервера

push "dhcp-option DNS X.X.X.X"

или в конфиге клиента

dhcp-option DNS X.X.X.X

Я проверил - работает (на Windows).

Ну а на Linux, если там не сработает то же самое (надеюсь, что в OpenVPN все же есть что-то для переписывания DNS встроенное, у меня сейчас линукса с клиентом OpenVPN под рукой нет), то в посте да, описаны рецепты. С Linux проще: всегда можно полностью переписать набор серверов DNS, он же не привязан к интерфейсу, как в Windows (или в NetworkMAnager привязан? не копался в нем так глубоко).

Reply

klink0v March 3 2023, 12:06:51 UTC

> Я проверил - работает (на Windows).

Ха-ха, не всё так просто. Начиная с 10ки в винде полностью переделали механизм приоритезации DNS. Так что несмотря на то, что информация о DNS-сервере "приедет", софсем не факт, что системный ресолвер действительно будет его использовать. Я об этом выпустил один из предыдущих постов.

> надеюсь, что в OpenVPN все же есть что-то для переписывания DNS встроенное

Нет. Он может дёрнуть какой-нибудь скрипт или выплюнуть полученный от сервера / из собственного конфига набор на StdOut / в лог. А дальше "проблемы индейцев шерифа не волнуют".

Reply

coctic March 3 2023, 12:28:00 UTC

> Ха-ха, не всё так просто. Начиная с 10ки в винде полностью переделали
механизм приоритезации DNS. Так что несмотря на то, что информация о
DNS-сервере "приедет", софсем не факт, что системный ресолвер
действительно будет его использовать. Я об этом выпустил один из
предыдущих постов.
Ну встроенный nslookup начинает по умолчанию ходить к новому серверу. Дальше я не копал.

> Нет. Он может дёрнуть какой-нибудь скрипт или выплюнуть полученный от
сервера / из собственного конфига набор на StdOut / в лог. А дальше
"проблемы индейцев шерифа не волнуют".
Я бы, как представитель "старой школы", из такого скрипта бы нафиг переписал /etc/resolv.conf, созранив в сторонку старый, а после разрыва соединения восстановил бы назад. Хотя с systemd это может оказаться сложнее.

Reply

klink0v March 3 2023, 13:58:00 UTC

> встроенный nslookup начинает по умолчанию ходить к новому серверу

На грабли можно наступить при одновременном выполнении двух условий.

1. Интернет подведен по гигабитному линку.

2. Запрашиваемый домен является реально существующим.

В остальных случаях проблема может и не проявиться.

> нафиг переписал /etc/resolv.conf, созранив в сторонку старый

Работать будет, не спорю. Но в 2023м году так делать - всё равно что пытаться разбудить спящего ударом кувалды по голове. Есть способы куда изящнее.

Reply

valdikss March 11 2023, 10:22:18 UTC

>Начиная с 10ки в винде полностью переделали механизм приоритезации DNS.

Эта опция и была сделана для Windows 10.

https://habr.com/ru/post/268173/

Reply

klink0v March 11 2023, 19:46:30 UTC

Запретить-то можно, ок. А вот ли будет ли система запрашивать DNS через интерфейс с не-минимальной метрикой, вопрос. Можно проверить wireshark-ом, конечно. Если не забуду, погляжу.

Reply

valdikss March 11 2023, 19:50:20 UTC

Да, будет. block-outside-dns меняет метрику VPN-интерфейса на "3", насколько помню.

Reply

klink0v March 12 2023, 13:48:52 UTC

Не на "3", но она становится меньше, чем метрика "основного" интерфейса, да. У меня в эксперименте получилось что-типа "253 против 281". Так что опция работает, согласен. Хотя конечно, кишки винды - загадка.

Reply


Leave a comment

Up