Skip to content

Installation on LANCOM R&S®Unified Firewall (Asset Mode)

This guide provides instructions for running the XplicitTrust agent as a container on a LANCOM R&S®Unified Firewall.

Asset mode means services (like SSH, HTTPS, remote desktop, etc) can be remotely accessed from an XplicitTrust client, or from another system running in asset mode.

Prerequisites

  • LCOS FX 11.2 or later. Docker container support was introduced in this release.
  • A SAG Basic or SAG Full licence (Secure Application Gateway). Container functionality is not available without it.
  • A Docker network on the firewall. Containers attach to a network you create; the agent container needs one with outbound access.

Two ways to deploy

Container management is available through the firewall's REST API and, more conveniently for more than one firewall, through a LANCOM Management Cloud add-in. The add-in is the recommended path and is described first.

Deployment with the LANCOM Management Cloud

XplicitTrust provides a ready-made LMC add-in that declares the agent container, its capabilities and volume, and optionally the firewall objects that give it outbound access.

1. Import the add-in

Download the add-in and import it into your LMC project under Add-ins:

https://dl.xplicittrust.com/xtna-agent-lancom-addin.json

The import creates the XTNA-Agent add-in along with the variables it uses.

2. Set the variables

Assign the variables under Add-ins → Variables, or per device under Devices → device → Variables. Values are layered global → network → site → device, most specific wins — so a tenant-wide token and domain can live at project level while each firewall gets its own asset name.

Variable Required Description
XTNA_TOKEN yes Asset creation token from the admin console
XTNA_DOMAIN yes Your tenant domain
XTNA_NAME recommended Asset name. Also sets -ignore-hostname, so the asset is identified by this name rather than the container ID
XTNA_NETWORK Docker network name on the firewall. Default Docker
XTNA_SUBNET That network's subnet
XTNA_CREATE_NETWORK on to have the add-in declare the Docker network too. Leave off when it already exists
XTNA_BRIDGE for outbound rules Name of the Docker bridge interface, e.g. dockereaecd76f. See below
XTNA_WAN_ACCESS on (default) declares the desktop object and its connection to the Internet object
XTNA_SERVICES Outbound services, comma separated. Default internet.https,standard.dns
XTNA_INTERNET Name of the Internet object. Default WAN
XTNA_IP Fixed address inside the Docker network. Leave blank to let Docker assign one
XTNA_CONTAINER, XTNA_DESKTOP, XTNA_IMAGE Object names and image, if the defaults do not suit

If XTNA_TOKEN and XTNA_DOMAIN are both unset on a device, the add-in does nothing there — so it is safe to allocate broadly and enable it per firewall.

Finding the bridge name

LCOS FX names the Docker bridge docker followed by the first eight characters of the Docker network's ID. Read it from the firewall's REST API:

GET https://<firewall>:3438/model/interfaces

Look for the entry with "type": "bridge" and a name starting with docker. The add-in cannot determine this itself, because an add-in script cannot read device state.

3. Allocate and roll out

Assign the add-in under Add-ins → Allocation, either globally with a variable condition or to a network. Then roll the configuration out from the Geräte / Devices list — devices showing Nicht aktuell are rolled out from the three-dot menu.

The add-in logs what it declared to the device log:

xtna-agent: using existing docker network 'Docker' (XTNA_CREATE_NETWORK is off)
xtna-agent: declared container 'xtna-agent' from cr-public.xplicittrust.com/xtna-agent:latest as asset 'edge-gw-01'
xtna-agent: declared desktop object 'XTNA container' on bridge 'dockereaecd76f'
xtna-agent: declared connection 'XTNA container' <-> 'WAN' allowing internet.https, standard.dns outbound

A failed configuration upload is discarded whole

The firewall applies a configuration transactionally. If one declared object is rejected, the entire upload is rolled back, including objects that were accepted. Check the device log for the rejected object rather than assuming a partial result.

Deployment with the REST API

For a single firewall, or to inspect what the add-in produces, containers can be managed directly. Authenticate against POST /auth/login and pass the returned token as the X-Gateprotect-Auth-Token header.

Endpoint Purpose
GET /model/docker-network-settings The Docker networks and their IDs
POST /model/docker-container-settings Create the container
GET /api/docker/containers-info Inspect state, addresses, mounts
GET /api/docker/container-logs/{uniqueId} The container's log output

A minimal container object:

{
  "active": true,
  "name": "xtna-agent",
  "image": "cr-public.xplicittrust.com/xtna-agent:latest",
  "command": "-token <token> -domain <tenant domain> -name <asset name> -ignore-hostname",
  "capabilities": ["NET_ADMIN", "NET_RAW"],
  "volumes": ["/etc/XplicitTrust"],
  "networks": [{ "uniqueId": "<docker network uniqueId>" }],
  "policy": { "restart": { "condition": "always" } }
}

Keep the volume

/etc/XplicitTrust holds the asset identity and certificates. Without it, every recreation of the container enrols a new asset. With it, re-passing -token is harmless: the agent only registers when no configuration is present.

Outbound access

The container needs to reach the XplicitTrust infrastructure:

  • TCP 443 to the API, the update server and the broker
  • UDP 53 for name resolution
  • outbound UDP for direct peer-to-peer connections. Without it the agent still works, but every peer connection falls back to a relay

There is no predefined service on LCOS FX covering the WireGuard and peering UDP ports, so allowing direct peering needs a user-defined service. Predefined service names are category-prefixed — internet.https and standard.dns, not HTTPS and DNS.

The connection between the container network object and the Internet object must masquerade the container side (natactive: "left"). The Docker subnet is not routable upstream, so without it packets leave with a private source address and nothing returns.

Troubleshooting

The asset never appears in the console. The container cannot reach the API. Check the outbound rule for the Docker network, and read the container log via GET /api/docker/container-logs/{uniqueId}.

The asset registers but does not come Online. Usually the tunnel cannot establish. Check that outbound UDP is permitted, and look in the container log for bind or relay errors.

The container was updated and lost outbound access. Recreating a container gives it a new virtual interface. Firewall rules bound to the previous one no longer match, and a device restart does not repair it — only a configuration apply re-renders them. Roll the configuration out again after any container update.

The agent's own log is written inside the container to /etc/XplicitTrust/logs/xtna-service.log, which is on the volume and therefore survives a restart.

Consult the FAQ to learn more about troubleshooting firewalls.