Internal DNS

Access team services by name. Simple and easy to remember.

Simple Names

Access services with easy names like api.internal:8080.

Using Internal DNS

Automatic Setup

Internal DNS is automatically configured when you connect. No extra steps needed.

Accessing Services

Once connected, access team services by name:

# Database
psql -h database.internal -U postgres

# API server
curl http://api.internal:8080/health

# Web app
open http://frontend.internal:3000

# SSH (if exposed)
ssh [email protected]

DNS Name Patterns

Simple Names

Each service gets a service.internal name:

  • database.internal
  • api.internal
  • frontend.internal

Team-Qualified Names

For disambiguation, you can also use team-qualified names:

api.acme-dev.internal
database.acme-dev.internal

Useful if you're connected to multiple teams (future feature).

Name Requirements

Service names must be valid DNS labels:

  • 3-30 characters
  • Lowercase letters, numbers, hyphens
  • Start with a letter
  • No spaces or special characters
Choose good names

Pick descriptive names like postgres-main or redis-cache. Other team members will thank you.

Viewing Team Services

See all services and their DNS names in the team dashboard at /team/your-team/services.

Troubleshooting

DNS not resolving

  1. Check the app is connected (green indicator)
  2. Try flushing DNS cache:
    • macOS: sudo dscacheutil -flushcache
    • Windows: ipconfig /flushdns
    • Linux: sudo systemd-resolve --flush-caches

Comparison with Tailscale MagicDNS

Feature VendTunnel Tailscale MagicDNS
Name format service.internal device.tailnet.ts.net
Setup Automatic Enable in admin
Custom names You choose service name Device hostname
External DNS Forwarded to 8.8.8.8 Forwarded to ISP

Benefits

Easier to Remember

database.internal is easier to remember and type.

Stable Names

If someone rejoins with a different IP, their service name stays the same. Update configs automatically.

Self-Documenting

Looking at curl http://auth-service.internal/login tells you exactly what it does.

Config Portability

Application configs using internal DNS names work regardless of IP assignments.

Example: Docker Compose

Use internal DNS in your docker-compose.yml:

docker-compose.yml
services:
  web:
    image: myapp
    environment:
      DATABASE_URL: postgres://user:[email protected]:5432/mydb
      REDIS_URL: redis://cache.internal:6379
      API_URL: http://api.internal:8080

When connected to the team network, these all resolve correctly.

Next Steps

Create a Team

Set up your private network with internal DNS.

Create team →

Team Documentation

Learn more about team networking features.

Teams docs →