如何阻止Multipass管理的Ubuntu 22.04虚拟机访问主机局域网及主机本身,同时保留互联网访问权限
如何阻止Multipass管理的Ubuntu 22.04虚拟机访问主机局域网及主机本身,同时保留互联网访问权限
没问题,我来帮你搞定这个需求!因为你只能通过SSH访问主机,所以所有操作都在主机上完成就行,不用碰虚拟机内部。下面是一步步的操作步骤:
第一步:确认关键网络信息
首先得搞清楚Multipass虚拟机所在的子网,以及主机的局域网子网,这样才能精准设置拦截规则:
- 查看你的Multipass虚拟机IP和状态:
记下虚拟机的IP(比如multipass list192.168.64.2)。 - 查看Multipass网桥的子网信息:
找到类似ip addr show multipass0inet 192.168.64.1/24的行,后面的192.168.64.0/24就是Multipass子网(记为MULTIPASS_SUBNET)。 - 查看主机的局域网子网:
这个命令会自动排除回环地址和Multipass子网,得到你的局域网子网(比如ip addr | grep -E 'inet (?!127.0.0.1|192.168.64)' | awk '{print $2}'192.168.1.0/24,记为LAN_SUBNET)。同时记下你的局域网接口名(比如enp0s3,可以从ip addr的输出里找到)。
第二步:用iptables设置拦截规则
我们通过iptables来限制虚拟机的访问范围,同时保留互联网访问能力:
- 阻止Multipass子网访问局域网:
sudo iptables -A FORWARD -s $MULTIPASS_SUBNET -d $LAN_SUBNET -j DROP - 阻止Multipass虚拟机访问主机本身:
sudo iptables -A INPUT -s $MULTIPASS_SUBNET -j DROP - 确保主机开启IP转发(保证虚拟机能正常访问互联网,Multipass默认可能已经开启,但保险起见检查一下):
为了让这个设置重启后依然生效,执行:sudo sysctl -w net.ipv4.ip_forward=1echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
第三步:保存规则防止重启失效
Ubuntu重启后默认会重置iptables规则,所以我们需要安装工具来保存规则:
sudo apt update && sudo apt install -y iptables-persistent
安装过程中会弹出提示,问你是否保存当前的IPv4和IPv6规则,直接选Yes就好。
可选:用ufw替代iptables(更直观)
如果你习惯用ufw(Ubuntu默认防火墙),也可以用下面的命令配置:
- 允许虚拟机的流量转发到互联网:
sudo ufw allow in on multipass0 out on any - 拒绝虚拟机访问局域网:
sudo ufw deny in on multipass0 out on <你的局域网接口名> to $LAN_SUBNET - 拒绝虚拟机访问主机:
sudo ufw deny in on multipass0 from $MULTIPASS_SUBNET to any - 重启ufw让规则生效:
sudo ufw reload
配置完成后,你可以测试一下:比如在虚拟机里ping局域网内的其他设备,应该ping不通;ping主机的局域网IP也不行,但ping外网地址(比如8.8.8.8)应该能正常连通。
备注:内容来源于stack exchange,提问作者TheGooseLord
相关产品推荐
相关产品推荐

