web-dev-qa-db-ja.com

NginxとNSD3は、割り当てられたIPを使用できないため、起動時に起動しません

サーバーはUbuntu12.04を実行しているXenVPSであり、再起動後に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 autoeth0からの私の基本的なネットワーク構成です

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

IPを追加したかったのですが、サーバーから発信されるすべてのトラフィックに最初のIPを使用するため、これらの厄介なIDアドレスがあります。

2
Damn Terminal

Nsd3はnetwokの後に開始する必要があるようです。 /etc/init.d/nsd3ファイルのRequired-Start部分に$ networkを追加すると、問題が解決するはずです。

1
han

これに対する最も簡単な修正は、nginxまたはnsdを特定のIPアドレスにバインドせずに、任意のアドレスをリッスンすることです。たとえば、nginxの場合:

listen [::]:80;

簡単ではない修正は、ネットワークインターフェイススクリプトを修正することです。現在の構成方法では、IPアドレスはルーティングされますが、プログラムが明示的にリッスンできるように、実際にはインターフェイスにバインドされていません。 (上記のように、いずれかのアドレスにバインドされている場合にのみトラフィックを受信します。)これを行うには、ip routeコマンドの代わりに追加のifaceセクションが必要です。

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
1
Michael Hampton