femu使用虚拟网卡拥有独立IP

总结

本文讲述了如何在femu中使用虚拟网卡的方式让其拥有独立的IP地址,方法是实验室学弟的,我记录一下

1. 安装

femu是在QEMU上进行使用的,可以更加精确地模拟一个NVMe的SSD盘,所以整个femu运行起来其实很像在虚拟机上对虚拟出来的SSD进行测试。所以还是需要一个虚拟的操作系统的

安装的话,直接在Github上读它们自己的Readme就可以,这里是femu网址,跟着上面的命令来就可以。虚拟机的镜像文件可以直接用他们自己做好的

2. 网络

在run-blackbox.sh中,可以看到网络连接是使用本地NET连接的,将主机的8080端口与femu虚拟机的22端口做绑定,这样femu的网络流量可以走22端口转发到主机的8080端口,再有8080端口做流量转发

使用端口转发,可以使用

1
ssh -p 8080  femu@localhost

进行ssh远程登录femu,femu也可以连接外网。femu本身的IP地址并没有太多的功能。

如果要使用IP地址进行访问的话,需要使用网络桥接功能

可以使用

1
netstat -aptn

来观察端口的状态

3. qemu使用桥接

  1. 主机端运行以下命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/bin/sh

sudo apt-get install bridge-utils
sudo apt-get install uml-utilities

sudo ifconfig "$1" down # 关闭网卡
sudo brctl addbr br0 # 添加网桥br0
sudo brctl addif br0 "$1" # 将$1网口的配置复制一份到br0
sudo brctl stp br0 off # 关闭网桥
sudo brctl setfd br0 1 # 设置网桥的fd(标识符)
sudo brctl sethello br0 1 # 设置hello协议的时延
sudo ifconfig br0 0.0.0.0 promisc up # 开启网桥br0
sudo ifconfig "$1" 0.0.0.0 promisc up # 开启$1网卡
sudo dhclient br0 # 向路由器获取IP地址
sudo brctl show br0 # 打印网桥信息
sudo brctl showstp br0 # 打印网桥stp信息
sudo tunctl -t tap0 -u root # 新建一个tap0网卡
sudo brctl addif br0 tap0 # 将tap0网卡加入到br0上
sudo ifconfig tap0 0.0.0.0 promisc up # 开启tap0网卡
brctl showstp br0 # 打印网桥stp信息
sudo systemctl restart zerotier-one.service # 重启zerotier
# 如果zerotier连接不上再去服务器那边重启ssh服务
  1. 在run-blackbox.sh中修改net的配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
sudo x86_64-softmmu/qemu-system-x86_64 \
-name "FEMU-ZNSSD-VM" \
-enable-kvm \
-cpu host \
-smp 8 \
-m 32G \
-device virtio-scsi-pci,id=scsi0 \
-device scsi-hd,drive=hd0 \
-drive file=$OSIMGF,if=none,aio=native,cache=none,format=qcow2,id=hd0 \
-device femu,devsz_mb=4096,femu_mode=3 \
-net tap,ifname=tap0,script=no,downscript=no \ # 新添加,告诉femu使用桥接模式,网卡选择tap0
-net nic,macaddr=`dd if=/dev/urandom count=1 2>/dev/null | md5sum | sed 's/^\(.\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\14:\2:\3:\4:\5:\6/g'` \ # 使用随机的mac地址
-nographic \
-qmp unix:./qmp-sock,server,nowait 2>&1 | tee log

在主机端新增一个网桥br0,以及新增一个虚拟网卡tap0,原先的网卡还是用于与主机通信,tap0虚拟网卡用于与femu进行通信,femu启动时获取的ip地址与主机在同一个网段下,相当于将femu看成主机的子设备,并且在同一局域网的设备时可以通过ssh远程访问的