跳转到目录 点这里
------确认内核己安装tun模块------------------
tun.ko
depmod
modprobe tun
lsmod |grep tun
------安装 tunctl 命令---------------
pacman -S iproute2 base-devel
yaourt -S patch
yay -S tunctl
yaourt -S bridge-utils
------安装 ifconfig---------------
pacman -Fy ifconfig
pacman -S core/net-tools
#uml-utilities
------------------
我是这样安装的 win7 { VMware Manjaro ( qemu Manjaro )}
Win7 真实网卡(IP xxx.xxx.xxx.xxx),VMnet8-nat (192.168.100.100,网关:192.168.100.1)
VMware Manjaro 两张网卡 ens32 (不分配IP,与网桥相连,用于接通tap0), ens35(192.168.100.101,网关:192.168.100.1)
qemu Manjaro ens3 (192.168.99.99 网关:192.168.99.100) ens4 (自动分配)
---------------------------------
效果:
物理机(Win7) ping 192.168.100.101 OK
物理机(Win7) ssh通过访问 168.100.101:222 映射到 qemu Manjaro192.168.99.99:22 OK
VMware Manjaro ping 192.168.99.99 OK
VMware Manjaro ping 8192.168.100.100 OK
VMware Manjaro ping 8.8.8.8 OK
qemu Manjaro ping 192.168.99.100 OK
qemu Manjaro ping 8.8.8.8 OK
qemu Manjaro ping 192.168.100.101 OK
qemu Manjaro ping 192.168.100.100 不OK
------------------------------------------
首先要准备两个脚本:qemu-ifup-nat 、qemu-ifdown-nat
脚本用来(启动前,或关闭后)设置 虚拟网卡,网桥,端口转发等内容。
脚本中$1 是参数,值一般是tap0,是启动命令里传过去的。
脚本1:
vim /etc/qemu-ifup-nat
#! /bin/sh brctl addbr br0 brctl stp br0 off brctl setfd br0 1 brctl sethello br0 1 #向网桥添加宿主机网卡 ifconfig ens32 down brctl addif br0 ens32 ifconfig br0 0.0.0.0 promisc up ifconfig ens32 0.0.0.0 promisc up ifconfig br0 192.168.99.9 netmask 255.255.255.0 ifconfig ens32 up #添加网关 #route add -net 0.0.0.0 netmask 0.0.0.0 gw 192.168.99.1 #route add -net 0.0.0.0 netmask 0.0.0.0 gw 192.168.100.1 route add -net 0.0.0.0 netmask 0.0.0.0 gw 192.168.99.100 #添加qemu虚拟网卡 tunctl -t $1 -u root brctl addif br0 $1 ifconfig $1 0.0.0.0 promisc up ifconfig $1 192.168.99.100 netmask 255.255.255.0 #将所有来自ens35网卡的数据包做NAT转发(数据从网) iptables -t nat -A POSTROUTING -s 192.168.99.0/255.255.255.0 -o ens35 -j MASQUERADE #将所有找本机222端口的请求转到目的为192.168.99.99:22 iptables -t nat -A PREROUTING -p tcp --dport 222 -j DNAT --to-destination 192.168.99.99:22 #将所有192.168.99.99:22转出来的请求,以,192.168.100.101的名义发出去 iptables -t nat -A POSTROUTING -p tcp -d 192.168.99.99 --dport 22 -j SNAT --to-source 192.168.100.101 route del -net default netmask 0.0.0.0 dev br0 sudo systemctl stop iptables.service sudo systemctl start iptables.service
脚本2:
vim /etc/qemu-ifdown-nat
#! /bin/sh brctl delif br0 ens32 brctl delif br0 $1 sudo systemctl stop iptables.service sudo systemctl start iptables.service
启动命令改为
qemu -net nic,macaddr=52:54:00:12:34:22,model=e1000 -net tap,ifname=tap0,script=/etc/qemu-ifup-nat,downscript=/etc/qemu-ifdown-nat -net nic,macaddr=52:54:00:12:34:23,model=pcnet -m 5120 -boot c -hda /gdb/gdb.qcow2
在(VMware Manjaro)中查看路由表:
[hun-hh ~]# route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default _gateway 0.0.0.0 UG 100 0 0 ens35 default _gateway 0.0.0.0 UG 102 0 0 ens36 172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0 192.168.43.0 0.0.0.0 255.255.255.0 U 102 0 0 ens36 192.168.99.0 0.0.0.0 255.255.255.0 U 0 0 0 br0 192.168.99.0 0.0.0.0 255.255.255.0 U 0 0 0 tap0 192.168.100.0 0.0.0.0 255.255.255.0 U 100 0 0 ens35
确认有这条:default最前面就表示,数据最后是往ens35出去的
default _gateway 0.0.0.0 UG 100 0 0 ens35
确认有这两条: 相当于说如果有数据目标是 192.168.99.0 这个网段的,就找 br0 tap0 (这个Manjaro自动会加上,就不用自己加了)
192.168.99.0 0.0.0.0 255.255.255.0 U 0 0 0 br0 192.168.99.0 0.0.0.0 255.255.255.0 U 0 0 0 tap0
如果是在开机时写脚本去创建 br0,那么 Manjaro 会自动加一条: 。可手动删除,并重启iptable。
default _gateway 0.0.0.0 UG 101 0 0 br0
route del -net default netmask 0.0.0.0 dev br0 sudo systemctl stop iptables.service sudo systemctl start iptables.service
在(VMware Manjaro)中查看路由表:
[cai-haha ~]# route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default _gateway 0.0.0.0 UG 100 0 0 ens3 192.168.99.0 0.0.0.0 255.255.255.0 U 100 0 0 ens3
网桥说明:
#[宿主机-网卡 即ens32 (不分配IP)]<-->[宿主机-qemu虚拟网桥 即br0 (192.168.99.9)]<-->[宿主机-qemu虚拟网卡 即tap0(192.168.99.100)]<-->[qemu虚拟机-网(192.168.99.99)]
其它说明 :
qemu 上的 用户模式未试成功(暂时没用那个)
我现在是在windows上装VMware ,在VMware 里装 Manjaro ,在 Manjaro里装qemu ,在qemu里再装一个Manjaro。
装 Manjaro 是因为要调试内核 ,而Manjaro是一个打包好的系统,方便。
不在机器上直接装 Manjaro,是因为 装在 VMware 方便备份。
Manjaro里装qemu 是因为要调试内核,在qemu 里再装 Manjaro 是因为想看看 内核调试, gdb 在用户空间调试,两个视角切换
-------------
其它:
安装 (qemu Manjaro)
qemu -m 5120 -boot d -hda /gdb/gdb.qcow2 -cdrom /gdb/manjaro-kde-20.1.2-201019-linux58.iso
启动 (qemu Manjaro)
qemu -net nic,macaddr=52:54:00:12:34:22,model=e1000 -net tap,ifname=tap0,script=no,downscript=no -net nic,macaddr=52:54:00:12:34:23,model=pcnet -m 5120 -boot c -hda /gdb/gdb.qcow2
-----其它命令
brctl show br0 # 查看虚拟网桥列表
brctl showstp br0 # 查看br0的各接口信息