如何将Ubuntu 22主机配置为私有子网中虚拟机访客的网关以提供互联网访问
如何将Ubuntu 22主机配置为私有子网中虚拟机访客的网关以提供互联网访问
我来帮你一步步搞定这个配置,你说得没错,确实需要把Ubuntu主机当成网关来用,让访客VM通过它访问互联网。下面是具体的操作步骤:
1. 启用Ubuntu主机的IP转发功能
首先得让主机具备转发数据包的能力,这是网关的核心功能:
- 临时启用(重启后失效):
sudo sysctl -w net.ipv4.ip_forward=1 - 永久启用(重启后依然生效):
编辑/etc/sysctl.conf文件,找到net.ipv4.ip_forward=1这一行,去掉前面的注释符号(#),然后执行命令让配置生效:sudo sysctl -p
2. 配置VirtualBox的虚拟网络
你需要给VM设置一个和主机物理网卡隔离的私有子网,推荐使用Host-Only Adapter模式:
- 打开VirtualBox,进入「文件」→「工具」→「网络管理器」
- 切换到「Host-Only Networks」标签,点击加号新建一个虚拟网卡(默认命名为
vboxnet0) - 配置这个虚拟网卡的IP地址,比如设置为
192.168.99.1/24(这个地址就是VM后续要使用的网关地址),注意不要和主机公网子网的IP段冲突 - 可以关闭该网卡的DHCP服务器(如果打算手动给VM设置静态IP,或者自己在主机上搭建DHCP服务)
3. 配置虚拟机访客的网络
以Ubuntu系统的VM为例,给它设置静态IP:
- 编辑VM的网络配置文件(路径一般为
/etc/netplan/00-installer-config.yaml,不同系统可能略有差异),内容如下:network: ethernets: enp0s3: # 替换成你的VM网卡名称,可通过`ip addr`命令查看 addresses: [192.168.99.10/24] gateway4: 192.168.99.1 nameservers: addresses: [8.8.8.8, 1.1.1.1] version: 2 - 应用配置让设置生效:
sudo netplan apply
如果想让VM自动获取IP,可以在主机上安装 isc-dhcp-server,配置它给vboxnet0所在的子网分配IP、网关和DNS,这样VM就能自动获取网络参数了。
4. 设置NAT规则让VM流量访问互联网
需要把VM私有子网的流量通过主机的公网接口转发出去,用iptables设置地址转换:
- 先通过
ip addr命令找到主机的公网接口名称(比如ens3或eth0) - 添加NAT转换规则:
sudo iptables -t nat -A POSTROUTING -s 192.168.99.0/24 -o ens3 -j MASQUERADE - 保存iptables规则,确保主机重启后不失效:
sudo apt install iptables-persistent sudo netfilter-persistent save
5. 配置防火墙允许转发流量
Ubuntu 22默认使用ufw防火墙,需要调整规则允许IP转发:
- 编辑
/etc/ufw/sysctl.conf文件,确保net.ipv4.ip_forward=1已启用 - 修改ufw的默认转发策略:
sudo ufw default allow forward - 重启ufw让配置生效:
sudo ufw reload
完成以上步骤后,你可以在VM里执行 ping 8.8.8.8 测试互联网连通性,正常情况下应该能收到响应。
备注:内容来源于stack exchange,提问作者Marek Dusek
相关产品推荐
相关产品推荐

