Inter-VLAN routing

Inter-VLAN routing

鸽好久的Inter-VLAN routing来了,想当初开发这个功能的时候还是小白一个,四处收集资料,最后使用的firewall将这个功能实现,但是历经这么久,后续也是发现了更好的实现方式,首先说明我的开发平台:Openwrt,Openwrt已经有内置好的配置文件,我们可以通过修改配置文件去实现Inter-VLAN routing的功能,这个也是我觉得推荐的方法。下面就讲一下这两种实现方式。


什么是Inter-VLAN routing?

Inter-VLAN routing,即 VLAN 间路由,是指在企业网络中实现不同 VLAN 之间的通信的过程。VLAN 是虚拟局域网的缩写,一种逻辑上的分割方式,将一个物理局域网分成多个逻辑上的子网。而 VLAN 间路由则是在这些逻辑上的子网之间实现通信。

在使用 VLAN 分割网络时,通常需要在不同 VLAN 之间进行通信,这时就需要使用路由器或三层交换机进行 VLAN 间路由。VLAN 间路由可以实现虚拟的路由器,使不同 VLAN 之间可以进行通信,同时,由于这些 VLAN 是逻辑上分割的,因此可以限制其它 VLAN 的访问,提高网络的安全性。在进行 VLAN 间路由时,需要对不同 VLAN 指派不同的 VLAN ID 和对应的子网 IP 地址,同时配置路由器或三层交换机的 VLAN 间路由表,实现 VLAN 间流量的转发。

一些网络设备,如路由器和三层交换机,通常都支持 Inter-VLAN routing。在进行 VLAN 间路由时,需要注意选择适当的网络设备和配置方法,并合理规划 VLAN 和 IP 地址等资源,以保证网络通信和数据传输的安全性和可靠性。

通俗点将,VLAN是属于二层的,属于一个VLAN的设备需要通信,只需要知道对方的MAC,在二层就可以进行转发,但是如果是属于跨VLAN的,就需要知道对方的逻辑地址,才能进行路由转发。

实现方式1(推荐)

因为我们的产品已经稳定,所以我目前找到了更好的实现方式,但是不能用,所以就写个博文记录下,以后也许会用到,由于我们的开发平台是基于Openwrt的,而Openwrt是可以通过修改配置文件来实现不同的功能配置,而/etc/config/firewall 就是防火墙的配置文件,我先贴一个默认的:

defaults
config defaults
        option syn_flood '0'
        option input 'ACCEPT'
        option output 'ACCEPT'
        option forward 'DROP'
        option disabled '0'

config zone 'lan'
        option name 'lan'
        list network 'vlan1'
        option input 'ACCEPT'
        option output 'ACCEPT'
        option forward 'ACCEPT'
        list device 'br-vlan+'
        list device 'ipsec+'

config zone 'wan'
        option name 'wan'
        list network 'wan'
        list network 'wan6'
        list network 'wan2'
        list network 'wan62'
        option input 'REJECT'
        option output 'ACCEPT'
        option forward 'REJECT'
        option masq '1'
        option mtu_fix '0'

config forwarding
        option src 'lan'
        option dest 'wan'

可以看到上面大致有三个防火墙section类型,分别为zone, forwarding,和defaults,defaults部分声明了不属于特定区域的全局防火墙设置,而特定区域的防火墙设置交给zone 管理,可以看到上面zone分为了两个section去描述,为lan和wan,最后由forwarding的规则使得lan到wan可以有转发规则:

defaults部分声明了不属于特定区域的全局防火墙设置

zone 部分将一个或多个网络接口组合在一起,作为转发、规则和重定向的源或目的

forwarding 控制 zone 之间的转发, 一条forwarding规则只涵盖一个方向。为了允许两个区域之间的双向流量流,需要两个forwarding。

我们这次的实现就需要用到zone和forwarding,回到功能上,我们的router建立VLAN后,都是需要有VLAN接口存在,而Inter-VLAN routing的功能就是,所有Enable Inter-VLAN routing的VLAN可以互相通信,而DIsable的VLAN不允许互相通信,通俗点就像是Enable Inter-VLAN routing的VLAN在一个QQ群里,而Disable Inter-VLAN routing的VLAN在另一个QQ群,且这个群还开启了全员禁言,这个和firewall配置文件中的Zone很相似,所以可以使用zone去实现。

举例说明:

我们现在有VLAN1 - VLAN10,单数开启Inter-VLAN routing, 双数关闭Inter-VLAN routing,那么我们可以在配置文件中添加如下:

config zone 'enable_inter_vlan'         
        list network 'vlan1'  
        list network 'vlan3'  
        list network 'vlan5'  
        list network 'vlan7'   
        list network 'vlan9'          
        option input 'ACCEPT'         
        option output 'ACCEPT'        
        option forward 'ACCEPT'         
                                        
config zone 'disable_inter_vlan'      
        list network 'vlan2'          
        list network 'vlan4'          
        list network 'vlan6'                    
        list network 'vlan8'                    
        list network 'vlan10'          
        option input 'ACCEPT'         
        option output 'ACCEPT'              
        option forward 'REJECT' 

这样我们通过/etc/init.d/firewall restart 的命令,就可以让Openwrt自动生成对应的规则。

实现方式2(不推荐)

实际上第二种方法就是手搓firewall规则,根据配置自己去手搓对应的规则出来,远远不及第一种实现方式可靠稳定,我就贴个脚本,感兴趣的可以自己看看:

#!/bin/sh
. /lib/functions.sh

#clean all rule on inter_vlan_routing_rule
iptables -F inter_vlan_routing_rule

#stop all bridge forward
handler_intervlanrouting() {
    config_get intervlanrouting "$1" intervlanrouting
    if [ $intervlanrouting = "1" ];then
        config_get id "$1" id
        iptables -A inter_vlan_routing_rule -i br-vlan$id -o br-vlan+ -j ACCEPT
    else
        config_get id "$1" id
        iptables -I inter_vlan_routing_rule -i br-vlan+ -o br-vlan$id -j REJECT
        iptables -I inter_vlan_routing_rule -i br-vlan$id -o br-vlan+ -j REJECT
    fi
}

handler_multicast_vlanid() {
    config_get id "$1" id
    iptables -I inter_vlan_routing_rule -i br-vlan$id -o br-vlan$id -j ACCEPT
}

config_load vlan
config_foreach handler_intervlanrouting vlanid

脚本中的添加规则的顺序是不能变的,切记,firewall匹配规则是从上到下匹配,所以ACCEPT的规则要在前面,DROP和REJECT的要在后面。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值