armLinux网桥

  网桥也叫桥接器,是连接两个局域网的一种存储/转发设备,它能将一个大的LAN分割为多个网段,或将两个以上的LAN互联为一个逻辑LAN,使LAN上的所有用户都可访问服务器。
扩展局域网最常见的方法是使用网桥。最简单的网桥有两个端口,复杂些的网桥可以有更多的端口。网桥的每个端口与一个网段相连。咱也不懂这概念,只是知道一点点怎么搭建网桥的方法,记录一下。
 
1. 准备工作:
  内核支持网桥,需要配置和修改如下参数,内核版本是Linux-3.0.8
  a. 源码修订:
    net/wireless/core.c
    

    net/wireless/util.c

    

    net/bridge/br_if.c

    

       

      net/bridge/br_notify.c

     

       

      net/bridge/br_stp_if.c

      

    b. 打开内核选项:

      我这里选的是M,编译成ko,后面手动加载到系统。

      

                 

   c. 编译内核:

      先整体编译,再进入内核目录,编译驱动。

      make 

      make ARCH=arm CROSS_COMPILE=arm-linux- modules 

      编译成功会生成如下几个驱动文件,这是我们需要的: 

      cp ./net/bridge/bridge.ko ../modules/ -rf
      cp ./net/llc/llc.ko ../modules/ -rf
      cp ./net/802/stp.ko ../modules/ -rf
      cp ./net/mac80211/mac80211.ko ../modules/ -rf
      cp ./net/wireless/cfg80211.ko ../modules/ -rf

      注意,mac80211和cfg80211选项我也是在内核里面配置成<M>,单独编译出来,因为后续的WiFi模组驱动的加载有些需要用到,所以也编译成单独的ko。

    到此,内核的修改和配置问题已经完成。

2. 需要用到的命令brctl

  可以在busybox里面配置:

  

3.  正式配置网桥:

  用到的硬件平台和网卡设备:

  一个arm板,两个WiFi模组。

  a. 加载WiFi模组的驱动,将两个WiFi都up起来

    /sbin/insmod /app/lib/modules/cfg80211.ko

      /sbin/insmod /app/lib/modules/mac80211.ko

    记得这两个依赖的mac和cfg也要加载。

    ifconfig wlan0 up

    ifconfig wlan1 up 

    记住这两个WiFi不要给IP,wlan0作为AP,wlan1作为STA。我的理解是两个设备都绑定到br0,共用br0的设备,至于网络的网段,网络的ip分配,都是AP端连接的路由决定的。这两个网卡都只作为br0的绑定,

整个板配置完成之后,相当于只有br0一个网卡,也只有一个IP。

  b. 新建网桥br0,并将两个网卡加入到网桥。

    /sbin/insmod /app/lib/modules/llc.ko

    /sbin/insmod /app/lib/modules/stp.ko

    /sbin/insmod /app/lib/modules/bridge.ko

    先加载内核编译的驱动,以支持网桥功能。

    /sbin/brctl addbr br0
    ifconfig br0 172.16.11.8

    新建一个网桥br0,给网桥一个固定的IP。当然这个网段要和你连接的路由器在同一网段。

  c. 两个网卡,一个作为STA,连接路由器,另外一个作为AP,桥接到网络之后,对外发射新的AP信号。

    /sbin/brctl addif br0 wlan0    #wlan0 加入网桥br0

    /app/hostapd  -B  hostapd.conf  #wlan0作为AP,开启AP,这里不需要起udhcpd,成功建立之后,ip的分配由路由器决定。

    此处的hostapd.conf参考:

interface=wlan0
driver=nl80211
ctrl_interface=/var/run/hostapd
ssid=Bridge
#country_code=US
ieee80211n=1
hw_mode=a
channel=36
bridge=br0
#require_ht=1
#ht_capab=[HT20-][SHORT-GI-20][SHORT-GI-20] 
auth_algs=1
#wpa=3
#wpa_pairwise=TKIP CCMP
#wpa_passphrase=12345678

    /sbin/brctl addif br0 wlan1    #wlan1加入到网桥

    /app/wpa_supplicant -Dnl80211 -iwlan1 -c /app/wpa-wlan.conf -b br0 &   #wlan1开启STA模式,不需要起udhcpc,此时的ip由br0的静态ip来决定。

    此处的wpa-wlan.conf参考:

ctrl_interface=/var/run/wpa_supplicant
update_config=1
ap_scan=1
fast_reauth=1

network={
ssid="aaa"
psk="12345678"
}

 看结果:

     两个网卡,加入到了br0

     

     两个网卡设备,整机只有一个br0的IP地址。

    

到此,wlan1连接到路由器之后,wlan0发射的AP可以直接连接,自动分配到IP。网桥的功能实现。

  

    

    

      

    

    

    

    

  

      

    

 

    

原文地址:https://www.cnblogs.com/TiddlerYu/p/14852112.html