【Linux:ネットワークコマンド】ifup ifdownエラーが出た時のまとめ

Linux
スポンサーリンク

みなさん、こんにちは。ぶたキムチです。

今回は、ifup / ifdowコマンドエラーで対策したことについてまとめました。

ifup / ifdowでNICの有効化をしようと思ったら、エラーにハマりました。

その時の対策した内容、調べた内容をまとめたので、参考になれば幸いです。

使用した環境

 

OS:Debian9

今回の環境はWindows10にVirtualBoxをインストールして、仮想環境上にDebianを構築しました。

エラー・症状について

EthernetのIPアドレスを変更し、ifdownコマンドを使用してNICを無効化しようと思ったら、以下のエラーが発生しました。

# ifdown eth0
ifdown: interface eth0 not configured

ちなみに、ifupコマンドを実行すると以下のようなエラーが出ました。

# ifup eth0
ifup:RTNETLINK answers: Invalid argument

ifdownの時は、eth0が構成されていないなどのエラーが出て、なかなかNIC無効化できない。

とりあえず行った対策をまとめた。

そもそもifup/ifdownコマンドは何?

ifdownコマンドは、指定したNIC(ネットワークインターフェースカード)を無効にし、ifupコマンドはNICコマンドを有効にするコマンドです。

[書式]ifup [ネットワークインターフェース名]
[書式]ifdown [ネットワークインターフェース名]
使用例:ifup eth0

使用例:ifdown wlan0

注意:NetworkManagerを使用しているシステムやディストリビューションでは、これらのコマンドが利用できないことがあるので設定が必要。

if upや ifdown利用するために必要な設定

ifup / ifdownなどネットワーク管理をしているファイルは、NetworkManagerが管理をしています。設定ファイルは以下のディレクトリに存在します。

cat /etc/NetworkManager/NetworkManager.conf
[main]
plugins=ifupdown,keyfile

[ifupdown]
managed=false

「managed=false」ここを「managed=true」に変更することでifup ifdownを使ってネットワーク管理ができるようになります。

 

対策1:参照ファイルを書き換える

ifupやifdownの正体はただのスクリプトです。以下の2つの設定スクリプトを参照することで、ネットワークの有効化・無効化を行っています。

・/run/network/ifstate
・/etc/sysconfig/network-script

ディストリビューションによって、設定ファイル名は異なるで注意。

今回、自分が使ったディストリビューションは、Debianですので、「/run/netowork/ifstate」の設定を以下のように変更する。

# vi /run/network/ifstate
lo=lo
eth0=eth0 <--追加
wlan0=wlan0 <--追加

ifconfigなどの他のネットワークコマンドを使用すると、ifupやifdownコマンドは正常に動作しないっぽい。

要するに、先ほどのNetworkManagerで、これらのネットワークコマンドをどう管理するかを決めているので、

ifup/ifdownをtrueにしたことで、ifconfig等のコマンド使用してしまうと、うまく働かないという問題が生じる。

 

設定スクリプトを変更したら、ネットワークの再起動をしましょう。

ネットワークの再起動は、以下のうち対応しているコマンドを選択してください。

service network restart

/etc/rc.d/init.d/network restart

/etc/init.d/networking restart <--私の環境だとこれ。

だが、先ほどのエラーは改善されなかった。

(しかし、色々調べるとこの時点でエラーの修正をできている人もいるようです。)

参考:http://nemupm.hatenablog.com/entry/2014/09/20/035935

対策2:IPアドレスの完全に開放

次に、ネットワークデバイスは変更しても、変更前のIPアドレスと変更後のIPアドレスが同じである場合、

IPが衝突を起こしている可能性も考えられる。

そこで、完全なIPの解放を行う。

# ip addr flush dev eth0
# ifdown eth0

その後、ネットワークを再起動

/etc/init.d/networking restart

するとエラーもなく設定が完了した。

pingコマンドを実行し、通信確認OK。

 

ifdown と ifconfig downにの違い

ifconfig <ネットワークデバイス名>

ネットワークリンクを終了させるコマンド。そのため、ipアドレスが設定された状態となりipアドレスは保持される。

完全なipの解放はされないため、別のデバイスを接続しようと思っても、新しく設定したデバイスと競合する。

ifdown<ネットワークデバイス名>

ifdownはipアドレスの完全な切り離しを行うため、コマンド実行後は、変更前に割り当てたipアドレスを完全にリリースされてしまいます。

新しいデバイスにこれまでのipアドレスを割り当てたい場合は、ifdownを使う。

 

その他のNIC有効・無効にするネットワークコマンド

・ipコマンドを使用した場合

ip l set eth0 up
ip l set eth0 down

・nmcliコマンドを使用した場合

nmcli c down eth0
nmcli c up eth0

今後は、これらのコマンドの方がよいらしい。

参照:https://qiita.com/koara-local/items/564da1c2f778be1de6ba

 

コメント

タイトルとURLをコピーしました