RAK LoRa 网关 OpenVPN Tunnel 配置指南 1 概述 由于 LoRaWAN 网络中常用的报文转发协议 GWMP 为基于 UDP/IP 协议的非加密传输协议, 因此实际网络部署中的通信链路的加密是非常重要的 LoRaWAN 网关在工程部署中, 将分散在覆盖区域的各个角落, 使用各种不同的上行链路接 入互联网, 如何对这些网关进行集中管理和维护也是 LoRaWAN 网络部署的一大难题 RAK 系列网关引用了开源的 Openvpn 协议, 支持将 LoRaWAN 网关通过加密的 Openvpn-tunnel 接入到 OpenVPN 网络中, 同时解决了通信加密和网关维护管理问题 2 RAK 网关 OpenVPN 典型配置指南 2.1 网桥型虚拟局域网 (Ethernet Bridge) Requirements: RAK7249 LoRaGateway 若干台 可使用公共 IP 访问的 Linux 主机 - openvpn server( 本文以 Ubuntu 18.04 为例 ) LoRa Network Server 主机 ( 以 linux 操作系统为例 ) 网络维护 PC ( 以 linux 操作系统为例 ) 网络拓扑 1
OpenVPN 服务器 公网 IP:10.0.7.99 OpenVPN 网络 IP: 10.8.0.4 LoRa 网关 1 - RAK7249_125C 公网 IP:x.x.x.x OpenVPN 网络 IP: 10.8.0.50 Internet LoRa 网络服务器 公网 IP:x.x.x.x OpenVPN 网络 IP: 10.8.0.101 LoRa 网关 2 - RAK7249_125D 公网 IP:x.x.x.x OpenVPN 网络 IP: 10.8.0.51 监控 PC 公网 IP:x.x.x.x OpenVPN 网络 IP: 10.8.0.100 2.1.1 配置 openvpn 服务器 step 1. 安装 openvpn 软件 sudo apt install openvpn step 2. 下载 easy-rsa # 下载 easy-rsa wget https://github.com/openvpn/easy-rsa/archive/v3.0.6.tar.gz # 解压缩 tar zxvf v3.0.6.tar.gz # 将 easyrsa3 拷贝到 /etc/openvpn 目录 cp -rf easy-rsa-3.0.6/easyrsa3/* /etc/openvpn # 初始化 pki cd /etc/openvpn./easyrsa init-pki # 生成 CA 证书./easyrsa build-ca # 此过程需要设置密码, 请妥善保存此密码 如果你不想为 CA 证书设置密码, 请使 2
用./easyrsa build-ca nopass 命令 # 生成 Diffie hellman parameters./easyrsa gen-dh # 生成 openvpn 服务器证书及密钥./easyrsa build-server-full server nopass step 3. 配置 openvpn # 编辑 openvpn-server 配置文件 /etc/openvpn/server/server.conf daemon port 1194 proto udp dev tap ca /etc/openvpn/pki/ca.crt cert /etc/openvpn/pki/issued/server.crt key /etc/openvpn/pki/private/server.key dh /etc/openvpn/pki/dh.pem ifconfig-pool-persist /var/log/openvpn/ipp.txt server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.250 client-to-client keepalive 10 120 comp-lzo persist-key persist-tun up /etc/openvpn/server/up.sh status /var/log/openvpn/openvpn-server-status.log log /var/log/openvpn/openvpn-server.log script-security 2 verb 3 # 编辑 /etc/openvpn/server/up.sh 3
#!/bin/sh /usr/sbin/ifconfig $1 10.8.0.4 netmask 255.255.255.0 broadcast 10.8.0.255 step 4. 启动 openvpn server openvpn --config /etc/openvpn/server/server.conf step 5. 查看 openvpn TAP 接口状态 ifconfig tap0 tap0: flags=4163<up,broadcast,running,multicast> mtu 1500 inet 10.8.0.4 netmask 255.255.255.0 broadcast 10.8.0.255 inet6 fe80::c8c0:81ff:fea1:cc82 prefixlen 64 scopeid 0x20<link> ether ca:c0:81:a1:cc:82 txqueuelen 100 (Ethernet) RX packets 380 bytes 538096 (538.0 KB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 437 bytes 544888 (544.8 KB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 2.1.2 配置 LoRaWAN Gateway step 1. 在 openvpn server 主机中生成客户端证书及密钥 # 生成客户端证书及密钥 RAK7249_125C 为具体 LoRaGateway 的名称, 可自定义./easyrsa build-client-full RAK7249_125C nopass step 2. 登录到网关的 WEB 控制台, 打开 Services->OpenVPN Tunnel, 添加一个类型为 Ethernet Bridge VPN Client 的实例 step 3. 配置该实例, 4
Interface Type : 选择 TAP Protocal : 应该与 openvpn server 中的配置一致 本例中应该选择 UDP Remote : 填写 openvpn server 主机的公网 IP 和 openvpn server 的端口号, 用空格 隔开 本例应该填写 x.x.x.x 1194 在 openvpn server 主机中导出 CA 文件及客户端证书 / 密钥文件, 并分别填写到本页面 中的输入域 CA/cert/key 中 # 导出 CA 文件 cat /etc/openvpn/pki/ca.crt # 导出客户端 RAK7249_125C 的客户端证书 cat /etc/openvpn/pki/issued/rak7249_125c.crt # 导出客户端 RAK7249_125C 的客户端密钥 cat /etc/openvpn/pki/private/rak7249_12c.key LZO Compression : 选择 YES Enable tls-auth : 关闭 点击 Save & Apply 保存并应用配置 5
step 4. 测试 openvpn tunnel 是否正确连接 打开 Network->Diagnostics, 尝试 ping openvpn server 的虚拟接口地址 10.8.0.4,ping 测试通过, 表示网关已经正确接入到了 openvpn 网络中 6
step 5. 在网络中的其它网关中重复本章节步骤, 将所有的网关添加到 OpenVPN 网络中 2.1.3 将网络中的 LoRa 网络服务器和和其它 PC 接入到 openvpn 网络 本文以 linux 操作系统 ubuntu 为例 step 1. 安装 openvpn sudo apt install openvpn step 2. 在 openvpn server 主机上为当前主机生成客户端证书和密钥, 并导入到本机 # 生成 networkserver 客户端证书 /etc/openvpn/easyrsa build-client-full networkserver nopass # 导出 CA 证书至本机 /etc/openvpn/client/ca.crt cat /etc/openvpn/pki/ca.crt # 导出 networkserver 客户端证书至本机 /etc/openvpn/client/networkserver.crt cat /etc/openvpn/pki/issued/networkserver.crt # 导出 networkserver 客户端密钥至本机 /etc/openvpn/client/networkserver.key cat /etc/openvpn/pki/private/networkserver.key step 3. 编辑本机的 openvpn 客户端配置文件 /etc/openvpn/client/client.conf dev tap proto udp remote 10.0.7.99 1194 remote-cert-tls server client nobind ca /etc/openvpn/client/ca.crt cert /etc/openvpn/client/networkserver.crt key /etc/openvpn/client/networkserver.key persist-key persist-tun comp-lzo yes daemon 7
step 4. 运行 openvpn 客户端 openvpn --config /etc/openvpn/client/client.conf step 5. 检查 TAP 接口配置状态及 OpenVPN 网络连接状态 ifconfig tap0 tap0 Link encap:ethernet HWaddr be:9e:7c:f9:9b:53 inet addr:10.8.0.51 Bcast:10.8.0.255 Mask:255.255.255.0 inet6 addr: fe80::bc9e:7cff:fef9:9b53/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:39 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:0 (0.0 B) TX bytes:7216 (7.2 KB) # ping OpenVPN 服务器接口 IP ping 10.8.0.4 PING 10.8.0.4 (10.8.0.4) 56(84) bytes of data. 64 bytes from 10.8.0.4: icmp_seq=1 ttl=64 time=26.9 ms 64 bytes from 10.8.0.4: icmp_seq=2 ttl=64 time=49.2 ms 64 bytes from 10.8.0.4: icmp_seq=3 ttl=64 time=71.8 ms 64 bytes from 10.8.0.4: icmp_seq=4 ttl=64 time=101 ms 64 bytes from 10.8.0.4: icmp_seq=5 ttl=64 time=2.79 ms 64 bytes from 10.8.0.4: icmp_seq=6 ttl=64 time=2.87 ms ^C --- 10.8.0.4 ping statistics --- 6 packets transmitted, 6 received, 0% packet loss, time 5007ms # ping LoRa 网关 OpenVPN 接口 IP ping 10.8.0.50 PING 10.8.0.50 (10.8.0.50) 56(84) bytes of data. 64 bytes from 10.8.0.50: icmp_seq=1 ttl=64 time=105 ms 64 bytes from 10.8.0.50: icmp_seq=2 ttl=64 time=5.33 ms 64 bytes from 10.8.0.50: icmp_seq=3 ttl=64 time=46.6 ms 64 bytes from 10.8.0.50: icmp_seq=4 ttl=64 time=69.4 ms 64 bytes from 10.8.0.50: icmp_seq=5 ttl=64 time=93.6 ms 64 bytes from 10.8.0.50: icmp_seq=6 ttl=64 time=117 ms 64 bytes from 10.8.0.50: icmp_seq=7 ttl=64 time=8.78 ms ^C --- 10.8.0.50 ping statistics --- 7 packets transmitted, 7 received, 0% packet loss, time 6008ms rtt min/avg/max/mdev = 5.332/63.729/117.192/41.772 ms 8
2.1.4 使用 OpenVPN Tunnel 转发 Packet forwarder 的 LoRa 报文 将 Packet forwarder 中的 Server Address 修改为 LoRa Network Server 的 Openvpn 虚拟接 口 IP 地址,LoRa 报文将通过 openvpn tunnel 发送至 LoRa Network Server 2.1.5 通过 Openvpn tunnel 访问 LoRa 网关的 WEB Console 或 linux console 使用任意一台接入到此 Openvpn 网络的 PC 或手机均可通过网关的虚拟接口 IP 地址访问网 关的 WEB Console 和 linux console. 9