Collection of articles for working with Multitech devices in LoRaWAN networks.
Complete schema documentation for network security and routing resources: nat, firewall, filters, and routes.
NAT (Network Address Translation) rules control how IP addresses and ports are translated as packets traverse the device. Supports port forwarding (DNAT), source NAT (SNAT), and masquerading.
The nat resource is an array of NAT rule configurations:
[
{
// NAT rule configuration
}
]
| Property | Type | Required | Description |
|---|---|---|---|
__v |
integer | No | Schema version (2) |
name |
string | Yes | Unique rule name (max 250 chars) |
description |
string | No | Rule description (max 250 chars) |
enabled |
boolean | No | Enable/disable rule |
guid |
string | Yes | Rule ID (auto-generated) |
protocol |
string | No | Protocol: “TCP”, “UDP”, “TCP/UDP”, “ANY” |
chain |
string | No | Chain: “PREROUTING” or “POSTROUTING” |
target |
string | Yes | NAT type: “DNAT”, “SNAT”, “MASQUERADE” |
| Property | Type | Description |
|---|---|---|
srcInterface |
string | Source interface: “ANY”, “WAN”, “LAN”, “CELLULAR”, “WIFI”, “WIFI_AP”, “ETHERNET”, “OPENVPN” |
srcSpecInterface |
string | Specific interface name (for OPENVPN) |
srcAddr |
string | Source IP address or “ANY” |
srcMask |
string/integer | Source subnet mask (CIDR or dotted decimal) |
srcPort |
string | Source port(s): “80”, “8000:8080”, “80,443,8080” |
srcMac |
string | Source MAC address (not for POSTROUTING) |
| Property | Type | Description |
|---|---|---|
dstInterface |
string | Destination interface: “ANY”, “WAN”, “LAN”, etc. |
dstSpecInterface |
string | Specific interface name (for OPENVPN) |
dstAddr |
string | Destination IP address or “ANY” |
dstMask |
string/integer | Destination subnet mask |
dstPort |
string | Destination port(s) |
| Property | Type | Description |
|---|---|---|
toAddr |
string | Translate to this IP address (required for DNAT/SNAT) |
toPort |
string | Translate to this port (optional) |
enableNatLoopback |
boolean | Enable NAT loopback (DNAT only) |
Translates destination address/port - used for port forwarding:
toAddr or toPortTranslates source address:
toAddrDynamic source NAT using interface IP:
toAddr needed (uses interface IP)Forward external port 8080 to internal web server:
{
"__v": 2,
"name": "Web Server Forward",
"description": "Forward port 8080 to internal server",
"enabled": true,
"guid": "auto-generated",
"protocol": "TCP",
"chain": "PREROUTING",
"target": "DNAT",
"srcInterface": "WAN",
"srcAddr": "ANY",
"srcPort": "",
"dstInterface": "ANY",
"dstAddr": "",
"dstPort": "8080",
"toAddr": "192.168.1.100",
"toPort": "80",
"enableNatLoopback": true
}
Forward SSH and HTTPS:
[
{
"name": "SSH Forward",
"enabled": true,
"guid": "guid-1",
"protocol": "TCP",
"chain": "PREROUTING",
"target": "DNAT",
"srcInterface": "WAN",
"dstPort": "22",
"toAddr": "192.168.1.50",
"toPort": "22"
},
{
"name": "HTTPS Forward",
"enabled": true,
"guid": "guid-2",
"protocol": "TCP",
"chain": "PREROUTING",
"target": "DNAT",
"srcInterface": "WAN",
"dstPort": "443",
"toAddr": "192.168.1.100",
"toPort": "443"
}
]
Force specific source IP for outbound traffic:
{
"name": "Force Source IP",
"enabled": true,
"guid": "guid-3",
"protocol": "ANY",
"chain": "POSTROUTING",
"target": "SNAT",
"srcInterface": "LAN",
"srcAddr": "192.168.1.0",
"srcMask": 24,
"dstInterface": "WAN",
"toAddr": "203.0.113.50"
}
Enable internet access for LAN:
{
"name": "LAN Masquerade",
"enabled": true,
"guid": "guid-4",
"protocol": "ANY",
"chain": "POSTROUTING",
"target": "MASQUERADE",
"srcInterface": "LAN",
"dstInterface": "WAN",
"toAddr": ""
}
The firewall resource configures global firewall settings and protocol helpers.
{
"pptp": boolean,
"l2tp": boolean,
"connTrackHelpers": boolean
}
| Property | Type | Required | Description |
|---|---|---|---|
pptp |
boolean | Yes | Enable PPTP passthrough (default: false) |
l2tp |
boolean | Yes | Enable L2TP passthrough (default: false) |
connTrackHelpers |
boolean | Yes | Enable connection tracking helpers (default: false) |
When enabled, provides connection tracking for protocols that use separate control and data flows:
{
"pptp": true,
"l2tp": true,
"connTrackHelpers": true
}
Filter rules control packet filtering (allow/deny/log traffic) through the device firewall.
The filters resource is an array of filter rule configurations:
[
{
// Filter rule configuration
}
]
| Property | Type | Required | Description |
|---|---|---|---|
__v |
integer | No | Schema version (2) |
name |
string | Yes | Unique rule name (max 250 chars) |
description |
string | No | Rule description (max 250 chars) |
enabled |
boolean | Yes | Enable/disable rule |
protocol |
string | No | Protocol: “TCP”, “UDP”, “TCP/UDP”, “ANY” |
chain |
string | Yes | Chain: “INPUT”, “OUTPUT”, “FORWARD” |
target |
string | No | Action: “ACCEPT”, “REJECT”, “LOG”, “DROP” |
| Property | Type | Description |
|---|---|---|
srcInterface |
string | Source interface |
srcSpecInterface |
string | Specific interface name (for OPENVPN) |
srcAddr |
string | Source IP address or “ANY” |
srcMask |
string/integer | Source subnet mask |
srcPort |
string | Source port(s) |
srcMac |
string | Source MAC (not for OUTPUT chain) |
| Property | Type | Description |
|---|---|---|
dstInterface |
string | Destination interface |
dstSpecInterface |
string | Specific interface name (for OPENVPN) |
dstAddr |
string | Destination IP address or “ANY” |
dstMask |
string/integer | Destination subnet mask |
dstPort |
string | Destination port(s) |
| Chain | Description | Use Case |
|---|---|---|
INPUT |
Traffic destined for device itself | Allow SSH, HTTPS to device |
OUTPUT |
Traffic originating from device | Control device’s outbound traffic |
FORWARD |
Traffic passing through device | Control LAN to WAN traffic |
| Target | Description | Behavior |
|---|---|---|
ACCEPT |
Allow traffic | Packet is allowed through |
REJECT |
Reject traffic | Packet is dropped, sender is notified |
DROP |
Drop traffic | Packet is silently dropped |
LOG |
Log traffic | Packet is logged, then continues to next rule |
{
"__v": 2,
"name": "Allow SSH",
"description": "Allow SSH access to device",
"enabled": true,
"protocol": "TCP",
"chain": "INPUT",
"target": "ACCEPT",
"srcInterface": "LAN",
"srcAddr": "192.168.1.0",
"srcMask": 24,
"dstPort": "22"
}
{
"name": "Block Facebook",
"enabled": true,
"protocol": "ANY",
"chain": "FORWARD",
"target": "REJECT",
"srcInterface": "LAN",
"dstAddr": "157.240.0.0",
"dstMask": 16
}
{
"name": "Allow HTTPS",
"enabled": true,
"protocol": "TCP",
"chain": "FORWARD",
"target": "ACCEPT",
"srcInterface": "LAN",
"dstInterface": "WAN",
"dstPort": "443"
}
{
"name": "Log Port Scan",
"enabled": true,
"protocol": "TCP",
"chain": "INPUT",
"target": "LOG",
"srcInterface": "WAN",
"dstPort": "1:1024"
}
The routes resource configures static routing table entries.
The routes resource is an array of route configurations:
[
{
// Route configuration
}
]
| Property | Type | Required | Description |
|---|---|---|---|
name |
string | Yes | Route name (max 250 chars) |
ip |
string | Yes | Destination network IP address |
mask |
string/integer | Yes | Subnet mask (CIDR or dotted decimal, 0-32) |
gateway |
string | Yes | Gateway IP address |
{
"name": "HQ Network",
"ip": "10.0.0.0",
"mask": 16,
"gateway": "192.168.1.254"
}
[
{
"name": "Branch Office 1",
"ip": "172.16.0.0",
"mask": "255.255.0.0",
"gateway": "192.168.1.1"
},
{
"name": "Branch Office 2",
"ip": "172.17.0.0",
"mask": 16,
"gateway": "192.168.1.2"
},
{
"name": "Cloud Network",
"ip": "10.100.0.0",
"mask": 24,
"gateway": "192.168.1.10"
}
]
{
"name": "Default via Cellular",
"ip": "0.0.0.0",
"mask": 0,
"gateway": "10.64.64.64"
}
GET /api?fields=nat
POST /api/nat
Content-Type: application/json
{
"name": "Port Forward",
"enabled": true,
"guid": "",
"protocol": "TCP",
"chain": "PREROUTING",
"target": "DNAT",
"srcInterface": "WAN",
"dstPort": "8080",
"toAddr": "192.168.1.100",
"toPort": "80"
}
PUT /api/nat/{index}
DELETE /api/nat/{index}
GET /api?fields=firewall
PUT /api/firewall
Content-Type: application/json
{
"pptp": true,
"l2tp": true,
"connTrackHelpers": true
}
GET /api?fields=filters
POST /api/filters
Content-Type: application/json
{
"name": "Allow SSH",
"enabled": true,
"protocol": "TCP",
"chain": "INPUT",
"target": "ACCEPT",
"srcInterface": "LAN",
"dstPort": "22"
}
PUT /api/filters/{index}
DELETE /api/filters/{index}
GET /api?fields=routes
POST /api/routes
Content-Type: application/json
{
"name": "Remote Network",
"ip": "10.0.0.0",
"mask": 16,
"gateway": "192.168.1.254"
}
PUT /api/routes/{index}
DELETE /api/routes/{index}
Forward external port 80 to internal web server:
POST /api/nat
{
"name": "HTTP Forward",
"enabled": true,
"guid": "",
"protocol": "TCP",
"chain": "PREROUTING",
"target": "DNAT",
"srcInterface": "WAN",
"dstPort": "80",
"toAddr": "192.168.1.100",
"toPort": "80",
"enableNatLoopback": true
}
Forward multiple services to different internal servers:
# Web server (HTTP/HTTPS)
POST /api/nat
{
"name": "Web HTTP",
"enabled": true,
"protocol": "TCP",
"chain": "PREROUTING",
"target": "DNAT",
"srcInterface": "WAN",
"dstPort": "80",
"toAddr": "192.168.1.100",
"toPort": "80"
}
# Mail server (SMTP)
POST /api/nat
{
"name": "Mail SMTP",
"enabled": true,
"protocol": "TCP",
"chain": "PREROUTING",
"target": "DNAT",
"srcInterface": "WAN",
"dstPort": "25",
"toAddr": "192.168.1.101",
"toPort": "25"
}
Allow SSH only from specific subnet:
POST /api/filters
{
"name": "Allow SSH from Admin",
"enabled": true,
"protocol": "TCP",
"chain": "INPUT",
"target": "ACCEPT",
"srcInterface": "LAN",
"srcAddr": "192.168.1.0",
"srcMask": 24,
"dstPort": "22"
}
# Block all other SSH
POST /api/filters
{
"name": "Block SSH Others",
"enabled": true,
"protocol": "TCP",
"chain": "INPUT",
"target": "DROP",
"srcInterface": "ANY",
"dstPort": "22"
}
Block access to social media:
POST /api/filters
{
"name": "Block Social Media",
"enabled": true,
"protocol": "ANY",
"chain": "FORWARD",
"target": "REJECT",
"srcInterface": "LAN",
"dstAddr": "157.240.0.0",
"dstMask": 16
}
Route specific traffic through VPN tunnel:
POST /api/routes
{
"name": "Corporate Network",
"ip": "10.0.0.0",
"mask": 8,
"gateway": "10.255.255.2"
}
Ports can be specified in multiple formats:
"80""8000:8080" or "8000-8080""80,443,8080""80,443,8000:8080,9000-9100""ANY" or """192.168.1.100""ANY" or """0.0.0.0" (allowed)24 or "24""255.255.255.0""" (no mask)"00:11:22:33:44:55""ANY" or ""enableNatLoopback allows LAN clients to access forwarded services using WAN IP:
# 1. Create DNAT rule
curl -X POST http://192.168.2.1/api/nat \
-H "Content-Type: application/json" \
-b cookies.txt \
-d '{
"name": "Web Server",
"enabled": true,
"guid": "",
"protocol": "TCP",
"chain": "PREROUTING",
"target": "DNAT",
"srcInterface": "WAN",
"dstPort": "80",
"toAddr": "192.168.1.100",
"toPort": "80",
"enableNatLoopback": true
}'
# 2. Create filter rule to allow forwarded traffic
curl -X POST http://192.168.2.1/api/filters \
-H "Content-Type: application/json" \
-b cookies.txt \
-d '{
"name": "Allow Web Forward",
"enabled": true,
"protocol": "TCP",
"chain": "FORWARD",
"target": "ACCEPT",
"srcInterface": "WAN",
"dstAddr": "192.168.1.100",
"dstPort": "80"
}'
# 3. Save
curl -X POST http://192.168.2.1/api/command/save -b cookies.txt
# 1. Create static route
curl -X POST http://192.168.2.1/api/routes \
-H "Content-Type: application/json" \
-b cookies.txt \
-d '{
"name": "VPN Network",
"ip": "10.0.0.0",
"mask": 16,
"gateway": "10.255.255.2"
}'
# 2. Create filter to allow VPN traffic
curl -X POST http://192.168.2.1/api/filters \
-H "Content-Type: application/json" \
-b cookies.txt \
-d '{
"name": "Allow VPN Traffic",
"enabled": true,
"protocol": "ANY",
"chain": "FORWARD",
"target": "ACCEPT",
"srcInterface": "LAN",
"dstAddr": "10.0.0.0",
"dstMask": 16
}'
# 3. Save
curl -X POST http://192.168.2.1/api/command/save -b cookies.txt
Check:
toAddr points to correct internal IPDebug:
# Check NAT rules
GET /api?fields=nat
# Check filter rules
GET /api?fields=filters
# Test from external IP
telnet <wan-ip> <port>
Check:
Debug:
Check:
GET /api?fields=stats/routesProblem: Cannot access forwarded service from LAN using WAN IP
Solution:
enableNatLoopback: true in DNAT ruleLast Updated: December 17, 2025
Schema Versions: nat (2), firewall (1), filters (2), routes (1)