我的笔记本电脑上有一个 vagrant 客户端盒“ubuntu/trusty64”。我经常更换家庭/工作/咖啡网络,或者将笔记本电脑连接到手机热点。
我想根据我的机器所在的网络重新配置 vagrant 客户端的网络接口,从而在所有不同的网络上使用公共网络。因此,只要它有效,我就可以根据需要添加路由或取消注释配置块。
我还想在我的 ubuntu 主机上使用 ssh 配置文件,这样我就可以通过 sftp 轻松浏览 vagrant boxes 的文件系统。
问题:我该怎么办呢。
这是我尝试过的:
The initial setup that works:
Host machine:
---------------
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 wlan0
192.168.1.0 0.0.0.0 255.255.255.0 U 9 0 0 wlan0
...
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether a4:c4:94:5f:00:a5 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.10/24 brd 192.168.1.255 scope global wlan0
valid_lft forever preferred_lft forever
inet6 fe80::a6c4:94ff:fe5f:a5/64 scope link
valid_lft forever preferred_lft forever
Guest vm:
---------------
config.vm.network :public_network, bridge: "wlan0", ip: "192.168.1.251", netmask: "255.255.255.0"
然后我更换网络(例如连接到蜂窝热点):
Host machine:
---------------
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.43.1 0.0.0.0 UG 0 0 0 wlan0
192.168.43.0 0.0.0.0 255.255.255.0 U 9 0 0 wlan0
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether a4:c4:94:5f:00:a5 brd ff:ff:ff:ff:ff:ff
inet 192.168.43.101/24 brd 192.168.43.255 scope global wlan0
valid_lft forever preferred_lft forever
inet6 fe80::a6c4:94ff:fe5f:a5/64 scope link
valid_lft forever preferred_lft forever
Guest vm:
---------------
config.vm.network :public_network, bridge: "wlan0", ip: "192.168.43.105", netmask: "255.255.255.0"
无法通过 ssh 连接到 192.168.43.105(通过使用 ssh 配置)。经过调查,我发现网络接口甚至没有分配(我在启动期间检查虚拟盒中的 GUI 时看到了这一点):
旧 IP 正在被分配。
请让我知道您对故障排除的任何想法和方案。
附言
我正在从 serverfault 转移问题: https://serverfault.com/questions/798980/how-to-change-vagrant-guest-vm-ip-when-the-host-machine-changes-the-network
如果这不符合规则,我提前致歉。我真的希望如此。
答案1
有多种方法可以解决这个问题,但所有方法都涉及主机或猜测机器参与同一网络。
我只是在我的家庭和工作网络上的网络管理器管理的 wlan0 连接上创建了一个 IP 别名(网络由 IP 和子网掩码定义)。
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether a4:c4:94:5f:00:a5 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.10/24 brd 192.168.1.255 scope global wlan0
valid_lft forever preferred_lft forever
inet 192.168.0.158/24 brd 192.168.0.255 scope global wlan0
valid_lft forever preferred_lft forever
inet6 fe80::a6c4:94ff:fe5f:a5/64 scope link
valid_lft forever preferred_lft forever
并且猜测操作系统只有 1 个 IP:
config.vm.network :public_network, bridge: "wlan0", ip: "192.168.0.159", netmask: "255.255.255.0"
因此,现在当我在家时,我可以通过 ssh 连接到计算机,因为我有一个 IP 别名,并且我的 NIC 与客户机处于同一网络中。当我在工作时,它将自动工作,因为我的 NIC 将自动处于同一子网中。