Files
vps/docs/unifi-network.md
T

5.3 KiB

UniFi network configuration

Controller

Item Value
Host ubnt
Address 192.168.66.46
Deployment Docker, jacobalberty/unifi:v9.5.21, host networking
Inform endpoint http://192.168.66.46:9080/inform
MongoDB database / port ace / 27117

Although 8080 is a common UniFi inform port, this controller uses 9080. All AP adoption and recovery procedures must use the endpoint above.

Login and MFA

On 2026-08-08, "Sync Local Admin with Ubiquiti SSO" was disabled (super_sdn.sso_login_enabled: false). Previously every login was forced through Ubiquiti SSO (sso.ui.com) and required MFA, which blocked programmatic access: the unifi-network-mcp write operations failed with api.err.Ubic2faTokenRequired.

Now local accounts (windy, zhiqiangf) sign in with their local passwords and no MFA. The unifi-network-mcp tool uses the zhiqiangf local account and works for both read and write operations (verified 2026-08-08 with a reversible client rename).

Impact: unifi.ui.com remote access (Site Manager) no longer works.

Manage the setting idempotently via Ansible:

cd ansible
ansible-playbook playbooks/unifi-sso.yml --limit unifi --check   # read-only
ansible-playbook playbooks/unifi-sso.yml --limit unifi \
  -e '{"unifi_sso_confirm": true, "unifi_sso_target_value": false}'  # apply

See runbooks/ansible-operations.md.

Inter-VLAN reachability

The AP management networks are routed by gw, 192.168.66.254. On 2026-08-05, a probe sourced from the LAN55 gateway (192.168.55.254) reached the controller (192.168.66.46) with 3/3 ICMP replies. The UAP-AC-Lite is online through the :9080/inform endpoint, which also confirms the required application path in practice.

LAN_IN contains explicit allow rules for 192.168.55.0/24 ↔ 192.168.66.0/24, but the firewall set is currently inactive (not attached to an interface). Treat the networks as bidirectionally reachable by default; do not rely on those inactive rules as an access boundary. Recheck this after attaching any LAN firewall policy or changing VLAN routing.

To inspect device records from the controller host:

docker exec -it unifi-controller bash
mongo --port 27117
use ace
db.device.find(
  { type: "uap" },
  { name: 1, ip: 1, model: 1, inform_url: 1 }
).pretty()

Managed access points

Name Model Management IP Firmware Management network Inform port
U6 Lite U6 Lite (UAL6) 192.168.66.6 6.7.54.15663 LAN66 (192.168.66.0/24, gateway 192.168.66.254) 9080
UAP-AC-Lite U7LT 192.168.55.5 6.8.2.15592 LAN55 (192.168.55.0/24, gateway 192.168.55.254) 9080

AP MAC addresses are recorded only where operationally needed: U6 Lite 78:45:58:4d:cc:30; UAP-AC-Lite f0:9f:c2:20:04:e9.

SSH administration

Adopted APs use the SSH account configured in the controller, rather than the factory ubnt/ubnt credential. The password is stored in the password manager and must not be added to this repository.

In UniFi Network 9.5.21, configure it at:

Devices → Device Updates and Settings → Device SSH Settings
→ Device SSH Authentication

Use ssh zhiqiangf@AP_IP for the adopted-device account. Do not query or copy the controller's mgmt database setting into logs or documentation: it can contain the managed SSH password.

On 2026-08-06, key-only IPv4 SSH was verified for both managed APs using the zhiqiangf account. Verify future access without permitting password or keyboard-interactive fallback:

ssh -4 -o BatchMode=yes -o PasswordAuthentication=no \
  -o KbdInteractiveAuthentication=no -o StrictHostKeyChecking=yes \
  zhiqiangf@192.168.66.6 'mca-cli-op info'
ssh -4 -o BatchMode=yes -o PasswordAuthentication=no \
  -o KbdInteractiveAuthentication=no -o StrictHostKeyChecking=yes \
  zhiqiangf@192.168.55.5 'mca-cli-op info'

Both devices reported Connected to http://192.168.66.46:9080/inform during that verification. The AP shell maps this management account to UID 0, so treat it as administrative access.

Offline AP recovery

An AP can be reachable via ICMP and SSH but offline in the controller when its saved inform URL still points to port 8080. This occurred for UAP-AC-Lite after its inform configuration had diverged from the controller endpoint.

From the AP, inspect the active endpoint and test controller reachability:

info
nc 192.168.66.46 9080

The AP's BusyBox nc may not support -zv; use the plain nc invocation above when testing the TCP path.

If info reports http://192.168.66.46:8080/inform (or another obsolete endpoint), correct it. UniFi devices commonly require the command twice while adoption is completed:

set-inform http://192.168.66.46:9080/inform
set-inform http://192.168.66.46:9080/inform

Verify that the AP changes to connected/online in the controller.

Controller migration check

After a controller migration or restore, inspect stored device records for a stale default-port endpoint before treating an AP as faulty:

use ace
db.device.find(
  { inform_url: /8080/ },
  { name: 1, ip: 1, inform_url: 1 }
)

Do not include credentials or controller database dumps in incident notes.