一些背景信息:
我正在尝试使用我的笔记本电脑创建一个虚拟专用网络虚拟盒。我希望虚拟机位于专用网络内,因此虚拟机只能由其他虚拟机和我的笔记本电脑(主机)访问。但有些虚拟机需要互联网连接。为了解决这个问题,我为这些虚拟机提供了两个网络接口:
eth0
连接到我的笔记本电脑所连接的网络(桥接)。它使用 DHCP 获取 IP 地址,因此我可以轻松地在家庭网络和工作网络之间切换,而无需每次都更改静态 IP 地址。(附注:我已使用内置防火墙阻止来自除下文描述的专用网络之外的任何网络的任何传入连接)eth1
连接到专用网络 192.168.1.0/24 并具有静态 IP 地址。此网络使用 VirtualBox 的主机专用适配器,因此我的笔记本电脑和不同的虚拟机可以相互访问。
我的 netplan 配置文件
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: yes
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
routes:
# Route all traffic to the default gateway that is connected to the internet.
# This setup means I still have to update the config whenever I connect to a different network.
# I was unable to find a solution for this yet.
- to: 0.0.0.0/0
via: 192.168.192.1
eth1:
dhcp4: no
dhcp6: no
addresses: [192.168.1.2/24]
gateway4: 192.168.1.1
routes:
# I know this is unnessecary because the network is directly connected
- to: 192.168.1.0/24
via: 192.168.1.1
此设置暂时有效。当我 ping 一下 IP 地址时8.8.8.8
,它似乎将大约一半的请求发送到一个接口,另一半发送到另一个接口,直到一段时间后它似乎意识到只有一个链接可以到达目标地址。请注意,序列号 1、3、5 等没有得到响应。
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=2 ttl=117 time=29.0 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=117 time=18.1 ms
64 bytes from 8.8.8.8: icmp_seq=6 ttl=117 time=13.1 ms
64 bytes from 8.8.8.8: icmp_seq=8 ttl=117 time=13.7 ms
64 bytes from 8.8.8.8: icmp_seq=9 ttl=117 time=13.8 ms
64 bytes from 8.8.8.8: icmp_seq=10 ttl=117 time=12.2 ms
64 bytes from 8.8.8.8: icmp_seq=11 ttl=117 time=11.2 ms
64 bytes from 8.8.8.8: icmp_seq=12 ttl=117 time=13.8 ms
当我使用 WireShark 捕获 eth1 上的流量时,我发现缺少 ICMP 数据包且没有响应(显然)
我尝试过的方法
根据Netplan 的文档,可以将路由指定为 类型unreachable
。因此,如果eth1
静态路由的类型为 ,则所有流量都必须通过eth0
。不幸的是,这不起作用。
routes:
- to: 0.0.0.0/0
type: unreachable
我也尝试过使用命令行手动添加静态路由
sudo ip route add 0.0.0.0/0 via 192.168.192.1 dev eth0
。这将返回消息“RTNETLINK 答案:文件存在”,之后不会添加路由。这个问题不能解决这个问题。
此外,还提出了这个问题不要解决这个问题。
我的问题:
如何将所有流量路由至动态配置的默认网关eth0
?
我也有兴趣听听其他实现相同目标的建议。干杯!
答案1
gateway4: 192.168.1.1
这是到 0.0.0.0/0 的默认路由的别名。删除此行,因为互联网流量不应该从 eth1 接口出去,这应该可以解决您的问题。