我在 AMD64 笔记本电脑上运行 Gentoo Linux,并且在 KVM 上设置主机网络时遇到了极大的困难。我已经拥有 KVM、libvirtd、virt-manager、虚拟化工作所需的内核模块,并且我已经根据以下内容使用新的配置选项重建了内核本指南在这里,而且我似乎仍然无法让主机网络运行。
我可以使用 virt-manager 创建虚拟机,但无法选择网络接口来连接我的虚拟机,在 virt-manager 高级选项下的最终对话框中,下拉框中的所有选项均被禁用,除了“无网络”和“指定共享设备名称”。我无法使用桥接网络,因为我的互联网出口是通过 Wi-Fi NIC 进行的。
我仍然无法在 KVM 上运行网络。我不想使用 Oracle VM VirtualBox,因为我过去在使用它时遇到了很多问题。我错过了什么?
答案1
我使用一个简单的脚本在专用网桥(没有互联网出口)中设置我的 qemu 设备并伪装主机上的流量:
/usr/sbin/brctl addbr qemu1
NET=10.116.64 # any private address you like
GW=1
BASE=0
MASK=24
ip addr add $NET.$GW/$MASK dev qemu1
ip link set qemu1 up
if iptables -t nat -L POSTROUTING -n | grep ^MASQUERADE | awk '{print $4}' | cut -d/ -f1 | grep "$NET.$BASE" >/dev/null
then
echo "IP masquerading already set up"
else
echo "Setting up IP masquerading"
iptables -t nat -A POSTROUTING -s "$NET.$BASE"/"$MASK" \! -d "$NET.$BASE"/"$MASK" -j MASQUERADE
fi
sysctl net.ipv4.ip_forward=1
exit 0
为了对每台机器进行设置,我使用另一个简单的脚本使用 USER 作为启动虚拟机的用户
#!/bin/sh
BRCTL=/usr/sbin/brctl
regif=$($BRCTL show $2|awk '/^\t/ { print $1; }' |grep "$1")
if [ x"$3" = "xstop" ]
then if [ x"$regif" != "x" ]
then
ip link set $1 down
/usr/sbin/openvpn --rmtun --dev $1
fi
elif [ x"$regif" = "x" ]
then
/usr/sbin/openvpn --mktun --dev $1 --user USER
ip link set $1 promisc on
ip link set $1 up
$BRCTL addif $2 $1
elif [ x"$3" = "xrestart" ]
then
$0 $1 $2 stop # recursive call
$0 $1 $2 # recursive call
fi
exit 0
称为asqemu-newif NAME_FOR_THE_TAP_DEVICE qemu1
为每台机器设置一个tap 设备。