2015/6/1 注記
最近ツイートされたので現状を説明すると、
最新のUbuntu Server 14.04.2+Updateではここで問題として取り上げている現象は起きないことを確認しています。
設定を書き換えた後、ifdown eth0; ifup eth0とやれば反映されます。複数NICがある場合はifdown eth0 eth1; ifup eth0 eth1のように列挙すればいいです。
ちょっとしたネタで、ネットワーク設定周りにおける「Fedora 20とDebian 7.5、Ubuntu Server 14.04」の比較をしてみようと思います。今回の議題は「IPアドレスを設定し、ネットワークサービスを再起動してIPアドレスを変更する」というものです。サーバーとして使うには必ず行う手順です。
ちなみにCentOS 6.xやUbuntu Server 12.04.xは今回の比較には含めていませんが、もちろん当たり前のようにできます。
だから含めませんでした。
■Fedora 20
まずはFedora20。Kernelは3.13ベースです。
# ip addr show
2: ens33:
mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
inet 192.168.1.28/24 brd 192.168.1.255 scope global dynamic ens33# vi /etc/sysconfig/network-scripts/ifcfg-eno16777736
TYPE=Ethernet
BOOTPROTO=none ←変更
(略)
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=192.168.1.6
DNS2=8.8.8.8# systemctl restart NetworkManager
# ip addr show2: ens33:
mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
inet 192.168.1.100/24 brd 192.168.1.255 scope global ens33
なんの問題もありません。
SSH接続越しで作業をしましたが、ネットワーク接続が切れることはありませんでした。
そうそう、最小インストールでもNetwork Managerがネットワーク周りを管理するようですね。最近のFedoraは。
■Debian 7.5
次にDebian 7.5。Kernelは3.2なんですね。
$ ip addr show eth0
2: eth0:mtu 1500 qdisc pfifo_fast state UP qlen 1000
inet 192.168.1.30/24 brd 192.168.1.255 scope global eth0# vi /etc/network/interfaces
# The loopback network interface
auto lo
iface lo inet loopback# The primary network interface
allow-hotplug eth0
iface eth0 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 192.168.1.6 8.8.8.8# service networking restart
[....] Running /etc/init.d/networking restart is deprecated because it may not r[warnble some interfaces ... (warning).
[....] Reconfiguring network interfaces...
※ssh切れる(コンソール直) # ifup eth0
※ssh接続復帰、eth0のアドレスが変わる
service networking restartコマンドを実行した時にSSH接続が切れました。ただ、restartコマンドって、stop→startを実行しているわけですから許容範囲です。
"コンソール直"のところでは、端末にログインしてifup eth0を実行しました。そうするとセッションが再接続されて、SSH接続が復帰しました。
ちなみにこう実行すると、SSH接続が一旦落ちることなく、SSH接続を継続可能でした。
# service networking restart;ifup eth0
[....] Running /etc/init.d/networking restart is deprecated because it may not r[warnble some interfaces ... (warning).
[ ok ] Reconfiguring network interfaces...done.
#
もちろん、IPアドレスは想定したものに変更されます。
■Ubuntu 14.04
それでは最後にUbuntu Server 14.04です。Kernelは3.13ベースです。
Ubuntu Server 12.04ではservice networking restartは想定通り動かないものの、/etc/init.d/networking restartを実行することでIPアドレスの設定を反映できました。ではUbuntu Server 14.04ではどうでしょうか。
$ sudo vi /etc/network/interfaces
# The loopback network interface
auto lo
iface lo inet loopback# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 192.168.1.6 8.8.8.8$ sudo service networking restart
stop: Job failed while stopping
start: Job is already running: networking$ ip addr show eth0
2: eth0:mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
inet 192.168.1.29/24 brd 192.168.1.255 scope global eth0
(IPアドレスが変わらない)$ sudo /etc/init.d/networking restart
(なにもメッセージ出力なし)
$ ip addr show eth0
2: eth0:mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
inet 192.168.1.29/24 brd 192.168.1.255 scope global eth0
(IPアドレスが変わらない)$ sudo ifup eth0
ifup: interface eth0 already configured
(メッセージが意味不明。eth0はすでに設定済み?)
Ubuntu Server、あいかわらず動かない...というか、余計酷くなっていません?
これはバグだと思ったので報告しようと思ったのですが、「仕様だ」と書かれていました(こことかここ、このあたり?)。
リモート作業している時にSSH接続が落ちると困るから、現在の仕様になっているようです。Debian 7.5みたいな対応はできないものかなー。
■総評
Ubuntu 14.04ェ。