xcancel-forwarder

Local network tool that transparently redirects all X/Twitter traffic to xcancel.com, allowing you to browse Twitter content without directly accessing X's servers.


Project maintained by ryantenney Hosted on GitHub Pages — Theme by mattgraham

Frequently Asked Questions (FAQ)

Common questions about xcancel-forwarder setup, usage, and troubleshooting.

General Questions

Which DNS method should I choose?

If you already have Pi-hole: Use Pi-hole (easiest, 5 minutes)

If you want a dedicated DNS server: Use included dnsmasq (10-15 minutes)

If you can access your router settings: Use router DNS override (10 minutes, network-wide)

If you only need this on one device: Use hosts file (5 minutes per device, no Docker DNS needed)

See DECISION_GUIDE.md for detailed comparison and decision flowcharts.

Do I need to use HTTPS/SSL?

No, but it’s recommended.

Most links to Twitter/X use HTTPS, so SSL makes the experience smoother.

See SSL_SETUP_MKCERT.md for easy setup (10 minutes).

Will this slow down my browsing?

No, if set up on your local network.

xcancel.com itself may load slightly slower/faster than twitter.com depending on their servers, but the redirect is nearly instantaneous.

Can I use this on mobile devices?

Yes, mobile devices work great.

Options:

  1. Network-wide (Pi-hole/dnsmasq/router): Mobile automatically uses it on your Wi-Fi
  2. Per-device: Configure DNS on each mobile device in Wi-Fi settings
  3. SSL certificates: Must install CA certificate on mobile for HTTPS without warnings

See SSL_SETUP_MKCERT.md for iOS/Android CA installation.

What if I already have a reverse proxy (traefik/nginx-proxy-manager)?

You have several options:

  1. Run xcancel nginx on different ports: Use ports 8080/8443, configure your main proxy to forward twitter.com to these ports
  2. Add rules to existing proxy: Copy the redirect rules from nginx/conf.d/xcancel-redirect.conf into your existing nginx/traefik config
  3. Use Caddy instead: Simpler 4-line config, see CADDY_ALTERNATIVE.md

The key is: DNS points to your proxy, proxy issues 301 redirect to xcancel.com.

How do I undo this setup?

Reverse the DNS changes:

  1. Pi-hole: Remove DNS records from web UI
  2. dnsmasq: Stop container: docker compose stop dnsmasq
  3. Router: Remove static DNS entries
  4. Hosts file: Delete lines you added

Clear caches:

Stop nginx:

docker compose down

Everything reverts to normal immediately.

Why not just use browser extensions?

Browser extensions work great! This solution offers:

Advantages:

Disadvantages:

Use both: Browser extensions + network redirect provides redundancy and works everywhere.

Yes. This setup:

You’re simply choosing to view publicly available Twitter data through a different frontend. It’s like using a bookmark that points to xcancel instead of twitter.

What about rate limiting?

xcancel.com is not affiliated with this project. They may have rate limits or availability issues.

If xcancel is slow or unavailable:

This project just handles the redirect, not xcancel’s performance or availability.

Can I add other domains?

Yes, easily.

  1. Edit nginx/conf.d/xcancel-redirect.conf:
    • Add domain to server_name line
    • Optionally change redirect destination
  2. Update DNS configuration:
    • Add DNS override for new domain
  3. Update SSL certificate (if using HTTPS):
    • Add domain to mkcert command
    • Or add to OpenSSL SAN list
  4. Restart nginx:
docker compose restart nginx

See QUICK_REFERENCE.md for examples.

Technical Questions

Which is better: nginx or Caddy?

Both work identically for this use case.

Choose nginx if:

Choose Caddy if:

Performance is identical. See CADDY_ALTERNATIVE.md.

What’s the difference between bridge and macvlan networking?

Bridge (simpler):

Macvlan (recommended):

See QUICKSTART.md for setup instructions for each.

Why can’t I reach nginx from the Docker host with macvlan?

This is normal Docker behavior.

Macvlan creates network isolation - the Docker host and macvlan containers are on logically separate networks, even though they’re on the same physical LAN.

Test from another device on your network instead:

# From laptop/phone on same network
curl http://192.168.1.100

If you need host access: Use bridge networking instead of macvlan.

Do I need to renew SSL certificates?

Yes, eventually.

mkcert certificates:

Manual OpenSSL certificates:

Expired certificates cause browser warnings but redirect still works over HTTP.

Can this work with IPv6?

Yes, IPv6 is supported.

Requirements:

Most setups only need IPv4 since Twitter/X typically accessed via IPv4. See DNSMASQ_ADVANCED.md for IPv6 configuration.

What if xcancel.com goes offline?

The redirect still works, but:

Solutions:

  1. Wait: xcancel may come back online
  2. Switch frontend: Change redirect URL in nginx config to different Twitter frontend (nitter, etc.)
  3. Temporarily disable: Stop nginx to access Twitter directly

How much bandwidth/resources does this use?

Minimal:

Actual content loads from xcancel.com, not through your server.

Can I run this on a Raspberry Pi?

Yes, works great on Raspberry Pi.

Requirements:

Performance is excellent - redirect happens locally, minimal processing needed.

Will this work with VPN?

Depends on VPN configuration:

Split-tunnel VPN (some traffic through VPN, some direct):

Full-tunnel VPN (all traffic through VPN):

Testing: nslookup twitter.com - should return your nginx IP even with VPN connected.

Troubleshooting Questions

Why isn’t it working?

Most common issue: DNS cache.

Clear all caches:

  1. DNS server: Restart Pi-hole/dnsmasq
  2. Client DNS: OS-specific flush commands
  3. Browser cache: Visit chrome://net-internals/#dns or use incognito/private mode

See TESTING.md for complete cache clearing instructions.

Still not working? Follow TESTING.md step-by-step.

Works on some devices but not others?

Check each device:

# On each device
nslookup twitter.com

Should return nginx IP. If not:

Solutions:

Why do I get SSL certificate warnings?

CA certificate not installed on this device.

Solutions:

  1. Install CA certificate - see SSL_SETUP_MKCERT.md for your device
  2. Or skip HTTPS - comment out SSL config in nginx, use HTTP only

Note: Must install CA on every device you want HTTPS to work without warnings.

Redirect works but xcancel loads slowly?

This is xcancel.com’s performance, not your setup.

Your local redirect is instant (< 100ms). If xcancel loads slowly:

Test redirect speed:

time curl -s -o /dev/null http://twitter.com
# Should be < 0.1s

Can I see logs of what’s being redirected?

Yes:

# nginx access log
docker compose logs -f nginx

# Will show every request:
# 192.168.1.50 - [timestamp] "GET / HTTP/2.0" 301 ...

Includes:

How do I update nginx or dnsmasq?

# Pull latest images
docker compose pull

# Restart with new images
docker compose up -d

Configuration persists between updates.

Does this affect network performance?

No noticeable impact:

Even on Raspberry Pi or old hardware, performance impact is negligible.

What if I have multiple networks (guest Wi-Fi, IoT network)?

Each network needs own DNS configuration:

OR run separate DNS server per network.

Can I use this with Docker Swarm or Kubernetes?

Yes, but beyond scope of this guide.

Key points:

Standard Docker Compose setup documented here works for single-host deployments.

Still Have Questions?

  1. Check the comprehensive documentation in docs/
  2. Search GitHub issues
  3. Open a new issue with details about your setup