Вопрос или проблема
dnsmasq не запускается при загрузке Ubuntu 13.10, показывая ошибку в syslog:
dnsmasq не удалось создать слушающий сокет для 192.168.0.10: Не удается назначить запрашиваемый адрес
Когда я запускаю его вручную, все работает без проблем. Вот файл dnsmasq.conf:
bogus-priv
server=212.27.40.240
server=212.27.40.241
local=/mydomain.0./
# interface=eth0
listen-address=127.0.0.1
listen-address=192.168.0.10
expand-hosts
domain=mydomain.0.
dhcp-range=192.168.0.20,192.168.0.100,24h
dhcp-option=3,192.168.0.1
dhcp-option=vendor:MSFT,2,1i
cname="www.mydomain.0",myhost
Как я понимаю, NetworkManager использует урезанную версию dnsmasq, что может конфликтовать с полной версией. Думаю, это и есть причина проблемы. Я хотел бы, чтобы хост с сервером на нем и все остальные хосты в сети использовали dnsmasq.
Есть идеи, что происходит?
Похоже, что адрес или порт уже используется. Попробуйте отключить networkmanager
, чтобы посмотреть, поможет ли это. Скорее всего, это не причина, так как вы можете получить доступ к адресу, когда вручную запускаете службу.
Кроме того, это может происходить во время загрузки, если ваш адрес не был назначен серверу до запуска службы dnsmasq
. Если это так, убедитесь, что вашему серверу назначен статический IP-адрес.
У меня была такая же проблема в 14.04. Это оказалось сочетанием NetworkManager и dnsmasq. В /var/log/syslog
вы можете увидеть, что eth0 не готов, когда dnsmasq пытается запуститься.
Моим решением было отключить eth0 для NM, настроив eth0 в /etc/network/interfaces
.
Добавьте
iface eth0 inet dhcp
… или подобное в конфигурацию.
Таким образом, eth0 доступен, когда запускается dnsmasq.
У меня была такая же ошибка, я не запустил интерфейс eth0, и IP-адрес сервера не был назначен. Поэтому решение проблемы заключалось в следующем:
- Запустить интерфейс eth0 и назначить IP с помощью
sudo ifup eth0
и проверить с помощьюsudo ip a
- Перезапустить сервер dnsmask
sudo service dnsmasq restart
Если это помогает, моя конфигурация выглядела следующим образом
/etc/network/interfaces
allow-hotplug eth0
iface eth0 inet dhcp
address 192.168.2.1
netmask 255.255.255.0
network 192.168.2.0
broadcast 192.168.2.255
dns-nameservers 8.8.8.8
dns-search lan
post-up /sbin/iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
/etc/dnsmasq.conf
interface=eth0 # Использовать интерфейс eth0
listen-address=192.168.2.1 # Явно указать адрес, по которому слушать
bind-interfaces # Привязаться к интерфейсу, чтобы убедиться, что мы не отправляем данные в другое место
server=8.8.8.8 # Перенаправлять DNS-запросы к Google DNS
domain-needed # Не перенаправлять короткие имена
bogus-priv # Никогда не перенаправлять адреса в нерутируемых адресных пространствах.
dhcp-range=192.168.2.50,192.168.2.150,12h # Назначать IP-адреса в диапазоне от 172.24.1.50 до 172.24.1.150 с арендным временем 12 часов
Моей целью было получить DHCP-сервер, чтобы иметь возможность перенаправлять кабельный трафик на WLAN моего ноутбука
.
Ответ или решение
Запуск dnsmasq при старте Ubuntu 13.10 может сталкиваться с проблемами, если интерфейс, на котором он пытается слушать, не готов или не имеет назначенного IP-адреса. Эта проблема может проявляться в виде ошибки в системном журнале:
dnsmasq failed to create listening socket for 192.168.0.10: Cannot assign requested address
Основные причины проблемы
-
Конфликт с NetworkManager: Часто NetworkManager может использовать свою упрощённую версию dnsmasq, что может приводить к конфликту с полновесной версией. Это не всегда прямая причина проблемы старта dnsmasq, но стоит проверить логи для выявления возможных конфликтов.
-
Не готовность сетевого интерфейса: Если интерфейс (например, eth0) ещё не получил IP-адрес к моменту старта службы dnsmasq, это может вызвать такую ошибку. Вам нужно убедиться, что интерфейс имеет статический IP-адрес или получает его достаточно быстро.
Решение
-
Проверка и настройка интерфейса eth0:
- Убедитесь, что eth0 имеет корректные настройки в файле
/etc/network/interfaces
. Добавьте туда следующие строки:allow-hotplug eth0 iface eth0 inet static address 192.168.0.10 netmask 255.255.255.0
- Замените, если нужно, на
inet dhcp
, если вы предпочитаете динамическое назначение IP в сети.
- Убедитесь, что eth0 имеет корректные настройки в файле
-
Изменение конфигурации dnsmasq:
- Убедитесь, что конфигурация
/etc/dnsmasq.conf
соответствует вашим сетевым настройкам. Если вы назначаете интерфейсу конкретный IP, используйте опции:interface=eth0 listen-address=192.168.0.10 bind-interfaces
- Если интерфейсу присваивается другой IP, внесите соответствующие изменения.
- Убедитесь, что конфигурация
-
Проверка запуска службы:
- После настройки интерфейса вручную его можно запустить с помощью:
sudo ifup eth0
- Перезапустите службу dnsmasq для проверки изменений:
sudo service dnsmasq restart
- Убедитесь, что ошибок в логах
/var/log/syslog
нет.
- После настройки интерфейса вручную его можно запустить с помощью:
-
Оптимальное взаимодействие с NetworkManager:
- В случае необходимости отключите управление eth0 через NetworkManager, добавив соответствующие строки в конфигурациях.
Таким образом, главное внимание следует уделить обеспечению доступности IP-адреса интерфейса к моменту старта службы dnsmasq. Успешное решение этой задачи обеспечит корректный запуск и работу dnsmasq на вашем сервере, что позволит использовать все возможности DHCP и DNS-сервера для вашей локальной сети.