In my case, I only use UDP, which I now route through the forwarded packet tunnel. This already provides a level of security. However, I mainly use OpenVPN because on standard cellular networks there is no fixed IP address (due to CGNAT), except with professional plans that provide a static IP. OpenVPN allows me to create a tunnel that provides access through a private IP, which secures access and allows ping and remote connectivity.
It is important to correctly configure the private IP address of the OpenVPN server on the gateway, and not the server’s local LAN IP, so that UDP traffic is routed through the tunnel. If the ChirpStack LNS is hosted on a different local server, you must also forward UDP port 1700 from the OpenVPN server to the LNS to allow UDP traffic to pass from the OpenVPN server to the LNS. Additionally, remember to make the NAT rules persistent in case of an OpenVPN server reboot.
The ChirpStack LNS will receive the UDP uplinks, which are then translated into MQTT via the ChirpStack Gateway Bridge. MQTT is never used by the gateway itself, unless the gateway embeds a ChirpStack LNS, which is not the case for SenseCAP M2 gateways.
Gateway → UDP (packet forwarder)
ChirpStack Gateway Bridge → MQTT
MQTT = INTERNAL BACKEND ONLY
I found a very interesting DIY solution — or rather a recycling approach: a Raspberry Pi 3B+ or a Raspberry Pi 4 combined with this LoRaWAN module, which is actually a SenseCAP M1. This solution works perfectly with ChirpStack Gateway OS in concentrator mode.
The compatible image is the Raspberry Pi 2 (ARMv7) image.
This gateway can integrate an LNS for those who want it, which is not my case. It is strongly recommended to use the full version of the image, as it allows you to add GPS, OpenVPN, as well as a 4G USB modem (for example a Huawei HiLink model), etc.
Please note: ChirpStack Gateway OS runs, like the SenseCAP M2, on OpenWrt with LuCI. This means a few SSH commands are required, but with the help of AI tools, it is absolutely manageable.
For those who want to do more than just operate a gateway or an LNS, I would recommend installing a standard Raspberry Pi OS with Docker instead, so additional services can be deployed (such as Home Assistant or others).
This setup also works on a Raspberry Pi 2 (with a 40-pin connector), but performance is limited and not well suited for running an LNS.
There is also a dedicated SenseCAP image, which I have not tested:
There are very few older Helium gateways that allow this type of configuration, and they are often quite expensive, even though the Helium network itself no longer has real value. Today, these gateways are only worth their hardware value.
I was able to acquire three of them for €150, which is still a very good deal: Raspberry Pi 4 (8 GB), WM1303 or WM1302 concentrator, power supply, enclosure, and antenna.
In practice, around €85 per unit for second-hand hardware of this capability seems perfectly reasonable, especially if you do not need to run an LNS.
SENSE CAP M1 Hat + WM1302 for rpi3 or rpi 4 compatible rpi2 40 pins but not LNS
And Smart Mimic Finestra Board rpi with os chirpstack gateway
Passerelles réseau Smart Mimic Finestra Board-Embed SEMTECH SX1302 LoRaWAN
key client open vpn :
client
dev tun
proto tcp
remote 103.25.44.111 1194 // 103.25.44.111 IP fixe Public box 1194 port redirection vers open vpn server " redirection de port box "
resolv-retry infinite
nobind
persist-key
persist-tun
redirect-gateway def1 bypass-dhcp
remote-cert-tls server
cipher AES-256-GCM
auth SHA256
verb 3
-----BEGIN CERTIFICATE-----
xxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxx
-----END CERTIFICATE-----
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
ba:b8:67:87:50:28:b2xxxxxxxxxxxxxxxxxxxxx
Signature Algorithm: ecdsa-with-SHA256
Issuer: CN=Easy-RSA CA
Validity
Not Before: Mar 24 15:15:49 2025 GMT
Not After : Jun 27 15:15:49 2027 GMT
Subject: CN=Sense-Cap-4G
Subject Public Key Info:
Public Key Algorithm: id-ecPublicKey
Public-Key: (256 bit)
pub:
04:b6:de:f8:dxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
e8:45:08:82:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:
22:4b:1c:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
18:33:82:axxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
96:xxxxxxxxxxxxxxxxxxx
ASN1 OID: prime256v1
NIST CURVE: P-256
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
X509v3 Subject Key Identifier:
A6:43:99:3Cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
X509v3 Authority Key Identifier:
keyid:FF:5B:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
DirName:/CN=Easy-RSA CA
serial:4C:71:D2:77xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
X509v3 Extended Key Usage:
TLS Web Client Authentication
X509v3 Key Usage:
Digital Signature
Signature Algorithm: ecdsa-with-SHA256
Signature Value:
3x:45:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
3x:c8:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
0x:21:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
51:75:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
-----BEGIN PRIVATE KEY-----
xxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxx
-----END PRIVATE KEY-----
2048 bit OpenVPN static key
-----BEGIN OpenVPN Static key V1-----
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxx
-----END OpenVPN Static key V1-----