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

Сообщения
35
#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 криво портировали в Астру. Можно это починить?..
 
Сообщения
35
#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 просто не будет создаваться.
 
Сообщения
35
#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. (У меня всё работает).
 
Сообщения
35
#4
Проблема оказалось в конфликте resolvconf и network-manager. На багтрекере подсказали такое решение (думаю, актуально для серверов):
Если не используете network-manager:
1) sudo apt-get purge network-manager
2) sudo dpkg-reconfigure resolvconf
3) После перезагрузки симлинк на resolv.conf не пропадает
 

Olej

New member
Сообщения
684
#5
Проблема оказалось в конфликте resolvconf и network-manager.
Естественно. Или вручную управлять сетевыми интерфейсами через /etc/network/interfaces, либо использовать network-manager - network-manager управляя сетевыми интерфейсами переписывает постоянно resolv.conf.