Nginx и NSD3 не запускаются при загрузке, потому что они не могут использовать назначенный IP

Сервер Xen VPS работает под управлением Ubuntu 12.04, и ни nginx, ни NSD3 не появляются после перезагрузки. Очевидная причина этого заключается в том, что они не могут связываться с назначенными им IP-адресами сразу после загрузки,

из /var/log/boot.log

* Starting configure network device                                     [ OK ]
* Stopping save kernel messages                                         [ OK ]
* Starting MTA                                                          [ OK ] 
nginx: [emerg] bind() to [2a01:1b0:removed:1c9c]:80 failed (99: Cannot assign requested address)
* Starting nsd3...                                                      [ OK ] 
[...]
* Starting configure virtual network devices                            [ OK ]
* Stopping configure virtual network devices                            [ OK ]

из /var/log/nsd.log

[1351715473] nsd[956]: error: can't bind udp socket: Cannot assign requested address
[1351715473] nsd[956]: error: server initialization failed, nsd could not be started

Все работает отлично через пару секунд, и nginx и NSD3 могут быть запущены.

Мне кажется, что проблема в неправильном порядке загрузки, nginx и NSD3 запускаются до того, как конфигурация сети может быть полностью выполнена. Я обошел это, положив

# nginx and nsd boot fix
sleep 4
/etc/init.d/nsd3 start
/etc/init.d/nginx start

в /etc/rc.local, но это не правильное решение. Как правильно решить эту проблему?

Вот моя основная конфигурация сети, из /etc/network/interfaces auto eth0

iface eth0 inet static
  address 89.removed.121
  gateway 89.removed.1
  netmask 255.255.255.0

iface eth0 inet6 static
  up echo 0 > /proc/sys/net/ipv6/conf/all/autoconf
  up echo 0 > /proc/sys/net/ipv6/conf/default/autoconf
  netmask 64
  gateway 2a01:removed:0001
  address 2a01:removed:7c3b
  up ip addr add 2a01:removed:62bd dev eth0 preferred_lft 0
  up ip addr add 2a01:removed:ce6d dev eth0 preferred_lft 0
  up ip addr add 2a01:removed:3e13 dev eth0 preferred_lft 0
  up ip addr add 2a01:removed:1c9c dev eth0 preferred_lft 0

auto lo
iface lo inet loopback

Эти неловкие идентификаторы addr есть, потому что я хотел добавить дополнительные IP-адреса, но по-прежнему использовать первый для всего трафика, исходящего с сервера.

2 ответа

Кажется, что nsd3 должен запускаться после netwok. добавление $network в часть Require-Start файла /etc/init.d/nsd3 должно решить эту проблему.

Самым простым решением для этого является не привязка nginx или nsd к определенному IP-адресу, а прослушивание любого адреса. Например, в nginx:

listen [::]:80;

Менее простое решение - исправить скрипт сетевого интерфейса. Как вы сейчас настроили, ваши IP-адреса перенаправляются к вам, но на самом деле они не привязаны к интерфейсу таким образом, чтобы программы могли их явно прослушивать. (Они получают трафик только для них, если они связаны с любым адресом, как указано выше.) Для этого вам нужны дополнительные iface разделы, а не ip route команды.

iface eth0 inet6 static
        address 2001:db8::1234
        netmask 64

iface eth0 inet6 static
        address 2001:db8::5678
        netmask 64

iface eth0 inet6 static
        address 2001:db8::abcd
        netmask 64
Другие вопросы по тегам