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