zoukankan      html  css  js  c++  java
  • 简单搭建内核调试环境--N 附录[qemu与主机通信]

    跳转到目录 点这里 

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

  • 相关阅读:
    K-means聚类
    支持向量机_原理
    回归+内插
    ftp 服务器
    cmd 切换python版本
    cookie
    类加载器
    GC
    jvm结构
    mysql文件
  • 原文地址:https://www.cnblogs.com/heling/p/14159137.html
Copyright © 2011-2022 走看看