欧拉操作系统里需要 dhclient xx网卡名去获取一下自动分配,不然默认没有IP。
这篇也可以参考:https://tomwei7.com/2021/10/09/qemu-network-config/

QEMU 提供 4 种网络通信方法,它们分别是:

①User mode stack:用户协议栈方式,这种方式的大概原理是在QEMU进程中实现一个协议栈,这个协议栈可以被视为一个主机与虚拟机之间的NAT服务器,它负责将QEMU所模拟的系统网络请求转发到外部网卡上面,从而实现网络通信。但是不能将外面的请求转发到虚拟机内部,并且虚拟机VLAN中的每个接口必须放在10.0.2.0子网中。

NAT原理
hostfwd=tcp::2222-:22 表示将主机的2222端口转发到虚拟机的22端口(通常用于 SSH)
NAT隐藏了虚拟机的IP地址,将其映射到宿主机的IP地址上。如果我的机器AB在局域网内,C是A的虚拟机,希望机器B能够访问虚拟机C。局域网内的其他机器(比如B)通常不能直接访问虚拟机C,因为NAT隐藏了虚拟机的IP地址,将其映射到宿主机的IP地址上。

那么需要在宿主机A上设置端口转发规则,将特定的端口从宿主机转发到虚拟机C的相应端口上。但是这个端口没法发送就是因为对外网不可见的,NAT本来的设置吧。(这个目前还没看见方法,除了NAT本身以外可能和qemu虚拟机转发规则有关)但是这种方式还是可以用以前的脚本然后ssh -p 2222 root@localhost成功。

看了qemu官网说的NAT的事情,https://wiki.qemu.org/Documentation/Networking/NAT
有一个人照着做成了:https://www.cnblogs.com/wswang/p/15507812.html
安装了dnsmasq,但是有53端口冲突:https://dev59.com/unix/Z0HGoIgBc1ULPQZFNZck
但是有一个警告和报错,而且虚拟机看不见网卡tap0:
这种方式其实也是建立了网桥有一个bridge有一个tap,不过网桥的另一段不是物理机的网卡。而且桥接的这个网络和物理机网络竟然不是同一个,应该和dnsmasq有关。


②TAP/bridge:最重要的一种通信方式,我们想要实现 QEMU 虚拟机和外部通信就需要使用这种方式。
桥接原理:【https://www.cnblogs.com/pipci/p/12906804.html】【https://blog.csdn.net/qq_42248536/article/details/118927515】

按照这个链接用命令行搭建:
修改脚本的方式搭建
当将网卡与网桥桥接时,网卡的IP地址将转移到网桥接口上,因为网桥是为了让多个网络接口在同一层(第二层)互通。

执行ifconfig <网卡名称> 0.0.0.0 promisc up 时,实际上是清除了网卡上的IP地址并使其进入混杂模式(promiscuous mode),这样网卡就不会过滤它接收到的任何数据包,而是将所有数据包都发送给上层网络协议栈处理。

启动QEMU虚拟机后,虚拟机中的网卡不是直接显示为tap0,而是会通过虚拟化层映射为虚拟机内部的网卡接口。QEMU使用TAP设备来为虚拟机提供网络连接,但虚拟机中的网卡名称通常不会是tap0,而是类似于eth0或ens3等。

虚拟机的网卡没有获取到IP地址:dhclient ens3后获取的不是一个网段的。在物理机使用dnsmasq配置DHCP服务器:

sudo apt-get install dnsmasq
# 编辑/etc/dnsmasq.conf文件,添加以下配置:
interface=br0
bind-interfaces
dhcp-range=192.168.1.50,192.168.1.150,12h
# 重启dnsmasq服务:
sudo systemctl restart dnsmasq
# 重启虚拟机

虽然物理机和虚拟机可以ping通,但是虚拟机无法链接外网【https://blog.csdn.net/Mculover666/article/details/105664454】【https://blog.csdn.net/faxiang1230/article/details/111238298】:
确保宿主机启用了IP转发。可以通过以下命令检查和启用(输出为1):sysctl net.ipv4.ip_forwardsudo sysctl -w net.ipv4.ip_forward=1

在宿主机上设置NAT,使虚拟机的流量可以访问外网。假设宿主机的外网接口是eno8303:sudo iptables -t nat -A POSTROUTING -o eno8303 -j MASQUERADE

经过②后按照官网脚本启动可以连外网了。·

vscode 服务器连接:将AllowTcpForwarding 前的注释去掉,改为yes

Failed to set up socket for dynamic port forward to remote port:
vim /etc/ssh/sshd_config
AllowTcpForwarding yes

文章作者: 易百分
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 易百分 !
  目录