Shadowsocks VPS Setup: Bypass Censorship with Offshore Proxy
Shadowsocks is a lightweight encrypted proxy protocol designed to evade deep packet inspection and bypass internet censorship. Running it on an offshore VPS puts the proxy server entirely under your control. AnubizHost offshore VPS plans in Romania and Iceland provide reliable, low-latency infrastructure for Shadowsocks deployment.
Need this done for your project?
We implement, you ship. Async, documented, done in days.
How Shadowsocks Bypasses Deep Packet Inspection
Shadowsocks was created in 2012 by a Chinese developer specifically to evade the Great Firewall of China's DPI infrastructure. Unlike a traditional VPN, which has well-known protocol signatures (WireGuard's handshake pattern, OpenVPN's TLS certificate exchange), Shadowsocks traffic appears as random encrypted data with no distinguishable header structure. There is no TLS handshake to inspect, no cipher negotiation to fingerprint, and no consistent packet timing pattern that DPI systems can use to classify and block the connection.
The protocol works as an encrypted SOCKS5 proxy. The client connects to the Shadowsocks server on a configurable port using a pre-shared password and cipher (AEAD ciphers like ChaCha20-IETF-Poly1305 or AES-256-GCM are recommended). The server decrypts the target address and proxies the connection on behalf of the client. From the network perspective of anyone monitoring the connection between client and server, the traffic looks like an encrypted stream with no distinguishable protocol structure.
Modern implementations like shadowsocks-libev and sing-box support obfuscation plugins that add an additional layer of camouflage. The most effective is v2ray-plugin in websocket mode with TLS, which makes Shadowsocks traffic indistinguishable from HTTPS WebSocket traffic to a CDN. Combined with hosting the proxy behind a Cloudflare-fronted domain, the actual server IP is hidden from the DPI system, and blocking the traffic requires blocking Cloudflare's entire CDN - an action that would take down a significant portion of the internet.
For users in censored environments like Iran, Russia, China, or Turkmenistan, a self-hosted Shadowsocks server on an offshore VPS is one of the most reliable circumvention tools available. Commercial VPN protocols are actively fingerprinted and blocked by these countries' DPI systems; Shadowsocks with obfuscation is significantly harder to detect and block.
Installing Shadowsocks-libev on Your VPS
Shadowsocks-libev is the most widely used and actively maintained Shadowsocks server implementation. On Debian/Ubuntu: apt update && apt install -y shadowsocks-libev. On AlmaLinux: dnf install -y shadowsocks-libev. After installation, configure the server by editing /etc/shadowsocks-libev/config.json. Set server to 0.0.0.0 to listen on all interfaces, choose a port (443 or 8443 blend in with HTTPS traffic), set a strong password (at least 32 random characters), and select the cipher: chacha20-ietf-poly1305 is recommended for its performance on ARM and x86 without hardware AES, or aes-256-gcm if your VPS has AES-NI (check with grep aes /proc/cpuinfo).
Enable and start the service: systemctl enable --now shadowsocks-libev. Open the chosen port in your firewall: ufw allow 443/tcp. Test connectivity by connecting with a Shadowsocks client (Shadowsocks-NG on macOS, Shadowsocks-Windows on Windows, Shadowsocks on Android/iOS) using your server's IP, port, password, and cipher settings.
For obfuscation, install v2ray-plugin: download the appropriate binary from the GitHub releases page, move it to /usr/local/bin/v2ray-plugin, and add the plugin configuration to config.json: set plugin to v2ray-plugin and plugin_opts to server;tls;host=yourdomain.com;path=/path where yourdomain.com is a domain you control with a valid TLS certificate (Let's Encrypt via certbot works). On the client, configure the same plugin settings. The traffic now looks like TLS WebSocket to any network observer.
Monitor Shadowsocks service health with journalctl -u shadowsocks-libev -f. Common issues include port conflicts (check with ss -tlnp | grep PORT), firewall rules not applied (ufw status), and certificate errors with the TLS plugin (verify certbot renewal is working with certbot renew --dry-run).
Shadowsocks Multi-User Setup and Access Control
Shadowsocks-libev supports multiple users through the ss-manager tool, which allows different ports and passwords for different users. This is useful for sharing a single offshore VPS among a small group of people without giving everyone the same credentials. Each user connects on their own port with their own password, and you can revoke access by removing their port from the manager configuration.
A simpler multi-user approach for small groups is to run multiple shadowsocks-libev instances on different ports, each with its own systemd service file and config file. Create /etc/shadowsocks-libev/user1.json, /etc/shadowsocks-libev/user2.json, etc., and create corresponding systemd service files. This approach is less elegant than ss-manager but is easier to troubleshoot and monitor.
For access logging without compromising user privacy, configure shadowsocks-libev to log connection timestamps and byte counts without recording destination addresses. This gives you enough data to detect abuse (a single user consuming gigabytes per hour) without creating a detailed traffic log. Store logs in /var/log/shadowsocks/ with logrotate configured to rotate and compress weekly and delete after 30 days.
Rate limiting per user prevents a single client from saturating your VPS's uplink. Use tc (traffic control) to apply bandwidth limits per port: tc qdisc add dev eth0 root handle 1: htb default 10 && tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit ceil 100mbit. Apply per-port limits using iptables MARK and tc filter rules. This keeps the server usable for all users even if one client tries to max out the connection.
Related Services
Why Anubiz Host
Ready to get started?
Skip the research. Tell us what you need, and we'll scope it, implement it, and hand it back — fully documented and production-ready.