ip link set [DEV] up/down とifup/downの挙動の違い
RHEL7系でNetworkManagerを無効にしてある環境下で特定のネットワークインターフェイスのダウン・アップをするときに
ip link set [DEV] down → ip link set [DEV] up するとデフォルトゲートウェイが消える。
ifdown [DEV] → ifup [DEV] だと大丈夫。
■結論
ipコマンドでやってるのは単純にインターフェイスのダウン・アップのみであり、アップ時に設定ファイル(/etc/sysconfig/network-script/配下のifcfg-e* は読み込んでない。
設定ファイル読み込ませてダウン・アップするにはnmcli使わなきゃいけない。
nmcliコマンドはNetworkManagerのコマンドなので、無効にしてあると使えない。
NetworkManager無効にしてある環境ではifdown → ifup すれば設定ファイル読み込んで起動してくれる。
■とある環境で
NetworkManager無効、/etc/sysconfig/network-script/ifcfg-ethX の設定ファイル直接書き換えでネットワーク設定済み。
ifup,ifdownはnet-tools系と同じく古くて非推奨になったものだと思い込み、今までifdown,ifupでやってた手順をip link set [ethX] down|up してみたところ、
デフォルトゲートウェイの設定が消失。
いろいろ調べてみると、どうもipコマンドでのリンクUPは単にネットワークのリンクをダウン/アップさせるだけで、設定ファイルは読み込まない模様。
>>ifup is a command that reads the /etc/network/interfaces (or other files depending on distro) brings the link up and correctly configures the interfaces as specified.
>>Running ip link only changes or shows the link status. It does not read the configuration file, it does not make any other changes.
確かにmanコマンド叩いても、ipコマンドのとこには設定ファイルどうこうの記述はないっぽい。
$ man ip ~~途中省略~~ ip link set x up Bring up interface x. ip link set x down Bring down interface x. ~~以下省略~~
ifupの方は設定ファイル使うよ、っていう記述あり。
$ man ifup ~~途中省略~~ The ifup and ifdown commands may be used to configure (or, respec- tively, deconfigure) network interfaces based on interface definitions in the files /etc/sysconfig/network and /etc/sysconfig/network-scripts/ifcfg-<configuration> ~~以下省略~~
■どうしてこうなった
以下多分。
ipコマンドはそもそも最近ちゃんとメンテされてないnet-toolsの中のifconfigコマンドを置き換える形で入ったものだった。
ifconfigによるUP/DOWNとifup/downの違いは下記。
>>ifconfig <デバイス名> down
>>単にネットワークのリンクをダウンさせます。よってipアドレスが設定されていた場合、ipアドレスは保持されます。
>>ifdown <デバイス名>
>>以下のファイルに従い処理が実行されます。
>>/etc/sysconfig/network-scripts/ifdown
なのでipコマンドは単純にネットワークのリンクをダウン/アップさせるだけのもの、なのかな?
■そうしてどうなった
RHEL7系の場合、nmcliを使用してダウン/アップさせれば設定ファイルを読み込んでUPしてくれる模様。
nmcliコマンドを使用するにはNetworkManager必須。NetworkManager管理下のインターフェイスに対してしか使えない模様。
本来はRHEL7系ではNetworkManagerを有効にして使われることが想定されているので、
ip コマンドでは一時的な設定、nmcliでは恒久的な設定(設定ファイルを書き換える)という使い分けをするのが推奨の手順のようです。
■そうはいっても
6系まではnet-toolsと設定ファイル直接編集がメジャーな設定だったわけで、NetworkManagerは設定ファイル勝手に書き換えたり、設定ファイル無視して立ち上がることがあったりとビミョーな挙動をとることも少なくなく、そのため嫌われ者だったりもしますね。
今更NetworkManager有効にしてこれを中心の運用にするのはそれはそれで慣れないやり方をみんなが取ることになって、別の意味で危なかったりする気がします。
簡単に移行できる方々は移行したらいいと思うし、抵抗がある方々は併用すればいいんじゃないでしょうか。
■ちなみに
/etc/sysconfig/network-scripts/配下にifup,ifdownのスクリプトがおいてあって、それぞれ/usr/sbin/配下の同コマンドへのシンボリックリンクになっています。
$ ls -l /etc/sysconfig/network-scripts/ifup lrwxrwxrwx. 1 root root 22 Feb 22 13:49 /etc/sysconfig/network-scripts/ifup -> ../../../usr/sbin/ifup $ ls -l /etc/sysconfig/network-scripts/ifdown lrwxrwxrwx. 1 root root 24 Feb 22 13:49 /etc/sysconfig/network-scripts/ifdown -> ../../../usr/sbin/ifdown
これらはただのスクリプトなので、catで見ることができます。