Bug с resolvconf (при статическом ip)

Сообщения
68
#1
(Astra Linux Орел 2.12.13)
В общем задача простая, установить resolvconf, чтобы dns указывать в /etc/network/interfaces, там же где и сам статический ip адрес.
Устанавливается пакет без проблем:
sudo apt update
sudo apt install resolvconf


Затем в духе debian настраиваю /etc/network/interfaces, привожу его к такому виду:
Код:
source /etc/networking/interfaces.d/*

auto lo eth0

iface lo inet loopback

iface eth0 inet static
 address 192.168.10.5
 netmask 255.255.255.0
 gateway 192.168.10.1
 network 192.168.10.0
 broadcast 192.168.10.255
 dns-nameservers 192.168.10.1
После этого делаю перезагрузку сети:
sudo service networking restart
Однако DNS не резолвится. А в логах увидел ответ "Warning: /etc/resolv.conf is not a symbolic link to /etc/resolvconf/run/resolv.conf".

После этого вручную создал symlink и снова перезагрузил сеть:
sudo ln -s /etc/resolvconf/run/resolv.conf /etc/resolv.conf
sudo service networking restart


И вот после этого DNS начал резолвиться. Но только до перезагрузки системы. После перезагрузки нужно снова symlink создавать. Ну т.е. придется писать костыль скрипт, чтобы при старте создавался symlink. Судя по всему пакет resolvconf криво портировали в Астру. Можно это починить?..
 
Сообщения
68
#2
Решил проблему включением "rc.local" (инструкция отсюда) и записав туда создание symlink'а. Опишу решение:

1) Создаем файл:
sudo touch /etc/rc.local
sudo nano /etc/rc.local

Код:
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
if [ ! -f /etc/resolv.conf ]; then
ln -s /etc/resolvconf/run/resolv.conf /etc/resolv.conf
fi

exit 0
2) Даем права на выполнение скрипта:
sudo chmod +x /etc/rc.local

3) Создаем файл:
sudo nano /etc/systemd/system/rc-local.service
Код:
[Unit]
 Description=/etc/rc.local Compatibility
 ConditionPathExists=/etc/rc.local
 
[Service]
 Type=forking
 ExecStart=/etc/rc.local start
 TimeoutSec=0
 StandardOutput=tty
 RemainAfterExit=yes
 SysVStartPriority=99
 
[Install]
 WantedBy=multi-user.target
4) Добавляем сервис rc-local в автозагрузку:
sudo systemctl enable rc-local

5) Стартуем сервис:
systemctl start rc-local.service

P.S. В надежде, что этот баг когда-нибудь исправят, в скрипте есть проверка на существование "/etc/resolv.conf". Когда баг исправят, symlink просто не будет создаваться.
 
Сообщения
68
#3
Решил проблему включением "rc.local" (инструкция отсюда) и записав туда создание symlink'а. Опишу решение:

1) Создаем файл:
sudo touch /etc/rc.local
sudo nano /etc/rc.local

Код:
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
if [ ! -f /etc/resolv.conf ]; then
ln -s /etc/resolvconf/run/resolv.conf /etc/resolv.conf
fi

exit 0
2) Даем права на выполнение скрипта:
sudo chmod +x /etc/rc.local

3) Создаем файл:
sudo nano /etc/systemd/system/rc-local.service
Код:
[Unit]
Description=/etc/rc.local Compatibility
ConditionPathExists=/etc/rc.local

[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99

[Install]
WantedBy=multi-user.target
4) Добавляем сервис rc-local в автозагрузку:
sudo systemctl enable rc-local

5) Стартуем сервис:
systemctl start rc-local.service

P.S. В надежде, что этот баг когда-нибудь исправят, в скрипте есть проверка на существование "/etc/resolv.conf". Когда баг исправят, symlink просто не будет создаваться.
Это решение оказалось не стабильным. Переделал...:

1) Создаем файл:
sudo nano /root/dns-script
Код:
#!/bin/bash
while true
do
if [ ! -f /etc/resolv.conf ]; then
ln -s /etc/resolvconf/run/resolv.conf /etc/resolv.conf
fi
sleep 5
done
2) Даем права на выполнение скрипта:
sudo chmod +x /etc/rc.local

3) Создаем файл:
sudo nano /etc/rc.local
Код:
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
/root/dns-script &

exit 0
4) Даем права на выполнение скрипта:
sudo chmod +x /etc/rc.local

5) Создаем файл:
sudo nano /etc/systemd/system/rc-local.service
Код:
[Unit]
 Description=/etc/rc.local Compatibility
 ConditionPathExists=/etc/rc.local
 
[Service]
 Type=forking
 ExecStart=/etc/rc.local start
 TimeoutSec=0
 StandardOutput=tty
 RemainAfterExit=yes
 SysVStartPriority=99
 
[Install]
 WantedBy=multi-user.target
6) Добавляем сервис rc-local в автозагрузку:
sudo systemctl enable rc-local

7) Стартуем сервис:
sudo systemctl start rc-local.service

8) Перезагружаем комп и проверяем работу DNS. (У меня всё работает).
 
Сообщения
68
#4
Проблема оказалось в конфликте resolvconf и network-manager. На багтрекере подсказали такое решение (думаю, актуально для серверов):
Если не используете network-manager:
1) sudo apt-get purge network-manager
2) sudo dpkg-reconfigure resolvconf
3) После перезагрузки симлинк на resolv.conf не пропадает
 

Olej

New member
Сообщения
1 307
#5
Проблема оказалось в конфликте resolvconf и network-manager.
Естественно. Или вручную управлять сетевыми интерфейсами через /etc/network/interfaces, либо использовать network-manager - network-manager управляя сетевыми интерфейсами переписывает постоянно resolv.conf.
 
Сообщения
224
#6
Проблема оказалось в конфликте resolvconf и network-manager. На багтрекере подсказали такое решение (думаю, актуально для серверов):
Если не используете network-manager:
1) sudo apt-get purge network-manager
2) sudo dpkg-reconfigure resolvconf
3) После перезагрузки симлинк на resolv.conf не пропадает
2.12.29, по установке resolvconf ссылка сама сделалась. Обошёлся без удаления network-manager, просто поотключал там всё. Выключил также сеть в автозапуске; теперь не знаю, как включить. Ну то есть в автозапуске сеть отключена (вернее, вавтозапуске отключается, сам апплет nm-applett, наверное, этого достаточно), но по факту интернет есть. Но хрен с ним.
--------------------------------------------------------------------------------
Я хотел другое обсудить, у нас сейчас получается, прописано два DNS-сервера:

Bash:
user@astra:~$ cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.0.1
user@astra:~$
user@astra:~$ cat /etc/network/interfaces | grep dns
dns-nameservers 192.168.1.229
user@astra:~$
странная ситуация. Или какой-то адрес приоритетней?
 
Последнее редактирование:
Сообщения
68
#7
2.12.29, по установке resolvconf ссылка сама сделалась. Обошёлся без удаления network-manager, просто поотключал там всё. Выключил также сеть в автозапуске; теперь не знаю, как включить. Ну то есть в автозапуске сеть отключена (вернее, вавтозапуске отключается, сам апплет nm-applett, наверное, этого достаточно), но по факту интернет есть. Но хрен с ним.
--------------------------------------------------------------------------------
Я хотел другое обсудить, у нас сейчас получается, прописано два DNS-сервера:

Bash:
user@astra:~$ cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.0.1
user@astra:~$
user@astra:~$ cat /etc/network/interfaces | grep dns
dns-nameservers 192.168.1.229
user@astra:~$
странная ситуация. Или какой-то адрес приоритетней?
Попробуйте "ping ya.ru". Если пинг идет, значит "192.168.1.229" приоритетней. Вообще у меня, "/etc/network/interfaces" "как бы" приоритетней. Т.е. при старте сети берется значение из "/etc/resolv.conf", и если я на ходу изменю там значение, то ни чего не изменится, потому что система уже считала оттуда значение и не будет делать это повторно, потому что она его помнит. А если сделать "service networking restart" - перезагрузить сеть, то сначала значение из "/etc/network/interfaces" попадет в "/etc/resolv.conf" и только потом считается значение из "/etc/resolv.conf". Однако, если по какой-то причине значение не попадет из "/etc/network/interfaces" в "/etc/resolv.conf" и "/etc/resolv.conf" останется "нетронутым", то "/etc/resolv.conf" станет приоритетней.
 
Сообщения
68
#8
Переделал скрипт, который описывал выше, сделал его отдельным полноценным демоном (выполняем всё под root'ом):
1) Создадим папку, где будет лежать скрипт:
mkdir /opt/scripts

2) Напишем скрипт:
nano /opt/scripts/fix_dns.sh
Код:
#!/bin/bash
while true
do
if [ ! -f /etc/resolv.conf ]; then
ln -s /etc/resolvconf/run/resolv.conf /etc/resolv.conf
fi
sleep 5
done
3) Дадим права скрипту на выполнение:
chmod 744 /opt/scripts/fix_dns.sh

4) Сконфигурируем демона:
nano /lib/systemd/system/fix_dns.service
Код:
[Unit]
Description=Fixing DNS. Create link /etc/resolv.conf to /etc/resolvconf/run/resolv.conf
After=multi-user.target

[Service]
Type=idle
ExecStart=/opt/scripts/fix_dns.sh

[Install]
WantedBy=multi-user.target
5) Выдадим права демону:
chmod 644 /lib/systemd/system/fix_dns.service

6) Обновим список демонов:
systemctl daemon-reload

7) Добавим демона в автозагрузку:
systemctl enable fix_dns.service

8) Запустим демона:
systemctl start fix_dns.service