透明桥接和NAT共存的实现

本文详细介绍了如何在一个网络环境中同时实现透明桥接和NAT功能。透明桥接用于以太网,不修改数据帧,而NAT则用于地址转换。系统结构包括一个透明桥连接路由器的LAN和WAN接口,数据根据IP地址范围决定走透明桥还是NAT。内核实现中,修改了net_rx_action()函数以判断数据包走向,并通过/proc文件系统进行内核与应用层的通信。应用层负责桥设备的建立和配置,以及通告内核透明桥的IP地址范围。
摘要由CSDN通过智能技术生成

1、什么是透明桥

透明桥接主要用于以太网环境中。透明网桥不更改数据帧的内容,也不作为数据帧的源或目的地,它使得由它连接起来的各个网段看起来像是在一条电缆上。若是收到一个帧,而其中的MAC地址不在自己的桥接表里,就会将这个帧扩散到所有的接口,桥接还会扩散所有的广播包,占用网络的有效带宽,造成网络的堵塞。使用生成树协议”(Spanning Tree Protocol)可以很好地避免桥接引起的广播风暴。

但本项目的网关设备只有一个LAN,不存在以上对LAN口的选择,不存在广播风暴。

 

       2、系统结构

透明桥和NAT共存的网络拓扑结构图如下:


功能描述:

透明桥:将路由器的两个接口LANWAN作为一个桥, 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值