linux下桥接组网

概述


        最近在使用UML调试内核,在我的ubuntu虚拟机里面将待调试的内核作为一个单独的UML进程跑起来然后使用gdb可以对其作各种调试(但无法调试硬件相关代码),这种感觉很爽,但唯一遗憾的是在启动的UML进程内无法连接网络,这样我想在我的UML里面通过apt-get安装需要的软件包就显得无能为力了,为了克服这个问题,最近研究了linux桥接组网的方式,尝试了可以成功,这里将组网的过程忠实地记录下来,以给有需要的用户以指导。


前提


        在我的尝试中,虚拟机安装的是ubuntu,使用桥接(bridged)方式与宿主机(物理机)连接网络。

步骤


        1. 安装bridge-utils和tunctl
            非常简单,通过apt-get install  ****安装即可;

        2. 查看tun模块是否被加载
            lsmod | grep tun
            如果没有,则需手动加载tun模块
            modprobe tun

        3. 此时可以开始搭建桥接网络了,但首先必须创建一个虚拟网卡(名称tap0),所有者为$USERNAME,主要是给UML使用;
            tunctl -t tap0 -u $USERNAME

        4. 创建一个名为br0的网桥
            brctl addbr br0

        5. 使ext0(虚拟机的默认网卡,名称根据系统情况而定)进入promiscuous模式
            ifconfig eth0 0.0.0.0 promisc

        6. 将eth0和tap0加入br0
            brctl addif br0 eth0
            brctl addif br0 tap0

        7. 设定br0的IP地址,网上说最好使用eth0原来的IP,我看倒未必(我的ubuntu系统上配置的eth0是dhcp方式,因此br0也配置的是dhcp方式获取ip地址);
           dhclient br0 

        8. 删除旧的网关,设定新网关(如果上面是dhcp方式获取br0地址,这一步是没必要的);
            route del default
            route add default gw 192.168.1.1

        9. 配置已经完成,可在ubuntu上访问外部网络,可测试验证;

        10. 使用如下命令启动UML;
               ./kernel/linux2.6.36/linux eth0=tuntap,tap0 ubda=disk/root_fsmem=256m
               相比之前,多了eth0=tuntap,tap0,其作用是将ubuntu上创建的虚拟网络设备tap0作为UML的eth0设备,

        11. 启动UML后可观察的现象
               ifconfig可看到UML下多了一个网络设备eth0,且ip地址已经分配,然后可以连通外面的网络,至此,大功告成。



你可能感兴趣的:(linux下桥接组网)