Remote-Pulse Tailscale Tags Reference¶
Source: ADR-0008 Apéndice E
Last updated: 2026-05-25
Tag Assignments¶
| Tag | Group | Hosts (current) | Hosts (planned) | Purpose |
|---|---|---|---|---|
tag:rp-server |
(n/a) | rp-server (LXC 280 @ 192.168.0.196) | — | Remote-Pulse control plane |
tag:rp-agent-prod |
prod |
(TBD: pmx-50, pmx-51, select LXCs) | All homelab infra | Production homelab hosts |
tag:rp-agent-family |
family |
mac-mini-carmelo, openclaw-vm (live) |
Carmelo Mac mini, hermano laptop | Family member devices |
tag:rp-agent-iarq |
iarq |
(none) | iarq-rag, iarq-locator VMs | Client project hosts |
tag:rp-agent-default |
default |
(ninguno; MacBook Air de Ramon está sin tag) |
(transitional) | Testing/uncategorized hosts |
Group Definitions¶
Defined in Tailscale ACL groups section.
group:admins¶
- Members:
[email protected] - Permissions: Full access to all tags, all ports, SSH as root
- Use case: Infrastructure administration
group:family¶
- Members: (to be populated)
- Permissions: Access only to
tag:rp-agent-familyhosts, SSH as non-root - Use case: Family members managing their own devices
group:iarq¶
- Members: (to be populated)
- Permissions: Access only to
tag:rp-agent-iarqhosts - Use case: Client project separation
ACL Design Principles¶
- Default-deny: Only explicitly allowed src→dst pairs are accepted
- Lateral movement blocked: Agents cannot reach other agents
- Least privilege: Users/agents get minimum required access
- Group isolation: Family cannot reach prod, iarq cannot reach prod/family
- Admin escape hatch:
group:adminshas unrestricted access for troubleshooting
Changing a Host's Tag¶
If you need to move a host between groups:
ssh root@<host>
tailscale up --reset --advertise-tags=tag:rp-agent-<NEW-GROUP> --hostname=$(hostname -s)
Example: Move mac-ramon-test from default to prod:
ssh root@mac-ramon-test
tailscale up --reset --advertise-tags=tag:rp-agent-prod --hostname=mac-ramon-test
Note: --reset clears previous state. The host will re-authenticate with new tag.
Adding a New Tag¶
If you need a new group (e.g., tag:rp-agent-contractor):
- Edit
ansible/roles/remote_pulse_server/files/tailscale-acl-policy.hujson - Add to
tagOwners:"tag:rp-agent-contractor": ["[email protected]"], - Add to
groups(optional):"group:contractor": ["[email protected]"], - Add ACL rules (follow pattern of existing rules)
- Add test cases
- Validate with
scripts/validate-tailscale-acl.sh - Apply via runbook (
docs/runbooks/rp-tailscale-acl-apply.md)
Common Patterns¶
Pattern 1: Server reaches all agents¶
Pattern 2: Agents reach server (limited ports)¶
{
"action": "accept",
"src": ["tag:rp-agent-prod", "tag:rp-agent-family"],
"dst": ["tag:rp-server:443,8080"]
}
Pattern 3: Group isolation¶
SSH Access Matrix¶
| Actor | Destination | User | Result |
|---|---|---|---|
group:admins |
Any agent | root / non-root | ✓ Accept (check 12h) |
group:family |
tag:rp-agent-family |
non-root | ✓ Accept (check 24h) |
group:family |
tag:rp-agent-family |
root | ✗ Deny |
group:family |
tag:rp-agent-prod |
any | ✗ Deny |
tag:rp-agent-prod |
tag:rp-server |
any | ✗ Deny (agents cannot SSH to server) |
tag:rp-agent-iarq |
tag:rp-agent-prod |
any | ✗ Deny (lateral movement blocked) |
Note: "check" action = Tailscale SSH with passkey/MFA re-auth at specified interval.
Verifying Current Tags¶
Via Web UI¶
- Go to
https://login.tailscale.com/admin/machines - Find host in list
- Check "Tags" column
Via CLI (on host)¶
Via CLI (remote)¶
Troubleshooting¶
Tag not applying¶
- Check
tagOwnersin ACL includes your user email - Verify you're logged into Tailscale with correct account
- Try
tailscale up --reset(clears stale state)
Host not visible in group¶
- Confirm tag was applied:
tailscale status --json | jq .Self.Tags - Check ACL syntax is valid:
scripts/validate-tailscale-acl.sh - Wait ~30s for ACL propagation across tailnet
SSH rejected despite tag¶
- Verify Tailscale SSH is enabled on host:
tailscale up --ssh - Check ACL
sshsection includes rule for your src→dst pair - Confirm user is in correct group in ACL
References¶
- ADR-0008 Apéndice E (design rationale)
- ACL policy file:
ansible/roles/remote_pulse_server/files/tailscale-acl-policy.hujson - Application runbook:
docs/runbooks/rp-tailscale-acl-apply.md - Tailscale docs:
https://tailscale.com/kb/1068/tags