Skip to main content

Network Setup

Your PCS needs a stable internet connection to serve apps to users. This guide explains how networking works and how to troubleshoot common network issues.

How Your PCS Connects

Your PCS uses several networking layers:

  1. Your internet connection — The PCS connects through your ISP.
  2. NSL.SH routing — Yundera's mesh network routes yourdomain.nsl.sh to your PCS's public IP.
  3. Caddy reverse proxy — Caddy runs on the PCS and routes incoming requests to the correct app container based on the subdomain.
  4. Docker networking — Each app runs in its own Docker container with isolated networking.

Port Requirements

Your PCS needs these ports accessible from the internet:

PortPurposeRequired?
443HTTPS — all web trafficYes
80HTTP — redirects to HTTPSRecommended
22SSH — remote admin accessOptional (only for remote SSH)

How to Check if Ports Are Open

From the Admin Panel → Terminal:

# Check if port 443 is listening
sudo ss -tlnp | grep 443

# Test external access (from another machine)
curl -I https://yourdomain.nsl.sh

Port Forwarding (Home Network)

If your PCS is behind a home router, you need to forward ports to it:

Step-by-Step

  1. Find your PCS's local IP — From Terminal: ip addr show | grep inet
  2. Log into your router — Usually at 192.168.1.1 or 192.168.0.1
  3. Find Port Forwarding settings — Often under "Advanced", "NAT", or "Virtual Servers"
  4. Add rules:
    • External port 443 → Internal IP <PCS local IP> port 443
    • External port 80 → Internal IP <PCS local IP> port 80
  5. Save and apply

Static IP / DHCP Reservation

To prevent your router from assigning a different IP to your PCS:

  1. Find the PCS's MAC address from Terminal: ip link show
  2. In your router's DHCP settings, create a reservation binding that MAC address to a fixed local IP.

ISP Restrictions

Some ISPs restrict or block hosting on residential connections.

Common ISP Issues

IssueSymptomSolution
Port 443 blockedCan't access PCS externallyUse Cloudflare proxy (hides your real port)
Port 80 blockedLet's Encrypt can't issue certificatesUse Cloudflare for HTTPS termination
CGNAT (Carrier-Grade NAT)No public IP assignedContact ISP for a public IP, or use Cloudflare Tunnel
Dynamic IPPCS becomes unreachable after IP changePCS self-check detects new IP automatically. Runs nightly and on reboot.

How to Detect CGNAT

From Terminal:

# Check your public IP
curl -s ifconfig.me

# Check your router's WAN IP
# If these are different, you're behind CGNAT

If your router's WAN IP is in the 100.64.x.x range, you're behind CGNAT and need to contact your ISP or use a tunnel.

Cloudflare as a Network Solution

Cloudflare can solve most ISP-related networking issues:

Cloudflare Proxy Mode

When you set up a custom domain with Cloudflare proxy mode (see Custom Domain):

  • Traffic goes: User → Cloudflare → Your PCS
  • Your real IP is hidden
  • Cloudflare handles DDoS protection
  • Works even if your ISP blocks port 80 (Cloudflare connects on 443)

Cloudflare Tunnel (Advanced)

If you're behind CGNAT or have severe ISP restrictions, Cloudflare Tunnel creates an outbound connection from your PCS to Cloudflare, eliminating the need for any port forwarding:

  1. Sign up for Cloudflare Zero Trust (free plan available)
  2. Install cloudflared on your PCS
  3. Create a tunnel that maps your domain to localhost:443
  4. No port forwarding or public IP needed

Dynamic IP Handling

Most home internet connections have dynamic IPs that change periodically. Your PCS handles this automatically:

  1. Nightly self-check detects the current public IP.
  2. If the IP changed, the PCS updates the NSL.SH routing.
  3. The sslip.io domain also updates automatically since it's IP-based.

If you need faster detection:

  • Go to Admin Panel → Health and click Run now to trigger an immediate self-check.
  • After a reboot, the @reboot self-check runs automatically.

Bandwidth Considerations

How Much Bandwidth Do You Need?

Depends on your usage:

Use CaseRecommended Bandwidth
Documentation site / blog5 Mbps upload
Personal cloud (files, notes)10 Mbps upload
Photo gallery (Immich)20 Mbps upload
Media streaming (Jellyfin)30+ Mbps upload per concurrent stream

Checking Your Bandwidth

Use the built-in speed test:

  1. Go to Admin Panel → Resources → Network tab.
  2. Click Run network speed test.
  3. Review download and upload speeds.

DNS Configuration

NSL.SH Domains

For .nsl.sh domains, DNS is managed automatically by Yundera. You don't need to configure anything.

SSLIP.IO Domains

The <ip>.sslip.io domain is an IP-based wildcard DNS service. It resolves automatically based on the IP in the domain name. No configuration needed.

Custom Domains

For custom domains, see the detailed setup in Custom Domain and Admin Panel → Domain.

Network Troubleshooting

Quick Checks from Terminal

# Check internet connectivity
ping -c 3 8.8.8.8

# Check DNS resolution
nslookup yourdomain.nsl.sh

# Check if Caddy is running
docker ps | grep caddy

# Check Caddy logs for errors
docker logs caddy --tail 50

# Check current public IP
curl -s ifconfig.me

# Check listening ports
sudo ss -tlnp | grep -E '(80|443)'

For more network issues, see Troubleshooting.