デュアルNATの問題を回避するために、ブリッジされたネットワーク接続を使用し、DHCPを介してアドレスを割り当てながら、ノートブックでCentos仮想マシンを実行しています。ラップトップを別のネットワークに移動するまで、この方法は正しく機能しました。その時点で、仮想マシンはラップトップが別のネットワークにあることを認識しておらず、以前のIPアドレスを使用して接続が切断されました。
現在、私は手動でネットワーク接続を実行してリセットしifdown
てifup
それを管理していますが、自動化された方法を好みます。提案?
メモ:
- すべてのネットワークには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