虚拟局域网 及隧道技术(四)-GRE47 & Etherip97原理及应用
- 概述
- 原理及应用
- EOIP/Etherip概念区别
- 隧道协议标准
- EtherIP (IP protocol number 97)
- GRE
- 开源工具
- katlogic-eoip
- 验证环境
- GRE(EOIP)演示验证
- Etherip 97演示验证
- VPN技术广泛应用于远程办公网络、云平台的主机迁移、端到端加密通信等等, 本专栏系列文章将详细介绍常用的VPN技术原理,并搭建实验环境,进行实际演示验证,另通过日志、抓包等手段分析各种技术的特点,总结实践过程中遇到的问题及解决方法。
- 之前的文章中已经介绍过EOIP的原理及实现方式, 本节介绍EOIP/Etherip区别及协议标准,并通过应用案例解释各自的使用方式。
概述
原理及应用
- 概念介绍
- EtherIP(Ethernet over IP)/EOIP:这是一种隧道协议,主要用于在 IP 网络(如 Internet)上传输以太网帧。它允许将一个以太网网络通过 IP 网络连接到另一个以太网网络,就好像这两个以太网网络是直接相连的一样。
- 工作原理
- 当一个以太网帧在源端进入 EtherIP/EOIP 隧道时,该帧会被封装在一个 IP 数据包中。这个 IP 数据包的源地址和目的地址分别是隧道两端的 IP 地址。
- 然后,这个封装后的 IP 数据包通过 IP 网络进行传输。在目的端,IP 数据包被解封装,还原出原始的以太网帧,然后这个以太网帧就可以在目的以太网网络中进行正常的传输,就像它是从本地以太网网络产生的一样。
- 例如,假设有两个办公室 A 和 B,办公室 A 有一个本地以太网网络,办公室 B 也有一个本地以太网网络。通过 EtherIP/EOIP 隧道,可以将办公室 A 中的一台计算机发送的以太网帧传输到办公室 B 的以太网网络中,使得在办公室 B 的网络看来,这个帧就像是办公室 B 本地网络中的计算机发送的一样。
- 应用场景
- 企业网络扩展:企业可能有多个分支机构,各分支机构都有自己的以太网局域网。通过 EtherIP/EOIP,可以将这些局域网连接起来,形成一个大的企业内部网络。这样,不同分支机构之间的设备就可以像在同一个局域网中一样进行通信,例如共享文件服务器、打印机等资源。
- 数据中心互联:不同的数据中心之间可能需要传输大量的以太网数据,如虚拟机迁移数据、存储区域网络(SAN)的数据等。EtherIP/EOIP 可以提供一种安全、可靠的方式来实现数据中心之间的以太网连接,确保数据的高效传输。
- 优势
- 协议兼容性:由于它是基于 IP 网络的,只要网络支持 IP 协议,就可以使用 EtherIP/EOIP 来传输以太网帧,这使得它在各种网络环境中都有很好的适用性。
- 灵活性:可以根据实际需求灵活地配置隧道的端点,方便地调整网络拓扑结构。例如,可以很容易地增加或减少连接的以太网网络数量。
- 缺点
- 网络开销:因为要对以太网帧进行封装和解封装操作,会增加一定的网络开销。这可能会导致网络带宽的利用率降低,特别是在网络带宽有限的情况下,可能会影响数据传输的效率。
- 安全性风险:如果没有适当的安全措施,如 IPsec 等加密协议配合使用,通过 EtherIP/EOIP 传输的数据可能会面临安全风险,如数据泄露、中间人攻击等。
EOIP/Etherip概念区别
- 名称使用习惯方面
- “EtherIP” 是比较标准的英文名称写法,而 “EOIP” 是其缩写形式(Ethernet over IP 的缩写)。在实际使用中,它们本质上指的是同一种技术概念,都是用于在 IP 网络上传输以太网帧的隧道协议。
- 应用场景和具体实现细节可能存在的细微差别(取决于厂商或特定环境)
- 在一些网络设备厂商的文档中,“EtherIP” 可能被用于指代符合标准 RFC 文档(如 RFC 3378 等相关标准定义)所规范的在 IP 网络中封装以太网帧的技术实现。而 “EOIP” 可能在某些特定厂商的私有实现或者特定的行业应用场景下被提及。
- 例如,在某些工业自动化网络场景中,可能习惯用 “EOIP” 来指代经过定制化的、用于连接工业现场以太网设备(如 PLC - 可编程逻辑控制器等)的基于 IP 的以太网隧道解决方案。这种解决方案可能会在标准 EtherIP 技术基础上,针对工业网络的高可靠性、实时性等要求做了一些特殊的优化和调整,如对数据传输的优先级设置、抖动控制等方面的优化。
隧道协议标准
EtherIP(Ethernet over IP)/EOIP常采用两种隧道协议进行封装,分别是GRE(IP protocol number 47)和EtherIP (IP protocol number 97)。也有一些私有实现的EoIP协议, IPv4协议帧封装在GRE (IP protocol number 47)报文中,EoIPv6协议则帧封装在EtherIP (IP protocol number 97)报文中。
EtherIP (IP protocol number 97)
EtherIP 遵循RFC 3378: EtherIP: Tunneling Ethernet Frames in IP Datagrams (rfc-editor.org)。
EtherIP was first designed and developed in 1991. The EtherIP protocol is used to tunnel Ethernet [DIX] and IEEE 802.3 [CSMA/CD] media access control (MAC)frames (including IEEE 802.1Q [VLAN] datagrams) across an IP internet. Tunneling is usually performed when the layer three protocol carried in the MAC frames is
not IP or when encryption obscures the layer three protocol control information needed for routing. EtherIP may be implemented in an end station to enable tunneling for that single station, or it may be implemented in a bridge-like station to enable tunneling for multiple stations connected to a particular local area network (LAN) segment.
GRE
GRE遵循标准: RFC 2784: Generic Routing Encapsulation (GRE)。
Generic Routing Encapsulation (GRE) Feature Overview and Configuration Guide
GRE is a mechanism for encapsulating any network layer protocol over any other network layer protocol. The general specification was originally described in RFC 1701, and the encapsulation of IP packets over IP is defined in RFC 1702 as a specific implementation of GRE. The GRE specification has been formalized in RFC 2784 and is commonly used for encapsulating IPv4 and IPv6 packets inside IPv4 packets. RFC 2890 extends RFC 2784 with the edition of key and sequence number. The IPv4 protocol 47 is used when GRE packets are encapsulated in IPv4. GRE is widely used in VPNs as the mechanism for transporting IP packets between private IP networks across public networks with globally routed IP addresses. The advantage of GRE over other tunneling protocols is that it can encapsulate broadcast, multicast traffic (multicast streaming or routing protocols) or other non-IP protocols. GRE packets can be protected by using Internet Protocol Security (IPSec) ensuring confidentiality and integrity of the tunneled traffic. GRE is stateless and has no knowledge of the configuration or even existence of the remote tunnel endpoint. Once GRE is configured, packets are encapsulated and forwarded whether the decapsulating device is present or not. GRE allows hosts in one private IP network to communicate with hosts in another private IP network by providing a tunnel between two routers across the Internet. The GRE connection endpoints are terminated via a Virtual Tunnel Interface (VTI) configured in each device.
开源工具
有多个开源项目实现了EOIP/etherip封包功能,如amphineko-eoip、nat-lab-eoip、katlogic-eoip等,前两个在之前的文章中有过介绍,本节介绍一下katlogic-eoip,因其同时支持GRE和etherip两种协议,因此推荐使用。
katlogic-eoip
项目地址: https://gitee.com/seaneer/katlogic-eoip
验证环境
本次验证使用一台R2S,一台NEO3和一台linux服务器,并在linux上使用虚拟网卡对(veth)和桥技术来模拟下挂
GRE(EOIP)演示验证
-
ubuntu配置
#创建 tap sudo tunctl -t tap0 sudo ifconfig tap0 up sudo ./eoip tap0 172.17.10.146 172.17.10.85:1234 #注意IP地址后面要增加一个端口参数#创建桥 sudo brctl addbr br-vx sudo ip link set br-vx up #创建一对虚拟网卡veth, sudo ip link add type veth sudo ifconfig veth0 192.168.0.146/24 up sudo ifconfig veth1 up##tap0 和 veth1 分别加入 br-vx, 这样从tap0上收到的包会被转发到veth0. sudo brctl addif br-vx tap0 sudo brctl addif br-vx veth1 sudo brctl show bonc@bonc:~/code/eoip/katlogic-eoip$ brctl show bridge name bridge id STP enabled interfaces br-vx 8000.0615d4d56968 no tap0veth1
-
R2S配置
ip tuntap add mode tap dev tap0 user nobody ifconfig tap0 up ./eoip tap0 172.17.10.85 172.17.10.146:1234#wrt上 eth1为lan口, 将其与tap0桥接即可。 root@5GCPE:~# brctl show bridge name bridge id STP enabled interfaces br-lan 7fff.b2bfc3fa31ad no eth1tap0
-
抓包分析
Etherip 97演示验证
-
linux
#创建一对虚拟网卡veth, sudo ip link add type veth sudo ifconfig veth0 192.168.0.146/24 up sudo ifconfig veth1 upsudo tunctl -t tap0 sudo ifconfig tap0 upsudo brctl addif br-vx tap0 sudo brctl addif br-vx veth1 sudo brctl show bonc@bonc:~/code/eoip/katlogic-eoip$ brctl show bridge name bridge id STP enabled interfaces br-vx 8000.0615d4d56968 no tap0veth #启动eoip隧道 sudo ./eoip tap0 172.17.10.146 172.17.10.85 #####!!!!!注意,按照文档中配置172.17.10.85:etherip时无法正常建立 etherip隧道
-
WRT
ip tuntap add mode tap dev tap0 user nobody ifconfig tap0 up brctl addif br-lan tap0 brctl addif br-lan eth1 #eth1为lan口,下挂zeo3 brctl show ./eoip tap0 172.17.10.85 172.17.10.146
-
抓包
sudo tcpdump -i eno1 'host 172.17.10.85 or 172.17.10.94 or 172.17.10.146 and !172.17.10.56' -vvv -w test.pcap
The End.