在 NanoPI R2S 上运行 HIP VPLS

作者: Dmitriy Kuptsov
Running HIP VPLS on a NanoPI R2S
简介

在我们之前的文章中,我们演示了基于主机身份协议的虚拟专用局域网服务或 HIP-VPLS 的工作原型。当时我们使用了 Mininet 框架。在这里,我们将演示如何在真实硬件上部署此系统。我们将使用 NanoPi R2S 作为 HIP-VPLS 的平台。再次提醒。虚拟专用局域网服务 (VPLS) 提供了在现有 IP 网络之上构建第 2 层通信的方法。VPLS 可以使用各种方法构建。然而,在构建生产级 VPLS 解决方案时,需要清楚了解如何解决安全性、移动性和 L2 问题等问题。

主机身份协议 (HIP) 最初旨在分离 IP 地址的双重角色。换句话说,HIP 是一个介于 IP 层和传输层之间的 3.5 层解决方案。HIP 使用公钥的哈希值作为标识符。这些标识符,或主机身份标签 (HIT),暴露给传输层且永不更改(严格来说,如果系统管理员决定轮换 RSA 或 ECDSA 密钥对,它们可能会更改,但这将很少发生)。另一方面,HIP 使用可路由的 IP 地址(可以是 IPv4 或 IPv6)作为定位符,用于在端点之间传递 HIP 和 IPSec 数据包。总的来说,为了相互识别和交换密钥,HIP 依赖于 4 次握手(也称为 HIP 基本交换,或简称 HIP BEX)。在 BEX 期间,对等方协商一组要使用的加密算法,相互识别(由于 HIT 是永久性的并且绑定到公钥,HIP 可以使用基于 HIT 的简单防火墙来过滤掉不受信任的连接),交换密钥(HIP 可以使用 Diffie-Hellman 和椭圆曲线 Diffie-Hellman 算法),甚至使用计算难题来防止拒绝服务攻击(这些难题基于加密哈希函数和对等方在哈希函数中查找冲突的能力;解决方案的复杂性由 HIP BEX 中的响应者 регулируется)。HIP 还支持移动性,并使用单独的握手程序,在此程序期间,对等方将其对等方有关定位符(读取用于路由目的的 IP 地址)的更改通知给对方。

硬件

在我们的部署中,我们使用了以下设置。对于 HIP 交换机,我们使用了 NanoPI R2S 计算平台。我们使用了 8 端口 SNR 交换机来连接 3 个 NanoPI R2S,这样我们就模拟了设置中的 IP 叠加。NanoPI R2S 有两个接口:一个面向 LAN 网络,另一个面向 WAN 网络。NanoPI R2S 具有以下特性:它具有 1GB 内存、四核 CPU、32GB SD 卡。为了连接路由器,我们使用了 SNR 交换机(每个交换机有 8 个 1 GB/s 端口和两个小型可插拔 (SFP) 插槽)。测试平台配置如下图所示

Running HIP VPLS on a NanoPI R2S Testbed Configuration

部署系统

为了部署系统,我们准备了一个 FriendlyWRT Linux 镜像并将其刷入 SD 卡。

然后,我们将卡插入 NanoPI R2S 并运行了以下命令

$ git clone https://github.com/strangebit-io/hip-vpls-hw

接下来,我们在每个路由器上运行了以下命令

#!/bin/bash
cd hip-vpls-hw
echo "Updating the system"
opkg update
echo "Installing libraries"
opkg install nano
opkg install rsync
opkg install python3
opkg install python3-pip
opkg install python3-netifaces
pip3 install pycryptodome
opkg install python3-netifaces
echo "Preparing directories"
mkdir /opt/hip-vpls/
cd ..
echo "Copying the files"
rsync -rv  hiplib  switchd.py  switchfabric.py /opt/hip-vpls/
echo "Copying the service file"
cd startup
cp hip-vpls /etc/init.d/
chmod +x /etc/init.d/hip-vpls
/etc/init.d/hip-vpls enable
/etc/init.d/hip-vpls start

我们需要设置的一个有趣的配置选项与以太网卡的混杂模式有关(否则原始套接字不会拾取单播帧)。因此,我们修改了接口配置如下

config interface 'loopback'
        option device 'lo'
        option proto 'static'
        option ipaddr '127.0.0.1'
        option netmask '255.0.0.0'

config globals 'globals'
        option ula_prefix 'fd00:ab:cd::/48'

config device
        option name 'eth0'
        option macaddr '3e:25:61:94:f3:36'

config interface 'wan'
        option device 'eth0'
        option proto 'static'
        option ipaddr '1.1.1.4'
        option netmask '255.255.255.248'

config device
        option name 'eth1'
        option macaddr '3e:25:61:94:f3:37'
        option promisc '1'

config interface 'lan'
        option device 'eth1'

我们还重新配置了防火墙规则,以允许所有网络流量通过路由器。

然后,我们为每个 HIP 交换机生成了 HIT,配置了 hosts 文件和防火墙规则(配置先前在这里描述过)

实验评估

总的来说,部署的系统看起来像这样

Running HIP VPLS on a NanoPI R2S Deployed System

使用 IPERF 工具,我们测量了 PC3 和 Server0 之间的吞吐量。结果并没有那么令人兴奋:我们在 1GB/s 链路上的吞吐量为 1.5Mb/s。我们将继续提高 HIP-VPLS 的性能——目前我们正在尝试将源代码编译成 C 代码。

加载 Disqus 评论