LINUX.ORG.RU
решено ФорумAdmin

Резолвинг разных доменов через разные DNS в systemd-resolved

 


0

1

Сабж. У меня есть пара VPN-подключений и «основной» доступ в интернеты. Мне нужно чтоб домены foo.com и bar.com резолвились через 10.0.0.1, домены baz.com и baz.bar.com - через 172.16.0.1, а все остальное уходило в 192.168.0.1 (а еще лучше - в то что мне назначит роутер, но это не обязательно, указать айпишники меня вполне устроит). Как это можно сделать?

Пробовал в /etc/systemd/resolved.conf и по отдельности в /etc/systemd/resolved.conf.d/* прописывать

[Resolve]
DNS=10.0.0.1
Domains=~foo.com. ~bar.com.

[Resolve]
DNS=172.16.0.1
Domains=~baz.com. ~baz.bar.com.

[Resolve]
DNS=192.168.0.1
Domains=~.

Это не помогает - systemd-resolved сваливает это все в кучу Global, берет первый сервер и резолвит через него.

Вариант прописать для каждого соединения свои домены и свой сервер типа как

# resolvectl dns tun0 172.16.0.1
# resolvectl domain tun0 ~baz.com. ~baz.bar.com.

не подходит, потому что вчера у меня на tun0 поднято то где 172.16.0.1, сегодня там будет то подключение где DNS 10.0.0.1, а завтра вообще подниму два соединения сразу. Делать это скриптами при запуске VPN не получится потому что там аналоговнетное решение, которое умеет только в GUI, запускать потом руками скрипты еще не хочется, хочется чтоб было автоматически. Ну и хочется чтоб это было в конфиге чтоб проще бэкапить было.

Что я упускаю? Я могу сделать то что мне нужно через, например, dnsmasq или bind, но увы, сменить резолвер возможности нет, надо настроить то что есть.

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

У меня для openconnect что-то такое лежит в /etc/vpnc/post-connect.d/my-vpn

resolvectl domain $if_index ~baz.com ~baz.bar.com

Там же по идее можно проверять имя сервера, к которому идет подключение и по нему выбирать нужные домены, если есть несколько разных соединений, подробнее можно посмотреть скрипт /usr/share/vpnc-scripts/vpnc-script

В случае с openvpn, я не делал, но думаю, что в конфиге можно прописать аналогичное, ну или как минимум зафиксировать имя интерфейса туннеля, и оно будет статичное для конкретного соединения и вешать правила на него.

А что за аналоговнетное решение у тебя? Оно вполне может быть чем-то стандартным под капотом.

masa
()
Последнее исправление: masa (всего исправлений: 1)
Ответ на: комментарий от masa

Да ну это не вариант, не буду же я для каждого vpn-клиента это ковырять, а там же еще какой-нибудь NetworkManager для вайвая, /etc/network/interfaces для провода, сеть контейнеров, да вообще может я может с мобилы через USB раздам интернет. Оно не может просто отправлять запрос на указанный адрес а маршрутизацией будет заниматься ... ну ... таблица маршрутизации внезапно?!

Можно проще задачу описать - хочу резолвить домены в .ru в местных DNS, а .com - в гугловых, и представим что у меня только одно проводное соединение.

micronekodesu ★★★
() автор топика
Ответ на: комментарий от masa

Для openvpn на стороне сервера просто указываешь в конфиге чтобы пушить на клиент dhcp-опции domain и dns и дальше «оно само». Можно ещё маршруты нужные прокидывать

cobold ★★★★★
()
Ответ на: комментарий от masa

Ну в общем да, так и пришлось сделать. Еще и systemd-resolved задисейблил потому что он, по какой-то причине, отказывался часть запросов пересылать в dnsmasq, хотя он там единственным сервером был прописан (изначально была идея его оставить и dnsmasq просто указать «апстримом»).

micronekodesu ★★★
() автор топика