Это - предложенное обходное решение, которое могло бы работать на Вас.
Попытайтесь играть время владения, обеспеченное сервером DHCP на стороне клиента с помощью dhcp-оценки (пример тут же). Установите значение ниже, чем время, изменившись между сетями.
Например, если это берет Вам, 30 минут обычно для получения из офиса для размещения, устанавливая его на 20 минут должны заставить виртуальную машину делать недействительным арендный договор, как только Вы возвращаетесь домой.
При установке второго сетевого соединения "только для хоста" с хостом можно следить за его основным сетевым соединением (соединениями) для наблюдения, когда 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 X, чем я, Вы могли бы, вероятно, сцепить сетевую подсистему с ssh от хоста до гостя и избежать некогда на минуту опроса.
Это действительно требует, чтобы Вы смогли к ssh между хостом и гостем без пароля, все же. Вы могли бы использовать ключ без пароля, этому только позволяют запустить скрипт, который работает ifconfig en1
.
Отредактируйте свои хосты /etc/network/interfaces
:
auto eth0
post-up VBoxManage controlvm nameofyourboxhere setlinkstate1 on
post-down VBoxManage controlvm nameofyourboxhere setlinkstate1 off
Должен сделать точно, что Вы хотите! Может, конечно, быть улучшен, но я думаю, что показал Вам путь.
Кажется, что это - больше проблемы с тем, что Вы используете для виртуализации (VMware или VirtualBox или безотносительно), где это не говорит виртуальной машине, что соединение было сброшено и так как виртуальная машина все еще имеет арендный договор DHCP из первой сети, это не знает, что должно получить новый. Вместо того, чтобы пытаться играть вокруг с виртуальной машиной, посмотрите, имеет ли независимо от того, что Вы используете для виртуализации, кнопку с одним щелчком или что-то, где можно позволить/запретить виртуальный NIC на виртуальной машине так, чтобы, когда это сбросило, это было вынуждено захватить новый IP.
Вот (возможно, слишком) простой скрипт для вас CentOS VM, который сделает то, что вы ищете. Я рекомендую поместить этот скрипт в /usr/local/sbin, так как это не системный скрипт, и он выполняется root.
#!/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
dhcp-eval
помог бы, но это действительно приводило меня думать, возможно, что я могу использоватьsupersede option dhcp-lease-time 1200
– Old Pro 15.09.2012, 06:16send dhcp-lease-time 1200; supersede option dhcp-lease-time 1200;
но даже день спустя после того, как арендный договор истек, клиент DHCP автоматически не получал новый IP-адрес. Возможно из-за пути VMware обновляет системные часы при возобновлении приостановленного VM. – Old Pro 16.09.2012, 22:48