在新网络中自动获取新IP地址


4

我正在使用桥接网络连接在便携式计算机上运行Centos虚拟机,以避免双NAT问题,其地址是通过DHCP分配的。在我将笔记本电脑移至另一个网络之前,此方法工作正常,此时,VM不会注意到它位于其他网络上,并继续使用旧的IP地址,从而导致连接中断。

目前,我通过手动运行ifdownifup重置网络连接来管理此问题,但我更希望采用自动方式进行此操作。有什么建议吗?

笔记:

  • 所有网络都有DHCP服务器。
  • 启动接口时,VM会正确获取每个网络上的IP地址租约。
  • 我无法更改DHCP服务器上的设置。
  • 网络位于不同的IP地址范围内。

我认为这需要主机系统的配合才能可靠地完成。什么是主机操作系统?
Gilles 2012年

@Gilles Host是运行VMware Fusion 5.0的OS X
Old Pro

1
我认为您必须一直保持暂停VM。每次关闭和启动接口时都必须执行操作,或者重新启动VM。
Ketan Patel

Answers:


1

编辑主机/etc/network/interfaces

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

应该正是您想要的!当然可以改善,但是我想我向您展示了方法。


0

这是一个建议的解决方法,可能对您有用。

尝试使用dhcp-eval弄乱客户端DHCP服务器提供的租用时间(示例就在这里)。将该值设置为低于网络之间更改的时间。

例如,如果从办公室到家通常要花费30分钟,那么将其设置为20分钟将使您的虚拟机一回到家就使租约失效。


我看不出有什么dhcp-eval帮助,但这确实使我认为我可以使用supersede option dhcp-lease-time 1200
Old Pro

不,那也不起作用。我设置了,send dhcp-lease-time 1200; supersede option dhcp-lease-time 1200;但即使在租约到期后的第二天,DHCP客户端也没有自动获取新的IP地址。可能是由于VMware在恢复暂停的VM时更新系统时钟的方式。
Old Pro

0

如果您与主机建立第二个“仅主机”网络连接,则可以查看其主要网络连接以查看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上,而不是从主机到来宾,并且避免每分钟轮询一次。

不过,这确实要求您能够在主机和访客之间切换而无需输入密码。您可能会使用仅允许运行运行脚本的无密码密钥ifconfig en1


0

听起来这与您要进行虚拟化的任何内容(VMWare或VirtualBox或其他任何东西)无关,因为它不告诉虚拟机连接已重置,并且由于虚拟机仍具有来自第一个网络的DHCP租约,它不知道需要获得一个新的。与其尝试使用虚拟机,不如查看用于虚拟化的任何东西是否都具有一键式按钮或可以在虚拟机上启用/禁用虚拟NIC的功能,以便在重置时强制抓住它。一个新的IP。


0

这是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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.