Ubuntu Ethernet Login Page Not Loading Inside Docker

Debugging why the IITJ ethernet login page refused to load inside Docker containers.

·November 2, 2025·updated August 30, 2026·2 min read··view raw

Short answer: if your captive-portal login page never loads and the gateway is unreachable while the interface says Connected, a Docker bridge is probably squatting on the same subnet as the gateway. Linux prefers local routes, so packets go into the virtual bridge and never leave the machine. Confirm with ip route get <gateway-ip>, if it says dev docker0 instead of your ethernet interface, that's it. Move Docker to an uncommon range in /etc/docker/daemon.json:

{ "default-address-pools": [{ "base": "10.200.0.0/16", "size": 24 }] }

Then sudo systemctl restart docker. Full diagnosis below.


SymptomsCopied!

When connecting to campus ethernet, a login page (e.g. gateway.iitj.ac.in) normally opens for authentication.

On Ubuntu the interface shows Connected, but:

  • No websites load (even google.com)
  • Login page never appears
  • Browser shows ERR_ADDRESS_UNREACHABLE
  • Pinging the gateway returns Destination Host Unreachable

Root CauseCopied!

Linux always prefers local routes over default routes. If Docker/VPN creates a bridge using the same subnet as your campus gateway, the OS thinks the gateway is local and sends packets into that virtual bridge instead of the real network.

Result: No packets reach the gateway to captive portal never loads.

DiagnosisCopied!

First, check where the gateway IP is being routed:

getent hosts gateway.iitj.ac.in
ip route get <gateway-ip>

If the route shows something like:

dev docker0
dev br-xxxx
dev tailscale0

instead of your ethernet interface (e.g., enpXsY), then traffic is being captured by a local virtual network instead of the real gateway.

Common CausesCopied!

  • Docker default bridge (172.17.0.0/16)
  • Docker Compose networks
  • Old/stale Docker bridges
  • VPNs (Tailscale, etc.) adding routing rules
  • Any local subnet overlapping the campus network

Example of a broken route:

172.17.0.3 dev docker0 src 172.17.0.1
Packets never leave your laptop.

Solution: Move Docker Away from Common Private RangesCopied!

Step 1: Edit Docker daemon configCopied!

sudo nano /etc/docker/daemon.json

Use a safe, uncommon subnet:

{
  "default-address-pools": [
    {
      "base": "10.200.0.0/16",
      "size": 24
    }
  ]
}

Step 2: Restart DockerCopied!

sudo systemctl restart docker

Step 3: Recreate Compose networks (important)Copied!

Old networks keep old subnets. Remove them:

docker compose down
docker network prune -f

Then start again:

docker compose up -d

Step 4: Delete any stale bridges (if still present)Copied!

ip a | grep br-
sudo ip link delete br-xxxx

VerificationCopied!

Check that the route now points to your ethernet interface:

ip route get <gateway-ip>

It should now show:

via <ethernet-gateway> dev enpXsY
If it routes through ethernet, the login page will load.

TakeawayCopied!

If an intranet/login page shows unreachable on Ubuntu:

  1. Resolve the gateway IP
  2. Run ip route get <ip>
  3. Check for Docker/VPN/bridge conflicts
It's almost always a routing issue, not DNS or the browser.
Comments