新しいネットワークから新しいIPアドレスを自動的に取得します。

新しいネットワークから新しいIPアドレスを自動的に取得します。

デュアルNATの問題を回避するために、ブリッジされたネットワーク接続を使用し、DHCPを介してアドレスを割り当てながら、ノートブックでCentos仮想マシンを実行しています。ラップトップを別のネットワークに移動するまで、この方法は正しく機能しました。その時点で、仮想マシンはラップトップが別のネットワークにあることを認識しておらず、以前のIPアドレスを使用して接続が切断されました。

現在、私は手動でネットワーク接続を実行してリセットしifdownifupそれを管理していますが、自動化された方法を好みます。提案?

メモ:

  • すべてのネットワークにはDHCPサーバーがあります。
  • インターフェイスを呼び出すと、VM は各ネットワークで IP アドレスのリースを正しく取得します。
  • DHCPサーバーの設定を変更できません。
  • これらのネットワークは異なるIPアドレス範囲にあります。

答え1

ホストを編集します/etc/network/interfaces

auto eth0
  post-up VBoxManage controlvm nameofyourboxhere setlinkstate1 on
  post-down VBoxManage controlvm nameofyourboxhere setlinkstate1 off

あなたがしたいことをする必要があります!もちろん改善することができますが、その方法を示したようです。

答え2

以下はあなたに役立つ提案された解決策です。

クライアントのDHCPサーバーが提供するリース時間を試してください。DHCP評価(例はすぐそこにあります)。ネットワーク間の時間変化の下の値を設定します。

たとえば、オフィスから家に移動するのに通常30分かかる場合は、20分に設定すると、家に着くとすぐに仮想マシンのリースが期限切れになります。

答え3

ホストへの2番目の「ホストのみ」ネットワーク接続を設定している場合は、デフォルトのネットワーク接続を監視して、IPアドレスが変更されたタイミングを確認できます。まるで…

while sleep 60 ; do
    new_ip="`ssh host_ip ifconfig en1 | grep 'inet ' | awk '{print $2}'`"
    if [ "$new_ip" != "$old_ip" ] ; then
        ifdown eth0 ; ifup eth0
    fi
    old_ip="$new_ip"
done

またはOSに慣れている場合

ただし、これを行うには、パスワードなしでホストとゲスト間でSSH経由で接続できる必要があります。実行のみを許可するパスワードのないキーを使用できますifconfig en1

答え4

以下は、必要なタスクを実行するCentOS VMの(おそらく)単純なスクリプトです。このスクリプトはシステムスクリプトではなくルートによって実行されるため、/usr/local/sbinに配置することをお勧めします。

#!/bin/bash
# nettest.sh
# Get the gateway address from the routing table
gateway=$(netstat -rn | awk '/^0.0.0.0/ {print $2}')

# Try and ping the gateway
ping -c 1 ${gateway}
# If the ping succeeds, exit.
if [ $? == 0 ]; then
     exit
# Otherwise take down and bring up the network interface
else
    ifdown eth0
    ifup eth0
    exit
fi

完了したら、このエントリをルートcrontabファイルに入れるか、/etc/cron.d/nettest.cronすべての設定が完了しました。

# Call nettest.sh every 5 minutes
*/5 * * * * /usr/local/sbin/nettest.sh 2>&1> /dev/null

関連情報