1、什么是透明桥
透明桥接主要用于以太网环境中。透明网桥不更改数据帧的内容,也不作为数据帧的源或目的地,它使得由它连接起来的各个网段看起来像是在一条电缆上。若是收到一个帧,而其中的MAC地址不在自己的桥接表里,就会将这个帧扩散到所有的接口,桥接还会扩散所有的广播包,占用网络的有效带宽,造成网络的堵塞。使用“生成树协议”(Spanning Tree Protocol)可以很好地避免桥接引起的广播风暴。
但本项目的网关设备只有一个LAN,不存在以上对LAN口的选择,不存在广播风暴。
2、系统结构
透明桥和NAT共存的网络拓扑结构图如下:
功能描述:
透明桥:将路由器的两个接口LAN和WAN作为一个桥, 从LAN端进来数据直接转发到WAN端, 不作任何修改。 同理, 从WAN端进来的数据直接转发到LAN端。
NAT网关: 所有从WAN出去的数据,将作NAT转换。
3、程序实现架构
该上网方式的实现分为应用层和内核部分的实现, 应用层实现桥的建立和通告内核某段IP地址需要作透明桥,内核根据应用层通过的IP地址范围判断哪些IP需要走透明桥,那些需要做NAT转换。
4、内核实现方式
(1) 配置编译内核时,需要将802.1d Ethernet Bridging 编译到内核中,
a) Make menuconfig
b) 选择 Networking options
c) 选择 802.1d Ethernet Bridging
(2) 用/proc文件系统,建立一个内核和应用层通信的接口,以方便应用层将透明桥的IP地址范围通告给内核
在系统中需要定义几个全局变量,记录透明桥的IP地址范围
unsigned char trans_bridge_enable = 0; //透明桥使能变量
unsigned int trans_bridge_gateway = 0x00; //作NAT时的网关地址
unsigned int trans_bridge_start = 0x00; //透明桥的起始IP地址
unsigned int trans_bridge_end = 0x00; //透明桥的结束IP地址
unsigned int trans_bridge_wanip = 0x00; //NAT网关W