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

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

我在笔记本电脑上运行 Centos 虚拟机,使用桥接网络连接以避免双重 NAT 问题,并通过 DHCP 分配地址。在我将笔记本电脑移至另一个网络之前,此方法工作正常,此时虚拟机不会注意到它位于不同的网络上,并继续使用旧的 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

如果您与主机设置了第二个“仅主机”网络连接,则可以监视其主要网络连接以了解 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.

答案4

这是一个适用于 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

完成后,将此条目放入 root crontab 文件或 中/etc/cron.d/nettest.cron,然后一切就完成了:

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

相关内容