What's New
--no-warp flag for static residential IPs
Static residential IPs don't need Cloudflare WARP — they're already clean. This release adds a --no-warp (also --residential / --direct) flag that skips WARP entirely and routes traffic directly via your server IP.
# Standard (VPS/datacenter — WARP exit)
bash <(curl -sL https://raw.githubusercontent.com/iPythoning/SUIWARP/main/setup.sh)
# Residential IP — direct exit, no WARP
bash <(curl -sL https://raw.githubusercontent.com/iPythoning/SUIWARP/main/setup.sh) --no-warpWhat changes with --no-warp
| Component | Default (WARP) | --no-warp (Residential) |
|---|---|---|
| wireproxy / wgcf | Installed (~4MB) | Skipped |
| S-UI routing | final: warp |
final: direct |
| ShadowTLS outbound | WARP socks5 | Direct |
| systemd dependency | wireproxy-warp.service |
None |
| Exit IP | Cloudflare AS13335 | Your server IP |
When to use each mode
- VPS / datacenter IP → default (WARP hides your datacenter IP behind Cloudflare)
- Static residential IP →
--no-warp(residential is already premium; WARP would downgrade it to Cloudflare datacenter)
Full Changelog
- feat:
SKIP_WARPvariable + argument parser (--no-warp|--residential|--direct) - feat: Step 5 skipped in residential mode (no wireproxy/wgcf install)
- feat: Step 6 routes
final: directin residential mode - feat: ShadowTLS
shadowtls.jsonuses direct outbound in residential mode - feat:
suiwarp-shadowtls.serviceremovesWants=wireproxy-warp.servicein residential mode - feat: Summary shows "Direct Exit: IP (residential — no WARP)" vs "WARP Exit"
- docs: README updated with mode comparison table and architecture diagrams
Upgrade existing residential IP server
# Update S-UI routing to direct (one-liner)
python3 -c "
import sqlite3, json
DB = '/usr/local/s-ui/db/s-ui.db'
conn = sqlite3.connect(DB)
config = {'log': {'level': 'warn'}, 'dns': {'servers': [{'tag': 'cloudflare', 'address': 'tls://1.1.1.1', 'detour': 'direct'}], 'strategy': 'prefer_ipv4'}, 'route': {'rules': [{'protocol': ['dns'], 'action': 'hijack-dns'}, {'ip_is_private': True, 'outbound': 'direct'}], 'final': 'direct'}, 'experimental': {}}
conn.execute('UPDATE settings SET value=? WHERE key=?', (json.dumps(config, indent=2), 'config'))
conn.commit(); conn.close(); print('Done')
"
systemctl stop wireproxy-warp && systemctl disable wireproxy-warp
systemctl restart s-ui