Guide

Access an IP Camera or NVR Without Port Forwarding

Do not forward a camera to the internet. It is the first answer most guides give and it is the one that gets people watched: cameras ship with default credentials, receive firmware updates rarely or never, and are indexed by search engines built specifically to find exposed devices. There are three safer ways to reach yours from outside, and for most people the best one is free. If you genuinely need a direct connection — because an NVR app demands one — that is the last option here, with the hardening that makes it defensible.

Why a camera is the worst thing to expose

Every device on a public address gets scanned. That is not a warning, it is an observation: across 141,348 requests to our own site we logged 6,985 hostile probes spanning 707 distinct paths — roughly one request in twenty — and that is a site with nothing interesting on it. A camera attracts the same traffic with three differences that matter:

Choosing an unusual port does not help. Scanners sweep the whole port range; they are not guessing 80 and giving up.

Option 1: a mesh VPN. Free, and what most people should do

If the people who need to see the cameras are you and your household — which is almost everyone — this is the right answer and it costs nothing.

Install Tailscale on any always-on machine on the same network as the cameras: a Raspberry Pi, a NAS, the NVR itself if it runs something you can install on. Then install it on your phone. Your phone joins a private network that includes the camera's LAN, and the camera's own web interface or app works exactly as it does at home.

# On the always-on Linux box that sits on the camera network.
# IP forwarding FIRST -- without it the subnet router comes up and
# silently carries no traffic.
echo 'net.ipv4.ip_forward = 1' | sudo tee /etc/sysctl.d/99-tailscale.conf
sudo sysctl -p /etc/sysctl.d/99-tailscale.conf

curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale set --advertise-routes=192.168.1.0/24   # your camera LAN

# On the phone or laptop:
sudo tailscale set --accept-routes

One step is easy to miss and is the usual reason this appears not to work: advertised routes must be approved in the Tailscale admin console before anything flows. The subnet router will report itself as up and healthy while carrying nothing at all until you approve the route there.

Nothing is exposed to the internet. The camera does not get an address, does not get scanned, and does not need a firmware update to be safe. We do not sell this and it is still what I would tell a friend to do.

Option 2: the vendor's own cloud

Most cameras ship with a phone app that works from anywhere without configuration. The camera dials out to the manufacturer's servers and your app connects through them, so nothing is exposed and CGNAT is irrelevant.

This is genuinely convenient and worth being clear-eyed about rather than sneering at. The trade is real, though, and it is not the one people assume:

If you use it, put a unique password and two-factor on that account and treat it as seriously as your email.

Option 3: a VPN on the router

If your router supports WireGuard or OpenVPN as a server, you can dial into your home network and reach the cameras as though you were on the sofa. Same security posture as option 1, no third-party service at all.

Two catches. It usually needs an inbound port, which means it needs a public address — so if you are behind CGNAT this option is unavailable for the same reason port forwarding is. And a router VPN is only as maintained as your router's firmware.

Option 4: a public address, when an app insists

Some NVR software and some professional monitoring setups genuinely require a reachable address: RTSP pulled by an external recorder, an integrator's system that will not traverse a mesh, a camera feed consumed by something outside your control.

That is the case a routable address solves, and it is what we sell, so weigh this section accordingly. A small daemon on a machine on the camera network holds a link to our network and we route a public IPv4 address to it. Any port works, and the address is not your home's.

Do not put the camera itself on that address. Put a machine you can actually maintain there — a Pi, a small server, the NVR if it runs a real operating system — and let it be the only thing reachable. The cameras stay on the private side where they belong.

If you are behind CGNAT, options 3 and 4 are the only ones that change

Carrier-grade NAT means your router does not hold a public address, so port forwarding and a router VPN are both off the table regardless of what the camera supports. Options 1 and 2 are unaffected, because both work by dialling outward. Run this on any Linux box on the network to check:

curl -s https://api.ipify.org; echo

Compare it with the WAN address in your router's admin page. If they differ, and the router's is between 100.64.0.0 and 100.127.255.255, that is the shared range reserved for carrier-grade NAT. The Raspberry Pi guide covers the check in more detail.

If anything of yours is reachable, harden it

Choosing, honestly

Get a public IP — $10/mo See all plans

Related