<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>20410</bug_id>
          
          <creation_ts>2009-06-11 04:47:16 +0400</creation_ts>
          <short_desc>Доработать openresolv</short_desc>
          <delta_ts>2010-01-20 22:56:38 +0300</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>openresolv</component>
          <version>unstable</version>
          <rep_platform>all</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>ASSIGNED</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mikhail Efremov">sem</reporter>
          <assigned_to name="Mikhail Efremov">sem</assigned_to>
          <cc>aen</cc>
    
    <cc>dd1email</cc>
    
    <cc>evg</cc>
    
    <cc>ldv</cc>
    
    <cc>mike</cc>
    
    <cc>pilot</cc>
    
    <cc>sem</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>92897</commentid>
    <comment_count>0</comment_count>
    <who name="Mikhail Efremov">sem</who>
    <bug_when>2009-06-11 04:47:16 +0400</bug_when>
    <thetext>Предыстория: https://bugzilla.altlinux.org/show_bug.cgi?id=20345

Т.к. #20345 закрыт, да и обсуждение давно вышло за рамки того, о чем был открыт баг, предлагаю продолжить тут.

&gt; Поэтому конкуренция должна
&gt; происходить не между серверами, а между группами серверов. Серверы внутри
&gt; отдельно взятой группы должны рассматриваться как равнозначные и обеспечивающие
&gt; доступ к одним и тем же данным. Это один из основных принципов работы DNS.
&gt; Группа серверов, которая не выдержала конкуренции, не должна фигурировать в
&gt; финальном файле вообще.

Я видимо сначала не правильно понял о чем тут речь. Предлагается просто подставлять содержимое resolv.conf от интерфейса, имеющего в данный момент наибольший приоритет, так?

&gt; 1. Решать одну, самую главную задачу (конфигурация glibc resolver). Остальные
&gt; задачи решаются в последнюю очередь, если вообще фигурируют к тому времени.

В случае, если конфигурировать glibc resolver не надо, т.к. предполагается, что в resolv.conf всегда стоит 127.0.0.1 (на основе тех же приоритетов), задача конфигурации локального DNS-сервера становится основной. И я до сих пор не понимая, зачем вообще надо противопоставлять эти 2 задачи и чем одна мешает другой.

&gt; 2. Механизм выбора &quot;победившей&quot; версии resolv.conf сделать предельно
&gt; формальным, компактным и предсказуемым. Унаследованные предпосылки в виде
&gt; hardcoded списков interface_order и dynamic_order отбросить вообще. Серверов в
&gt; /etc/resolvconf.conf не прописывать, им там не место.

Вот с этим готов согласиться. Как я себе это представляю я уже писал.

&gt; 3. Назначенная администратором системы степень &quot;хорошести&quot;/&quot;плохости&quot; данных
&gt; должна _всегда_ иметь решающее значение.

Это и сейчас так.

&gt; Разница в том, чтобы пропускать через локально запущенный named не всё подряд и
&gt; всегда, а только в нужные администратору периоды. И ещё в том, что этим
&gt; &quot;вечноживым&quot; сервером может оказаться адрес не 127.0.0.1 и вообще не локального
&gt; узла адрес. Не нужно без спросу заменять резолвер каждого процесса кэширующим
&gt; сервером всего хоста.

С закрытием #20345 никто не мешает реализовать такую схему и сейчас. Но возможность сконфигурировать resolovconf так, чтобы в resolv,conf всегда первой (или единственной) строкой стояло 127.0.0.1 тоже должна быть. Используя resolvconf при этом для обновления конфигурации локального резолвера.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92960</commentid>
    <comment_count>1</comment_count>
    <who name="Denis Ovsienko">pilot</who>
    <bug_when>2009-06-12 13:48:24 +0400</bug_when>
    <thetext>Что же, с обновлённым фильтром в игре теперь участвуют все варианты resolv.conf. Насколько я успел сейчас выяснить, все они поступают на вход с умолчательной метрикой 0, которая также является самой высокой. Источники же, из которых они поступают --- etcnet и dhcpcd. И там, и там сейчас нет способа задать метрику административно. Попробую сейчас сделать следующее:
