Snirect is a transparent HTTP/HTTPS proxy designed to bypass SNI-based censorship (SNI RST). Go implementation of Accesser (Python).
Cross-Platform: Linux · macOS · Windows
Domain rules and configuration data are sourced from Cealing-Host.
Just want to get started? Run these commands:
# One-time setup
./snirect install
# Start proxy and enable system proxy
snirect -s# One-time setup
.\snirect.exe install
# Start proxy and enable system proxy
snirect.exe -sThat's it! Your system is now using Snirect to bypass SNI-based blocking.
To stop: Press Ctrl+C to stop the proxy, and your system proxy will be automatically cleared.
| Quick Command | What it does |
|---|---|
snirect -s |
Start proxy + enable system proxy (simplest way) |
snirect status |
Check if everything is working |
snirect install |
Install binary and service |
snirect uninstall |
Complete removal |
Click to expand advanced topics
Linux:
chmod +x snirect-linux-amd64
./snirect-linux-amd64 installmacOS:
chmod +x snirect-darwin-arm64
./snirect-darwin-arm64 installWindows (PowerShell as Administrator):
.\snirect-windows-amd64.exe installgit clone https://github.com/xihale/snirect.git
cd snirect
make installWhat install does:
- Linux: Copies to
~/.local/bin, creates systemd user service - macOS: Copies to
/usr/local/bin, creates launchd service - Windows: Copies to
%LOCALAPPDATA%\Programs\snirect, creates scheduled task
注意: 首次运行 (snirect -s) 会自动安装 CA 证书,也可以手动运行 snirect install-cert。安装证书后,你 必须重启 浏览器(如 Chrome, Firefox)或相关应用,代理才能正常生效。
Linux (systemd):
systemctl --user start snirect # Start
systemctl --user stop snirect # Stop
systemctl --user status snirect # Check status
journalctl --user -u snirect -f # View logsmacOS (launchd):
launchctl start com.snirect.proxy
launchctl stop com.snirect.proxy
tail -f ~/Library/Logs/snirect.logWindows (Task Scheduler):
schtasks /Run /TN Snirect
schtasks /End /TN Snirectsnirect # Run with defaults
snirect -s # Run and auto-set system proxy
snirect --help # See all optionssnirect set-proxy # Enable
snirect unset-proxy # Disable# Linux / macOS
eval $(snirect proxy-env)
# Windows CMD
FOR /F %i IN ('snirect.exe proxy-env') DO %i
# Windows PowerShell
& snirect.exe proxy-env | Invoke-Expressionsnirect cert-status # Check if CA is installed
snirect install-cert # Install CA certificate
snirect uninstall-cert # Remove CA certificate| Command | Aliases | Description |
|---|---|---|
install |
i, setup |
Install binary and service |
uninstall |
rm, remove |
Full system cleanup |
status |
— | Check proxy/CA/service status |
set-proxy |
sp |
Enable system proxy |
unset-proxy |
up |
Disable system proxy |
install-cert |
ic, install-ca |
Install root CA |
uninstall-cert |
uc, uninstall-ca |
Remove root CA |
cert-status |
cs, ca-status |
Check CA installation |
proxy-env |
— | Print shell proxy settings |
reset-config |
— | Reset config to defaults |
completion |
— | Shell completion scripts |
env |
— | Check system environment |
Config file location:
- Linux/macOS:
~/.config/snirect/config.toml - Windows:
%APPDATA%\snirect\config.toml
Key options:
check_hostname: Certificate verification (default:falsefor compatibility)ipv6: Enable IPv6 support (default:true)importca: Auto-install CA cert -"auto","always", or"never"server.port: Proxy port (default:7654)
Snirect uses rules to determine which domains need SNI modification. Default rules are integrated from Cealing-Host.
Rule files:
~/.config/snirect/rules.toml— Domain rules~/.config/snirect/config.toml— DNS configuration
To update rules:
make update-rulesSome rules (Google/YouTube) use third-party public proxy IPs that require check_hostname = false. This has MITM risks. For better security:
- Use your own trusted proxy IPs
- Monitor the TODO list for GGC IP updates
- Consider contributing verified IPs
| Issue | Solution |
|---|---|
| "Certificate warnings in browser" | 运行 snirect install-cert 并重启浏览器 |
| "tls: unknown certificate" | CA 证书安装失败或缓存未刷新。请尝试重启应用,或检查系统证书管理器中是否存在相应证书。 |
| "Port already in use" | Change server.port in config.toml |
| "Proxy not working" | Run snirect status to check |
| "Can't access some sites" | Check rules.toml or run make update-rules |
Inspired by Accesser (Python) by URenko.