KVM 创建虚拟机,使用内网IP时,让虚拟机通过宿主机访问外网
宿主机操作
1. 开启 IP 转发
sysctl -w net.ipv4.ip_forward=1
永久生效:
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
2. 配置 NAT (SNAT/MASQUERADE)
假设公网出口就是 br0
:
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o br0 -j MASQUERADE
检查是否生效:
iptables -t nat -vnL POSTROUTING
如果用 nftables:
nft add rule ip nat POSTROUTING oif "br0" ip saddr 192.168.100.0/24 masquerade
3. 保存规则(防止重启丢失)
Debian/Ubuntu:
apt install -y iptables-persistent
netfilter-persistent save
RHEL/CentOS/AlmaLinux:
service iptables save
虚拟机操作
1. 配置网卡
确保网卡是 /24
掩码,不是 /32
:
ip addr add 192.168.100.2/24 dev eth0
ip route add default via 192.168.100.1
2. 配置 DNS
写入 /etc/resolv.conf
:
nameserver 8.8.8.8
nameserver 114.114.114.114
验证
在虚拟机内依次测试:
- 通宿主机
ping 192.168.100.1
- 通公网 IP
ping 114.114.114.114
- 通域名
ping archive.ubuntu.com
- 更新软件源
apt update
这样虚拟机就能正常走宿主机公网访问外网了。
评论区