null

Мягкие приоритеты ipv4/ipv6 для getaddrinfo

Те, кто является счастливым обладателем так называемых multihome/dual-stack Linux-хостов (которые используют и ipv4 и ipv6 в работе одновременно) могут возжелать повлиять на приоритет  выборки адресов назначения ipv6 по умолчанию (согласно RFC 3484) при сортировке в рамках вызовов getaddrinfo при разрешении имен, с учетом, например, не всегда стабильной/правильной работы ipv6 на той стороне или каких-то особых условий. При этом отказываться от ipv6 на уровне системы, приложений возможности и необходимости нет (да и зачем?).

Причем, пожелания могут  быть от самых простых, например сделать приоритет ipv4 над  ipv6 по умолчанию в принципе, здесь достаточно просто и гуглабельно - находим строку

#precedence ::ffff:0:0/96  100

в файле конфигурации getaddrinfo  (/etc/gai.conf), раcкомментируем и наслаждаемся выбором адресов назначения ipv4 вместо ipv6  при разрешении имен как в системных утилитах, так и в приложениях.  По сути такой заготовленной в gai.conf записью  ipv4-mapped префикса (в hex) и длинной префикса /96 мы "накрываем" все возможные ipv4 адреса (0.0.0.0/0)

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

Как это реализовать на примере произвольно взятой подсети 123.234.222.0/24 :

Сначала необходимо раскомментировать следующие строки в том же /etc/gai.conf (сохранив таким образом приоритеты по умолчанию RFC3484 для других префиксов)

precedence  ::1/128       50
precedence  ::/0          40
precedence  2002::/16     30
precedence ::/96          20
precedence ::ffff:0:0/96  10

и добавить запись с нужным приоритетом для выбранной подсети, в виде так называемого ipv4-mapped префикса в hex -формате,

для 123.234.222.0/24 это будет такая запись :

precedence ::ffff:7bea:de00/120 100

где преобразования ipv4 адреса/сети следующие

123(dec) ->7b(hex)
234(dec) -> ea(hex)
222(dec) -> de(hex)
0 (dec) -> 0(hex)

/120 - длина префикса ipv6, соответствующий  /24 маске ipv4

100 - значение приоритета (может варьироваться на основе ваших пожеланий/требований, при значениях от 50 - 100 можно получить даже разную степень "баллансировки" при сортировке ipv6/ipv4)

Вперед

Коротко о себе:

Работаю в компании TUNE-IT в качестве инженера и преподавателя.

В сферу профессиональных интересов входит все,  что связано с "большими" и не очень серверами и СХД от Sun Microsystems/Oracle и кластерами на их основе, но по долгу службы занимаюсь чаще всего их диагностикой и ремонтом... 

Делюсь опытом и  наработанными навыками в рамках курсов по  соответствующим направлениям.