仮想イーサネットはホットプラグから静的IPを取得できません。

仮想イーサネットはホットプラグから静的IPを取得できません。

dhcpサーバーがある場合は、IPアドレスを動的に取得し、dhcpサーバーがあるかどうかにかかわらず、常に静的IPを持つようにイーサネットインターフェースを構成する必要があります。

次のファイルがあります/etc/network/interfaces

...
auto eth0
allow-hotplug eth0
iface eth0 inet dhcp

auto eth0:1
allow-hotplug eth0:1
iface eth0:1 inet static
  address 10.0.10.2
  netmask 255.255.255.0

...

システムの起動時にケーブルが接続されている場合、仮想インターフェイス(eth0:1)は固定IPを取得します。システムが起動してケーブルが接続されると、eth0DHCPサーバーから動的IPを取得しますが、eth0:1IPはありません。

なぜそんなことですか?

答え1

10年後、私は同じ問題に直面しました。私に役立つ解決策は、eth0設定に次の行を追加することです。

        post-up ifup eth0:1 || true
        pre-down ifdown eth0:1 || true

また、Allow-hotplugをautoに置き換えました(出典:https://unix.stackexchange.com/a/663955/601344)。

したがって、全体の構成は次のようになります。

auto lo eth0 eth0:1
iface lo inet loopback

iface eth0 inet dhcp
        post-up ifup eth0:1 || true
        pre-down ifdown eth0:1 || true


iface eth0:1 inet static
  address ...
  netmask ...

おそらく、これは古いシステムを使用している人に役立ちます。 ;)

答え2

これが現在の解決策です。

私はこの台本を生き続ける家庭教師:

#!/bin/bash 

is_cable_plugged() {
 if [ "`ifconfig eth0|sed -n '/running/I p'`" == '' ];then echo no;else echo yes;fi
}


while true; do
    if [[ "$(is_cable_plugged)" == "no" ]]; then 
        while true; do
            if [[ "$(is_cable_plugged)" == "yes" ]]; then
                echo "DEBUG: Cable is now connected, reloading networking..." 
                /etc/init.d/networking reload
                break
            fi
            echo "DEBUG: Waiting for cable to be connected..."
            sleep 2s
        done
    fi
    echo "DEBUG: Cable is connected, do nothing..."
    sleep 10s
done

関連情報