++

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
跳转到目录 点这里 

------确认内核己安装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的各接口信息

posted on 2020-12-22 05:14  自制力缺失症患者  阅读(321)  评论(0编辑  收藏  举报