GRE 层3+层2 两种VPN+原理+实现 一文全介绍

目录

简介

GRE头格式

GRE L3

配置页面

Linux实现

GRE L2

配置界面

组网拓扑

Linux实现


简介

GRE(Generic Routing Encapsulation):即通用路由封装协议,一种隧道协议。

作用:

        封装某些网络层协议(如IPX、ATM、IPv6、AppleTalk等)报文,使这些报文能在另一个网络层协议中传输。

优点:

        可通过IPv4连通多种异种网络(IPX、AppleTalk),有效利用现有网络,降低成本。

        扩展网络跳数,支持灵活组网。 (如RIP最大跳数限制为16)

        可封装组播数据,并和IPSec结合,保证语音、视频等组播业务安全。 (GRE over IPSec:先GRE封装,再IPSec加密)

        可封装MPLS LDP,建立LDP LSP,实现MPLS骨干网互通。

        可连接非连续子网,实现企业总部和分支间安全连接。

产生原因:

        骨干网与非骨干网使用协议不同,导致非骨干网之间无法通过骨干网传输报文。通过GRE封装实现解决该问题。

GRE头格式

C         校验和位。表示是否GRE头包含Checksum字段。两端无须配置相同。

K         关键字位。 表示是否GRE头包含Key字段。两端配置必须相同。

Recursion        表示该GRE报文封装层数。若封装层数大于3,则丢弃该报文。防止报文无限封装。

Flags        预留字段。 必须为0。

Version     版本字段。 必须为0。

Protocol Type     乘客协议类型。 IPv4为0800,Ethernet为0x6558。

Checksum         GRE头及负载的校验和字段。

Key         关键字字段。隧道接收端用于对报文验证。

GRE隧道传输IPX报文格式:

        Ethernet头 + IP头 + GRE头 + IPX报文

GRE VPN分为:

        GRE L2:即乘客协议是链路层协议。

        GRE L3:即乘客协议是网络层协议。(默认GRE是GRE L3)

GRE L3

需要两端均配置GRE VPN,所以建议配置静态WAN IP。

配置页面

将WAN 配置为GRE VPN L3模式。

配置后,下挂PC访问192.168.5.152,在路由器上WAN口抓包如下:

外层IP对:

        源IP:172.16.0.39

                本地路由器WAN IP

        目的IP:10.2.2.2

                对端路由器WAN IP,即配置页面的Destination IP

内层IP对:

        源IP:192.168.151.1

                本地路由器生成的gre接口IP,即配置页面的Tunnel IP Address

                ifconfig gre1显示(192.168.151.1)

        目的IP:192.168.5.152

                本地路由器下挂PC想要访问的IP

注意配置页面有个Tunnel mode的NAT support功能

        如果enable:内层源IP使用gre1 IP,即192.168.151.1。

        如果disable:内层源IP使用下挂PC真实IP。

配置完毕后,生成隧道接口gre1

        ip link show gre1

                22: gre1@NONE: mtu 1476 qdisc noqueue

                link/gre 172.16.0.39 peer 10.2.2.2

        10.2.2.2:即Destination IP,对端WAN IP

        172.16.0.39:即本端WAN IP

还需gre1相关路由

        # ip route show table VpnPdn

        default dev gre1 scope link (下挂PC报文将经过gre1接口,进行GRE封装)

Linux实现

添加GRE L3 tunnel命令:

        #grename=gre1

        ip tunnel add $grename mode gre remote $remote_wan_ip local $local_wan_ipaddr ttl 2550

        ip link set $grename up

        ip addr add ${gre_tunnel_ip}/${gre_tunnel_ip_mask} dev $grename

        ip route flush cache

        主要还需添加对应路由表

        若支持Tunnel NAT

                iptables -t nat -A vpn_nat -o gre1 -j MASQUERADE

GRE L2

即Ethernet over GRE

可学到隧道对端设备的ARP

GRE L2除了封装以太网帧,还可以封装PPP,如PPTP数据报文。

配置界面

配置后,下挂设备访问1GRE L2抓包如下:

        可知gre内部封装的是以太网帧。

最后生成接口gretap1

        #ip link show gretap1

        25: gretap1@NONE: mtu 1462 qdisc pfifo_fast master br0 state UNKNOWN qlen 1000

        link/ether 36:28:36:ae:c4:bc brd ff:ff:ff:ff:ff:ff

为简化此处不介绍GRE L2 + VLAN功能。

组网拓扑

PC1-PC4在同一网段,都可通过图中router的DHCP分配IP。

CPE1和CPE2均有两个WAN IP,每个WAN网段不一样,每个WAN建立一个GRE隧道,每个隧道对应不同pvid。

最终:PC1和PC3 在同一VLAN ,二层互通。

        PC2和PC4 在同一VLAN ,二层互通。

        PC1 和PC4不通。PC2和PC3不通。

Linux实现

ip link add name [name] type [type]:

        vlan

        veth: 虚拟以太网接口

        bridge: 网桥

        vxlan:vxlan

        ip6tnl: 虚拟隧道接口 IPv4 | IPv6 over IPv6

        gre: 基于IPv4的GRE隧道

        gretap: 基于 IPv4 的GRE L2隧道

        ip6gre: 基于 IPv6 的GRE隧道

        ip6gretap: 基于 IPv6 的GRE L2隧道

# brctl show

bridge name bridge id         STP enabled         interfaces

br0         8000.00000000         no                         eth0

                                                                                wlan0

                                                                                gretap1

创建一个单APN带VLAN的GRE L2 tunnel:

        grename=gretap1

        ip link add $grename type gretap remote $gre_remote_ip local $gre_local_ip ttl 255 nopmtudisc

        ip link set dev $grename up

        brctl addif br0 $grename

        vconfig add $grename $gre_l2_untagged_vlan(pvid) //生成gretap1.0接口

        ip link set dev $grename.$gre_l2_untagged_vlan up

        brctl addif br0 $grename.$gre_l2_untagged_vlan

        echo 1 > /proc/sys/net/bridge/bridge-nf-filter-vlan-tagged

ip link添加以太网接口,命令举例:

        ip link add eth1 type ethernet

  • 20
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山下小童

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值