1. Обеспечить значения метрик по умолчанию.
2. Дать способ её изменить
3. Дать способ узнать текущее значение.
После этого будет ясно, работает ли механизм.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92962</commentid>
    <comment_count>2</comment_count>
    <who name="Mikhail Efremov">sem</who>
    <bug_when>2009-06-12 15:01:23 +0400</bug_when>
    <thetext>(In reply to comment #1)
&gt; Что же, с обновлённым фильтром в игре теперь участвуют все варианты
&gt; resolv.conf. 

Мне не нравится способ, которым я сейчас это делаю. Но остальные варианты, которые мне приходили в голову нравятся мне еще меньше. Основная проблема - набор NAMESERVERS для libc и остальных подписчиков должен быть разный. Сейчас я просто отфильтровываю &quot;лишние&quot; в каждом подписчике, плюс сразу формирую DOMAINS без них, т.к. эта переменная используется только в подписчиках локальных резолверов для задания зон переадресации.

&gt; Насколько я успел сейчас выяснить, все они поступают на вход с
&gt; умолчательной метрикой 0, которая также является самой высокой. 

Все намного хуже: умолчательной метрики не существует. Интерфейсы, для которых использовалась метрика для добавлении автоматом имеют приоритет выше всех остальных, исключая интерфейсы, перечисленные в interface_order и dynamic_order.
В таком виде метрика сейчас практически бесполезна.

&gt; Источники же,
&gt; из которых они поступают --- etcnet и dhcpcd. И там, и там сейчас нет способа
&gt; задать метрику административно.

Игроков может быть гораздо больше. Есть еще и NM, скрипты в ppp-common (отдельно от etcnet, т.к. ppp может подниматься не только используя etcnet), возможно сами звонилки вроде kppp, vpn-клиенты и наверняка кто-то еще. В конце концов можно просто руками добавлять.

Поэтому я думаю в первую очередь необходима возможность задать метрику в resolvconf.conf, но сначала надо, чтобы какое-либо значение метрики использовалось всегда и для всех интерфейсов. Хотя правильнее тут будет сказать не &quot;интерфейс&quot;, а &quot;имя источника&quot;, т.к. это может быть не обязательно имя интерфейса. NM так и добавляет resolv.conf от своего имени, да и я такое использую в alterator-openvpn-server. Так бывает удобнее, и ничего плохого в этом я не вижу, если иметь возможность задать приоритет по имени источника в resolvconf.conf. Такая возможность есть и сейчас, просто существующая схема не слишком очевидна.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99182</commentid>
    <comment_count>3</comment_count>
    <who name="Denis Ovsienko">pilot</who>
    <bug_when>2009-09-16 13:37:29 +0400</bug_when>
    <thetext>&gt; задать метрику административно. Попробую сейчас сделать следующее:

[...]

Не сделал. Есть ли результаты опытов от других участников?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99190</commentid>
    <comment_count>4</comment_count>
    <who name="Mikhail Efremov">sem</who>
    <bug_when>2009-09-16 14:41:16 +0400</bug_when>
    <thetext>(In reply to comment #3)
&gt; Не сделал. Есть ли результаты опытов от других участников?

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

1. Ввести дополнительную переменную, в которой будет храниться значение дефолтной метрики. Не совсем ясно какое оно должно быть, openresolv позволяет использовать вплоть до 6-ти значных чисел для метрики. Думаю значения 100 точно хватит для достаточно гибкого управления метрикой.
2. В resolvconf.conf дать прописывать метрику как для конкретных источников, так и для групп. openresolv претендует на некоторую совместимость с Debian&apos;овским resolvconf, я не думаю, что это стоит отрывать без крайней необходимости, хотя бы для того, чтобы предложить изменения в апстрим. Поэтому как минимум interface_order нужно оставить, но дать возможность задать метрику сразу для всей группы интерфейсов/источников, перечисленных в interface_order. Да и вообще создавать свои именнованные группы интерфейсов может быть удобно. Выглядеть это может например так:
metrics=&apos;interface_order/10 eth0/120 ppp1/50 my_interfaces_group/60&apos;
где число после слэша - значение метрики.

При добавлении информации от источника, если не указано значение метрики непосредственно опцией -m, будет производится поиск среди значений в metrics, если там имени источника не найдется - будет использовано дефолтное значение метрики.
А в etcnet можно будет ввести переменную со значением метрики для интерфейса, устанавливать ее в options и, если эта переменная установлена, вызывать resolvconf с опцией -m.

Но пока это все мысли вслух.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105789</commentid>
    <comment_count>5</comment_count>
    <who name="Mikhail Efremov">sem</who>
    <bug_when>2010-01-20 22:56:38 +0300</bug_when>
    <thetext>&gt; Но пока это все мысли вслух.

Материализовались:
http://git.altlinux.org/people/sem/packages/?p=openresolv.git;a=commit;h=781c0d0aac87447eebe6162ed064f147e98dd699

Для групп интерфейсов, заканчивающихся на &quot;*_order&quot; значение метрики увеличивается на 1 для каждого следующего источника. Это в первую очередь для interface_order и dynamic_order, чтобы сохранялось такое же поведение как и раньше.
Значение по умолчанию default_metric и метрик для {interface,dynamic}_order задал пока от балды, может стоит поставить другие значения.</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>