Openwrt 和通用Linux设备通过 IPIP/GRETAP 进行二层组网
在前一篇文章中,笔者尝试了用Openwrt和RouterOS配合IPIP和EoIP隧道进行二层组网。但由于Openwrt的EoIP包是一个用户态的包,AX6s转发EoIP流量的性能并不是特别好(有线500Mbps,无线300Mbps),同时RouterOS也是一个收费系统,并不是所有人都会只为了组网来购买RouterOS的授权。鉴于此,笔者也在下文提供一种将IPoE替换为GRETAP协议进行二层组网的方案,此方案仅需一台运行于实验室内网的通用Linux设备即可(本文使用的是Debian11)。
GRETAP?
相比于GRE,GRETAP是类似EoIP的二层协议,因此我们同样可以将其用于二层组网。但很可惜RouterOS不支持GRETAP(怀疑是为了推广自家的EoIP协议),因此笔者只能使用另一台Linux设备和Openwrt路由器进行组网了。
网络结构
此处依然简要列出一下代配置的网络结构:
实验室路由器:ikuai,向实验室内设备分配
192.168.102.0/24
的IP。安装在实验室的Debian服务器:Debian 11,有两个网络接口,接口
ens192
获取校园网IP10.20.1.1
;接口ens224
连接ikuai,配置前暂不分配IP。安装在宿舍的Openwrt路由器:Openwrt 22.03.0,WAN口分配
10.20.1.2
的校园网IP。
配置IPIP隧道
由于学校内网封锁GRE协议,因此配置的第一步依然是在两侧设置用于承载GRETAP数据的的IPIP隧道。
Debian 侧
启用IPv4转发:
1 | echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf |
安装ipip和桥接包:
1 | apt install ipip bridge-utils |
添加隧道:
1 | 启用内核模块 |
Openwrt 侧
先安装IPIP相关的包:
1 | opkg update |
重启路由器,随后添加IPIP interface:
1 | Network > Interface > Add new interface... |
给IPIP的interface分配一个静态IP:
1 | Network > Interface > Add new interface... |
RouterOS和Openwrt一侧都配置好IPIP隧道后,可以互相ping一下对方的隧道IP (6.0.0.1
, 6.0.0.2
)来检查一下隧道是否通了。
添加GRETAP隧道并桥接上级网口
Debian 侧
添加隧道:
1 | gretap tunnel |
桥接配置:
1 | bridge |
不过笔者在配置时发现,按照上述配置拉起网桥后,GRETAP另一侧的Openwrt似乎无法收到ikuai发回的DHCP offer包,但在ens224端口上执行dhclient -i ens224 -4 -v
后莫名其妙的解决了该问题。
Openwrt 侧
安装GRE相关的包并重启:
1 | opkg update |
添加GRETAP interface:
1 | Network > Interface > Add new interface... |
Debian 侧配置隧道开机自启
如要让Debian一侧的IPIP和GRETAP隧道开机自启,可以用systemd在开机时运行以下脚本:
/root/gretap-spark.sh
:
1 | #modprobe |
/lib/systemd/system/gre-and-ipip-tunnel.service
:
1 | [Unit] |
通过隧道分配IP
IPv4
在Openwrt上新建一个interface,名字叫dhcpgretap4
,Protocal选择dhcp client
,Device选择gre4t-gretap1
(默认可能不提供这个选项,可能需要在最下面手动输入),并勾选Use default gateway
,防火墙划分到WAN
区。
如果不特别配置的话,隧道接口的MAC地址每次重启都会变化(这是由于gretap这个接口没办法固定mac导致的),openwrt似乎没发直接固定这个地址。变通的方案可以在network - device
界面创建一个bridge(如grebr),然后给bridge配置v6地址,再将前面dhcpgretap4
的Device指定到grebr上,此时dhcpgretap4
的MAC就被固定成那个bridge的地址了。
IPv6
把WAN6
的接口改为gre4t-gretap1
(可能也需要手动输入)即可。
全部配置完成后,dhcpipip4
和wan6
的interface理论上均能取得上级路由器(ikuai)分配的IP。
性能
有线下iperf3测速可达800Mbps,无线下可达500Mbps。速度相比EoIP协议的内层隧道已有明显改善。
参考资料
- https://forum.openwrt.org/t/howto-l2-trunk-over-wifi-with-gretap/75689
- https://david-waiting.medium.com/a-beginners-guide-to-generic-routing-encapsulation-fb2b4fb63abb