/etc/network/interfacesがインターフェイスを起動できるかどうかを確認する方法は?

/etc/network/interfacesがインターフェイスを起動できるかどうかを確認する方法は?

Debianベースのヘッドレスボックスがあります。 Webインターフェイスを介してアクセスできるように設計されています。ネットワークが通過しました/etc/network/interfaces。ファイルが実際に有効であることを確認しようとしています。私の考えは、ファイルにエラーがあるかどうかを確認し、その場合はデフォルトのファイルに戻ることです。

私の質問は、質問の最初の部分であるdiscover error in filesに関するものですinterfaces

コマンドの使用について多くの質問がありましたifup --no-actが、実際に見たのは、このアプローチは私の状況に十分強力ではないということです。たとえば、

root@arm:~# ifup --no-act --interfaces=/etc/network/interfaces eth0
run-parts  /etc/network/if-pre-up.d
ip addr add 1s23.123.123.123/255.255.255.192 broadcast +          dev eth0 label eth0
ip link set dev eth0   up
 ip route add default via 123.123.123.122  dev eth0
run-parts  /etc/network/if-up.d

無効なIPアドレスセット(最初のオクテットに追加の「s」)を書き留めます。このコマンドはエラーを提供せず(とにかく表示されます)、この状態のファイルでコンピュータを再起動するとネットワーク機能が失われます。動作するinterfaces結果は非常に似ています(部分を除くbroadcast +)。

root@arm:~# ifup --no-act --interfaces=/etc/network/interfaces eth0
run-parts  /etc/network/if-pre-up.d
ip addr add 123.123.123.123/255.255.255.192 broadcast 123.123.123.127     dev eth0 label eth0
ip link set dev eth0   up
 ip route add default via 123.123.123.122  dev eth0
run-parts  /etc/network/if-up.d

これは主に私が避けたい問題です。私の質問は、/etc/network/interfacesファイル内の誤った設定を検出する方法です。プラス記号はエラーを示しますか?どういう意味ですか?この問題を解決するための最良の方法は何ですか?

答え1

短い答え:ifup --no-actネットワーク設定を使用して電話をかけて戻りコードをテストして確認します。

長い答え:私は組み込みデバイスに対して非常に似た仕事をしてきました。これには、networking起動前に実行され、システムが有効なイーサネット設定を持つようにするために作成されたinitスクリプトの関連部分があります。

ETH0_CUSTOM=/var/myproject/etc/interfaces.eth0 
result=1

if [ -f "${ETH0_CUSTOM}" ]; then
    ifup -n -i "${ETH0_CUSTOM}" eth0
    if [ $? -eq 0 ]; then
        ln -sf "${ETH0_CUSTOM}" /etc/network/interfaces.eth0
        result=0
    else
        echo "Validating ${ETH0_CUSTOM} failed"
    fi
fi

if [ ${result} -ne 0 ]; then
    ln -sf /etc/network/interfaces.eth0.default /etc/network/interfaces.eth0
fi

元のバージョンでは/etc/network/interfaces有効な設定

source /etc/network/interfaces.eth0

答え2

これには2つの問題/アプローチがあると思います。

  • ユーザーが間違えないように保護します。
  • 変更された構成を永久にする前にテストする方法はありますか?

最初の場合、すべての設定はスマートツールを介して行われます$EDITOR /etc/foobar。この場合、IPアドレスが有効であるか、デフォルトルートが同じネットワーク上にあるかを確認できます。ツールは、一部のスクリプト、またはグラフィカル/Webベースの管理インターフェース(OpenWRTなど)のいずれかです。

もう1つのことは、多くのシステムでは、ユーザーがディスプレイ設定(解像度など)を確認し、ユーザーが何もしない場合は、最後のタスク構成に置き換えるように、ネットワーク構成が適用された後にユーザーにそれを確認させることです。

したがって、次のようになります。

  • 起動設定を新しい設定から切り離して、ユーザーが変更できるようにする新しい構成のみが適用されます(開始構成ではありません!)。
  • ユーザーが新しい設定を適用するには、shutdown -r +5約5分間再起動()をスケジュールしてから、新しい設定をロードします。

  • これで、ユーザーがシステムに引き続きアクセスできることを確認します(新しいSSHセッションを開くことを含む)。

  • 可能であれば、変更を確認して再起動をキャンセルしてから、新しい設定を起動設定にコピーできます。

  • 修正が適用された後にシステムにアクセスできない場合は、変更を確認できず、再起動すると再起動されます(起動設定が正常であると仮定すると、システムが使用を開始したためです)。前に。)

このアイデアは、ネットワークインターフェイスの設定、ファイアウォールの設定などの変更に適用する必要があります。ただし、以前に有効な起動構成 (一部の重要なルールを含む) によって新しい構成が機能する状況が発生しないように、構成は独立している必要があります。

(もちろん、実際にシステムを再起動する必要はなく、設定をリセットするだけです。)


もちろん、これらのどれもrootユーザーが足に銃を撃つのを防ぐことはできませんが、少なくとも安全スイッチを備えたいくつかのツールを提供することはできます。

コンソール/シリアルポートなどを介したバックアップアクセスは依然として最善です。


/etc/network/interfacesこの特別なケースでは、ユーザーが編集して実行することに慣れている場合は、ifupそれらを削除する方法を教える必要があります。これは難しい場合があります。あるいは、実際の構成が実際に別の場所にあるようにシステムを変更して、古い習慣によって問題が発生しないようにすることもできます。

関連情報