我正在运行一个 debian 主机,其中 eth0 和 wlan0 接口(为了清楚起见,我将它们称为 host:eth0 和 host:wlan0)都正常设置为 DHCP,并且一切运行正常。我在这里试图确定的是将可选虚拟机集成为通向外部世界的更高优先级路由的最佳方法 - 我将解释我的意思。
我想要做的是选择运行我的 virtualbox 客户设备,当它处于活动状态时,它将成为我的互联网路由器,从主机到虚拟机,通过虚拟机中的内部路由以及从虚拟机到 NAT 路由到互联网。
当虚拟客户机未运行时,进入虚拟客户机设备的路由不存在,因此将流量路由到正常设备/接口...
进一步详细说明一下,我在我的客户机上运行了一个 virtualbox 虚拟机,它有 2 个虚拟网卡 eth0 和 eth1(我将它们称为 guest:eth0 和 guest:eth1)。
其中第一个,guest:eth0 设置为使用 virtualbox 的“NAT”网络接口 - 这实际上意味着它将从我的活动 host:eth0 或 host:wlan0(无论哪个处于活动状态)获取路由。这运行得很好 - 我可以通过 NAT 风格的 virtual box 网络通过 guest:eth0 连接到互联网。
第二个客户接口 guest:eth1 被定义为静态(不可路由)地址 10.152.152.10/18,目的是允许主机建立到已知端点的路由(即进入虚拟客户设备的路由,然后在内部从 guest:eth0 路由到互联网)。
关于 guest:eth1,我决定使用 VirtualBox Host-Only-Networking 选项,当配置地址 10.152.152.11/18 时,会向我的主机添加一个新的 host:vboxnet0 接口,从而使到我的虚拟客户的路由可用(假设 host:vboxnet0 接口和 guest:eth1 接口在同一个 10.152.152.x/18 主题中)。
停下来喘口气,尽管我不确定正确的路由配置或配置样式,但我很高兴通过各种路由排列:
- 我的主机可以通过 host:eth0 和 host:wlan0 上的 DHCP 访问互联网
- 我的客人可以通过virtualbox NAT访问互联网guest:eth1
- 我的主机可以通过 host:vboxnet0 连接到我的客户机
所以这是一个挑战。
当我的 host:vboxnet0interface 由于我运行虚拟机而处于“活动”状态时,我最终会得到 2 个默认网关。通过研究,我意识到我可能需要 2 个 iptables - 并在具有不同指标的不同路由表中规定 2 个默认网关......但我还没有找到一种单一的路由配置样式,可以帮助我预定义适合这两种路由样式的静态规则:
- 当没有虚拟客户端运行时(并且没有可用的 vboxnet0 接口),然后就是快乐的日子,通过 DHCP 主机:eth0 和主机:wlan1 照常营业
- 当我的 VM 启动且 vboxnet0 处于活动状态时,它是从我的主机到互联网的唯一路由。
我已经证明了所有的链接 - 但现在只需要关于最佳路由模式的指导,以便现在关注这是否有意义。我希望在转储 iptables/ifconfig/ip 路由转储之前,可以从 Linux 路由忍者那里获得关于我需要在这里考虑的模式的指导?
我花了几个星期研究/试验这个,我想我取得了很好的进展,但需要一点经验,因为我在网上没有相关的建议,而且有点徘徊?
提前谢谢了。
答案1
路由不知道它路由到的目标地址是否可到达,无法通过度量和 来iptables
判断。因此,您需要以某种方式检测虚拟客户机是否可用,方法是找到一个位置来挂接到启动/关闭进程,或者将启动/关闭进程包装在您自己的脚本中并始终使用这些脚本。挂接到接口启动或关闭时执行的系统脚本也是一个选项,但这取决于您的系统(systemd
、经典 ifup/ifdown 等)。
当您找到适当的钩子时,只需根据脚本中的系统情况调整(单个)默认路由。