Endpoints
An endpoint is a single network device tracked by Taranac, keyed on its MAC address. Endpoints are the central objects of network access control: they are discovered (or added by hand), classified into one or more endpoint groups, and those groups become the conditions your NAC policies match on. A printer that lands in the Printers group can be put on the printer VLAN; a personal phone in BYOD can be given restricted access; an unrecognised device in Unclassified can be denied or quarantined.
- IoT / Sensors vendor_name Raspberry Pi*
- Printers vendor_name Canon*
- Building A oui_prefix DC:A6:32
This page covers how endpoints appear in Taranac, how classification rules sort them into groups, the OUI vendor database that powers vendor matching, and the day-to-day admin actions — adding a device by hand, block, and reassign.
Key concepts
Section titled “Key concepts”| Term | What it means |
|---|---|
| Endpoint | A device identified by a unique, normalised MAC address (AA:BB:CC:DD:EE:FF). Carries vendor, hostname, last-seen time, certificate identity and more. |
| Endpoint group | A named collection of endpoints (e.g. Printers, Corporate Devices). Used as a NAC policy condition. An endpoint can be in several groups at once. |
| Classification rule | A condition attached to a group (vendor, OUI prefix, MAC pattern, certificate, hostname, or the machine’s place and group membership in a directory). Any matching endpoint is auto-assigned to that group. |
| OUI database | A local copy of the IEEE registry mapping MAC prefixes to manufacturers. Drives the vendor field and vendor_name/oui_prefix rules. |
| Status | Lifecycle state: known, unknown, blocked, inactive. |
| Persistence type | static (pinned, never auto-removed), dynamic (auto-discovered, subject to cleanup), or guest (from a captive portal). |
Status and persistence
Section titled “Status and persistence”status reflects where the endpoint sits in its lifecycle:
known— recognised and classified into at least one group.unknown— seen on the network but not yet matched by any rule; waiting inUnclassified.blocked— denied by an administrator (authentication is rejected).inactive— not seen for a long time; hidden from lists by default.
persistence_type decides whether automatic cleanup may ever remove the endpoint:
static— added manually, imported by LDAP computer sync, or pinned. Never auto-deleted.dynamic— discovered automatically (RADIUS, certificate). Eligible for cleanup once inactive.guest— created through a guest captive portal. Cleaned up after the guest session expires.
How endpoints are discovered
Section titled “How endpoints are discovered”Taranac populates the endpoint table from several built-in sources. Each source it has seen the device through is recorded as a separate discovery record under the endpoint, so you can tell why and how a device is known.
| Source | What it contributes |
|---|---|
| RADIUS | First-seen MAC during 802.1X / MAB authentication, plus NAS IP, port and auth method. Creates a dynamic endpoint. |
| Certificate (EAP-TLS) | On every EAP-TLS authentication the certificate CN / DNS SAN, issuer, serial and type (machine vs user) are captured. Updates cert_identity, cert_issuer, hostname and auth_type_last. |
| LDAP computer sync | Imports directory computer objects as static endpoints — from Active Directory, FreeIPA, OpenLDAP or a generic LDAP tree (since 1.2.7; before that, Active Directory only). FreeIPA and OpenLDAP publish a machine’s MAC in the directory, so a computer becomes an endpoint on its first sync. Active Directory has no standard attribute for one, so its computers are held as Pending Computers and bound to a real endpoint on their first machine-certificate authentication, matched by hostname. |
| Manual | Devices you add by hand. Always static. |
| OUI database | Not a device source — it enriches every endpoint with a vendor name from the MAC prefix. |
The OUI prefix is derived from the MAC — the first three bytes — when the endpoint is created, and the MAC is immutable afterwards: it is the endpoint’s identity, which is why no form offers to edit it. The vendor name is looked up in the OUI database when a device is discovered, and again by classification whenever a rule needs a vendor and the stored row does not carry one.
The endpoints list — MAC, name, status, persistence, groups, vendor, IP, hostname, last seen and Used by. Columns can be hidden and their borders dragged; every list remembers its own widths in the browser.
Used by on an endpoint is informational: it lists the groups the device is in, and deleting the endpoint simply removes those memberships. On an endpoint group the same column can block a delete — see endpoint groups.
Endpoint groups
Section titled “Endpoint groups”Groups are how you organise endpoints into policy-relevant buckets. Taranac ships with a set of seed groups so the system is useful on day one.
Two groups are system groups and cannot be deleted:
- Unclassified — where every new endpoint lands until a rule matches it.
- Blocked — blocked endpoints.
The rest are ordinary, editable seed groups: Corporate Devices, BYOD, Printers, IP Phones, IoT / Sensors, Security Cameras, and Guest Devices. Each carries a colour and icon for the UI, and you can create your own (for example, a per-location Building A group).
Because an endpoint can belong to multiple groups at once, you can classify along several independent axes — device type and location and access tier — without the groups fighting each other.
Endpoint groups — system groups (Unclassified, Blocked) plus editable seed groups, each with a member count and a Used by count. Re-apply rules runs classification over every endpoint without waiting for them to authenticate again.
Deleting a group
Section titled “Deleting a group”A group is not deleted out from under the things that name it. Two checks run before the row goes:
- It must be empty. A group that still has members is refused, and the message says how many. Empty it from the group’s own Members panel first. If the members are there because a rule put them there, delete the rule too, or the next classification pass puts them straight back.
- Nothing may depend on it. The Used by column shows where the group is referenced, and a group used as the
WHATcondition of a NAC policy rule cannot be deleted at all: the refusal names the rules instead of failing with a database error. A captive portal that assigns endpoints to the group is listed too, but does not block — deleting the group just clears the portal’s target.
System groups (Unclassified, Blocked) have no delete action at all.
Classification rules
Section titled “Classification rules”A classification rule lives on a group and says: any endpoint matching this condition belongs in this group. Taranac evaluates rules with all-matches semantics — there is no priority and no “first match wins”. Every enabled rule that matches fires, and the endpoint joins every group whose rule matched. If nothing matches, the endpoint stays in Unclassified.
This is deliberate: you never have to reason about a global ordering of all rules across all groups to predict where a device lands. Rules are independent.
Match types
Section titled “Match types”| Match type | Matches against | Example value | Notes |
|---|---|---|---|
exact_mac | The full MAC | AA:BB:CC:DD:EE:FF | Case-insensitive exact match. |
oui_prefix | First 3 bytes of the MAC | DC:A6:32 | Exactly three bytes (e.g. all Raspberry Pi devices). |
mac_pattern | Start of the MAC | 00:1A | Case-insensitive “starts with”, any length — so it can be broader or narrower than a fixed OUI prefix. Not a wildcard pattern despite the name. |
vendor_name | The resolved vendor string | Hewlett Packard* | Case-insensitive. Glob when * ? [ are present, otherwise a substring (see below). |
cert_issuer | The endpoint’s certificate issuer | (a CA, picked from a list) | The value is a CA reference; the issuer DN is compared after normalisation. |
cert_identity_pattern | Certificate CN / DNS SAN | *.taranac.pro | Glob when * ? [ are present, otherwise a substring (see below). Cryptographically trustworthy. |
hostname_pattern | The endpoint hostname | PC-* | Glob when * ? [ are present, otherwise a substring (see below). Useful for devices without certificates, but less reliable (hostname is not cryptographic). |
ldap_dn | Where the machine’s object sits in the directory | (a container, picked from the tree) | Since 1.2.7. The chosen container and everything below it. Compared component by component, never as a substring. |
ldap_group | The directory groups the machine belongs to | (a group, picked from the tree) | Since 1.2.7. Stores the group’s immutable identifier, so renaming or moving the group does not break the rule. Nested membership counts. |
For vendor_name and oui_prefix, the rule form offers a searchable picker backed by the OUI database, so you can find a manufacturer or prefix without typing it from memory and see how many MAC prefixes a vendor owns. For cert_issuer, you pick a CA from a list rather than typing a DN. For the two directory types, the form browses the directory itself — see directory-based classification.
Certificate-based classification
Section titled “Certificate-based classification”When a device authenticates with EAP-TLS, Taranac extracts the certificate issuer and identity from the RADIUS exchange and runs classification immediately — the device is sorted into the right group as an in-memory decision on its very first authentication, without waiting on any database write. The resulting endpoint and certificate record are then persisted off the authentication path: the write is enqueued to an async writer and lands on the next cache refresh, so the auth reply is never held up by a database write (this also keeps authentication answering from cache during an HA failover). Classification is therefore effective at authentication time, even though the stored row appears a moment later. On later, non-TLS authentications, the stored certificate data is reused.
For cert_issuer rules, the CA you selected is resolved to its subject DN and compared to the endpoint’s issuer using DN normalisation, so both OpenSSL one-line form (/DC=pro/DC=taranac/CN=Root CA) and RFC 2253 form (CN=Root CA,DC=taranac,DC=pro) compare equal. If the CA is later disabled or deleted, the rule stops matching.
Directory-based classification
Section titled “Directory-based classification”Two match types read the directory rather than the wire: ldap_dn asks where the machine’s object sits, ldap_group asks which groups it is in. Between them they replace the hand-maintained list — “every machine under OU=Workstations gets this profile” — that had no expression before 1.2.7.
Both need the machine’s endpoint to be linked to a directory object, which is what computer sync does. ldap_group additionally needs Group membership switched on for that connection; a directory that does not collect it can never satisfy such a rule, and the rule form says so instead of saving something that would silently never fire.
An ldap_dn rule being written. The directory comes before the value on purpose: it decides which tree the picker walks, so choosing it second would mean picking a DN out of one directory and then pointing the rule at another.
Every directory rule names its directory. With more than one forest joined, the same DN exists in several of them, and an unscoped rule is how a machine from one domain lands in a group written for another with nobody finding out. The form’s directory list offers the connections that have computer sync enabled, and offers no “any directory” option — two forests that want the same thing get two rules.
Matching on the machine’s location (ldap_dn)
Section titled “Matching on the machine’s location (ldap_dn)”The value is a container, chosen from the directory tree, and the rule covers that container and its whole subtree. Matching compares DN components, not characters: a rule for OU=Computers does not also capture OU=Computers-Test, which a plain “ends with” would have done — quietly widening every rule you write. Spacing and letter case in the DN do not matter, since directory tools copy DNs in more than one style.
The picker deliberately offers containers only, never an individual computer, although a rule holding one machine’s full DN would work:
- A container with thousands of machines makes an unusable tree to pick one from.
- A DN naming a machine stops matching the moment that machine is renamed or moved — silently.
exact_macsays the same thing and never breaks. - Only the first network card to authenticate is bound to the directory object, so a per-machine DN rule would miss a laptop’s second interface and look like a product defect.
Matching on group membership (ldap_group)
Section titled “Matching on group membership (ldap_group)”The rule stores the group’s immutable identifier, not its name and not its DN — either of those would stop matching the day somebody renames or moves the group, and stop silently, since the rule would still be perfectly valid. You never see or type that identifier: the picker browses the directory and shows DNs, and the rule form translates back when it displays a saved rule.
The picker browses the directory live rather than listing the groups already collected, so you can write a rule for a group no machine has joined yet — otherwise you could only ever react to a rollout, never prepare for one. A group that has not yet been seen by a sync is shown as exactly that, not as an error.
Nesting is resolved when membership is imported, not while matching: the endpoint holds a flat set of groups, so a rule written against an outer group matches a machine that is only a direct member of an inner one. How each directory type answers the membership question — and why Active Directory’s primary group is invisible to it — is covered in LDAP directories.
When a rule does not fire and you want to know why, open the endpoint and expand its LDAP discovery record: it lists every group the directory reports for that machine, not only the ones some rule happens to name — which is a different question from “what did the rules do”, and the one you actually need answered. An empty list is an answer too: either the machine is in no group, or membership collection is off for that directory. Machines still waiting in Pending Computers have no endpoint to hang membership on, so they have no groups either.
Re-applying rules after something changes in the directory
Section titled “Re-applying rules after something changes in the directory”MAC addresses and vendors never change while a device is connected; an OU or a group does. Classification therefore no longer runs only at authentication:
- a pass over the affected directory runs automatically after each computer sync;
- Re-apply rules on the Endpoint Groups page runs one on demand, after you edit a rule.
An endpoint that gets its directory data late is handled without a pass: on Active Directory, where a pending computer is bound to an endpoint only when the machine authenticates by certificate, that binding re-runs classification with the DN it has just written — so a ldap_dn rule fires on that first authentication instead of waiting for the next one.
A pass checks every endpoint against every enabled rule and updates only rule-assigned membership. Groups you assigned by hand are left alone, and rule hit counters are not touched — the “is this rule doing anything?” signal would drown in a bulk pass.
Seed rules
Section titled “Seed rules”Out of the box Taranac seeds vendor-based rules so common devices classify themselves:
| Group | Match type | Value |
|---|---|---|
| Printers | vendor_name | Hewlett Packard*, Hewlett-Packard*, Canon*, Epson*, Xerox*, Brother* |
| IP Phones | vendor_name | Polycom* |
| Security Cameras | vendor_name | Hikvision*, Dahua* |
| IoT / Sensors | vendor_name | Raspberry Pi*, Espressif* |
Testing rules before you trust them
Section titled “Testing rules before you trust them”Taranac includes a classification tester, which shows exactly which groups a device would join and which rules fired — grouped by target group, with no side effects. It runs in one of two modes, and the choice matters more than it looks:
The tester’s two modes. Each field states which match types it exercises, so an empty one is a rule the test is not covering rather than a rule that failed.
A hypothetical device. You supply every fact yourself: a MAC, and optionally a vendor override, certificate identity, certificate issuer, hostname, or a directory DN and the directory it belongs to. This answers “would a device like this match?”.
MAC: 80:5E:C0:11:22:33Vendor: (auto-resolved from OUI, or override here)Cert identity: PC-LAB1.taranac.proHostname: PC-LAB1Directory DN: CN=PC-LAB1,OU=Workstations,DC=corp,DC=localDirectory: corp (the connection the DN belongs to)An existing endpoint. You pick one endpoint and the server reads every fact from the stored record. This answers the question people actually ask — “why is this machine not in the group?” — which the hypothetical mode structurally cannot: it only ever confirms what you typed into it, and will not tell you that the endpoint has no directory DN yet, or that its computer object is still sitting in the pending table. Group-membership (ldap_group) rules can only be exercised this way, since membership is imported, not typed.
The two modes are mutually exclusive; mixing an endpoint with hand-typed facts is refused rather than silently resolved one way or the other.
The OUI database
Section titled “The OUI database”The OUI database is a local copy of the IEEE MA-L registry — roughly 35,000 MAC-prefix-to-manufacturer mappings. It does two jobs: it fills in the vendor name on every endpoint, and it powers vendor_name and oui_prefix classification rules and their search pickers.
- First start — Taranac tries to download the registry from IEEE, and falls back to a bundled snapshot if IEEE is unreachable, so vendor lookups work even offline.
- Weekly refresh — an automatic weekly sync from IEEE keeps it current (controlled by the
nac.oui_auto_updatesetting). - Manual refresh — you can trigger an update from IEEE on demand. If IEEE is temporarily unavailable the request fails cleanly and the existing data is left intact.
Common scenarios
Section titled “Common scenarios”Auto-VLAN printers. Leave the seed Printers rules in place (HP, Canon, Epson, Xerox, Brother). Any printer from those vendors classifies into Printers on first sight; point your NAC policy for the Printers group at the printer VLAN. New printers from a vendor not yet covered: add one vendor_name rule.
Corporate machines by certificate. Issue machine certificates from your internal CA and add a cert_issuer rule on Corporate Devices selecting that CA. Every domain machine that authenticates with EAP-TLS lands in Corporate Devices on its first authentication — far stronger than matching by MAC, which can be spoofed.
BYOD by certificate identity or hostname. A cert_identity_pattern of *.byod.corp.local, or a hostname_pattern like IPHONE-*, can funnel personal devices into BYOD for a restricted access profile.
Cameras and IoT segmentation. The seed Security Cameras (Hikvision, Dahua) and IoT / Sensors (Raspberry Pi, Espressif) rules give you ready-made groups to drop onto isolated segments.
Machines by where they live in the directory. Add an ldap_dn rule on Corporate Devices pointing at OU=Workstations and every machine below it classifies automatically — including machines moved into that OU later, once the next computer sync or Re-apply rules runs. Add a second rule for OU=Kiosks on a locked-down group and the two stay separate without a single MAC being typed.
Machines by a group you already maintain. If your directory already has a Lab-Machines host group, an ldap_group rule on it means the access profile follows the group: add a host to the group in the directory, and Taranac follows on the next sync. Turn on Group membership for that connection first.
Location plus type. Create a Building A group with an oui_prefix or mac_pattern rule, and keep the type-based groups too. A camera in Building A ends up in both Security Cameras and Building A — match either or both in policy. This is exactly what all-matches semantics enables.
When to use which match type
Section titled “When to use which match type”| Goal | Best match type | Why |
|---|---|---|
| All devices from a manufacturer | vendor_name | Survives MAC churn; one rule covers every prefix the vendor owns. |
| One specific hardware family / model run | oui_prefix | A single 3-byte prefix, more precise than a broad vendor name. |
| A custom MAC range you assign | mac_pattern | Flexible-length “starts with”; good for self-assigned ranges. |
| One known device | exact_mac | Pin a single, important device to a group. |
| Trustworthy corporate identity | cert_issuer | Cryptographic — cannot be spoofed by changing a MAC. |
| Per-machine / per-domain certificate identity | cert_identity_pattern | Glob on the cert CN/SAN; cryptographic. |
| Devices with no certificate | hostname_pattern | Last resort; convenient but spoofable. |
| Every machine in an OU or container | ldap_dn | Follows the directory’s own structure; one rule covers the whole subtree, and moving an object moves the endpoint with it. |
| Machines your directory already groups | ldap_group | Reuses group membership you maintain anyway, including nested groups, and survives the group being renamed. |
Managing endpoints
Section titled “Managing endpoints”Adding endpoints by hand
Section titled “Adding endpoints by hand”You can create an endpoint manually by entering its MAC, an optional name and description, and the groups it should join. Manually created endpoints are static, so they are never cleaned up automatically. Manual creation assigns only the groups you choose — it does not run classification rules — so pick the groups explicitly.
Quick actions
Section titled “Quick actions”Each endpoint offers one-click actions:
| Action | Effect |
|---|---|
| Block | Sets status to blocked; the device is rejected on its next authentication (and any live sessions are torn down via CoA where supported). |
| Unblock | Returns status to known. |
| Pin | Promotes dynamic → static so cleanup never removes it. |
| Unpin | Returns static → dynamic. |
| Reassign | Replaces the endpoint’s entire set of group memberships with the set you supply. Submitting an empty set removes it from all groups (back to Unclassified). |
Reassign is a replace-set operation: the list you submit becomes the complete membership. The server works out which memberships to add and which to drop, and records the change in the audit log. All quick actions are idempotent.
The same operations are available in bulk over a selection of endpoints — bulk delete, bulk block, bulk pin, and bulk reassign.
Reference: endpoint fields
Section titled “Reference: endpoint fields”| Field | Meaning |
|---|---|
mac_address | Unique device identity, normalised to upper-case AA:BB:CC:DD:EE:FF. |
name / description / notes | Optional admin-supplied labels. |
status | known, unknown, blocked, inactive. |
persistence_type | static, dynamic, guest. |
discovery_type | How first discovered. Written today: manual, radius, ldap. Accepted but not yet produced: csv_import, dhcp, snmp, syslog. |
vendor / oui_prefix | Manufacturer and 3-byte prefix, auto-filled from the OUI database. |
hostname | From LDAP, certificate, or other source; refreshed from the cert CN/SAN on each EAP-TLS authentication. |
ip_address | Last known IP. |
cert_identity / cert_issuer | CN/DNS SAN and issuer DN from the last machine certificate. |
auth_type_last | Last authentication method: eap_tls, peap, eap_ttls, mab. |
ldap_dn / ldap_guid / ldap_config_id | The directory object this machine is bound to, its immutable identifier, and which connection it came from. Filled by computer sync, or when a pending computer is matched by certificate. Read by ldap_dn rules. |
ldap_synced_at | When the directory data was last refreshed. |
| Directory groups | The groups the machine belongs to, transitively, imported when Group membership is on for its connection. Shown under the endpoint’s LDAP discovery record and read by ldap_group rules. Kept apart from Taranac’s own groups, which mirror the directory’s user groups and carry RBAC roles; this list decides nothing on its own. |
last_seen_at | Last activity; drives the inactive lifecycle. |
Related
Section titled “Related”- NAC overview — where endpoints fit in the access-control flow.
- Policy — using endpoint groups as authorisation conditions.
- Authentication — the 802.1X / MAB / EAP-TLS flows that discover endpoints.
- Captive portal — guest and BYOD registration that creates endpoints.
- PKI — the CAs referenced by
cert_issuerclassification rules. - LDAP directories — computer sync and group membership, the source of
ldap_dnandldap_groupmatching. - Deployment bundle & docs: github.com/TaranacLabs/taranac