Shadowsocks-Tutorial: a beginner's walkthrough for renting a VPS and running Shadowsocks
🐱给小白的Shadowsocks翻墙教程-Easy-to-follow tutorials for beginners on using Shadowsocks to bypass internet restrictions.
At a glance
- What is it?
- A Chinese-language, screenshot-heavy guide that takes a non-technical reader from buying a Vultr or DigitalOcean instance to a working Shadowsocks client. The value is in the ordering and the client setup, not in the server script, which its own author notes is no longer updated.
- Who is it for?
- Adopt this if you have never rented a VPS and want the ordering of steps handed to you: pick a provider, deploy Debian 12 x64, run the bundled sh/shadowsocks-all.sh, then configure a client. Skip it if you need a maintained server implementation or a documented security posture, because the README itself states the installer version is no longer updated and the repository carries no licence file.
- Can I use it commercially?
- Not without permission. GitHub finds no licence file in the repository, and without a licence all rights are reserved by default: you may read the code but not reuse it. Check the README, or ask the authors, before using it.
- Is it still maintained?
- Yes. The repository last received commits 26 days ago.
- What is it written in?
- Mainly Shell, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 29, 2026, and from our analysis. They are not legal advice.
Editorial analysis
What problem the tutorial actually solves
The README opens with a complaint rather than a feature list: the author used a commercial proxy service, it became unstable, and he moved to Shadowsocks because a personal server is not subject to a provider's fate. The stated audience is people who want to get online, not people who want to understand the protocol. The repository describes itself as an almost one-click, foolproof setup guide for beginners, and the whole document is organised around that promise.
The consequence is that this is a tutorial repository, not a program. The Shell language statistic comes from the bundled installer script and the snippets, not from a codebase you would import. If you are looking for a Shadowsocks implementation to read or contribute to, this is the wrong repository. If you are looking for the sequence of decisions between "I have never bought a server" and "google.com loads", this is exactly the gap it fills.
The path the guide walks you through
The flow is linear and deliberately narrow. You register with Vultr or DigitalOcean, deploy a server, and the README recommends Debian 12 x64 and explicitly tells you to uncheck automatic backups because they cost extra. It suggests a European location such as Frankfurt because Japanese IP ranges were being blocked, and it walks through a ping test before you invest more time: intermittent timeouts are described as packet loss, while constant timeouts mean you should destroy the instance and redeploy.
From there the guide switches to the server. On macOS and Windows 10 you connect with the built-in terminal using ssh root@your-server-ip; on older Windows it walks through Xshell with screenshots. Then it hands off to a third-party installer by teddysun, which the README credits and simultaneously warns about: the author of that script has stepped away, so the command still runs but the version is no longer updated. That single sentence is the most important line in the repository.
The installer asks four things: which server variant (the tutorial picks libev), a password, a port between 1 and 65535, and an encryption method, where xchacha20-ietf-poly1305 is recommended. It then offers the simple-obfs plugin, which the guide leaves at the default. The final step is sudo ufw disable, and the README tells you to screenshot the resulting summary of IP, port, password and encryption method.
Installing the server and connecting a first client
The installer is fetched from this repository rather than from the original author's site, which is why the command still works. Run it as root on a fresh Debian instance:
wget --no-check-certificate -O shadowsocks-all.sh https://raw.githubusercontent.com/zhaoweih/Shadowsocks-Tutorial/main/sh/shadowsocks-all.sh
chmod +x shadowsocks-all.sh
./shadowsocks-all.sh 2>&1 | tee shadowsocks-all.logThe README notes that the script may appear to stall after the first screen; pressing Enter continues it. You then choose the server variant by number, set a password and port, and pick an encryption method. When it finishes, it prints the parameters you need on the client side. The tutorial's own example uses port 12853 and password abc123456, which are illustrative values from the screenshots and should not be reused.
Before you close the session, the guide asks you to turn the firewall off:
sudo ufw disableThis is the step to think hardest about. Disabling the firewall is presented as a troubleshooting shortcut, and it does make client connections simpler, but it also removes a layer that would otherwise limit what is reachable on that host. A narrower alternative is to leave ufw enabled and allow only the Shadowsocks port you chose.
On the client side, the README points at the official release pages for Windows, Android, macOS and Linux, and for iOS recommends Potatso Lite after switching to a non-China App Store account. Configuration is the same everywhere: right-click the tray icon, edit the server, and enter the four values you saved. The guide then recommends PAC mode over global mode, explaining that PAC routes domestic sites directly and blocked sites through the server, with the list held in gfwlist. Common service commands are documented per variant, for example:
/etc/init.d/shadowsocks-libev restartUninstalling is a single call with an argument: ./shadowsocks-all.sh uninstall.
Where this guide stops being the right tool
The README is candid about one thing and silent about another. The candid part is the installer's maintenance: the upstream author has quit, the script is frozen, and the guide says so in a parenthetical. Anyone running this on a long-lived server is running an unmaintained installer on a public IP. That is a real risk, not a theoretical one, and the repository does not document a migration path to a maintained implementation.
The silent part is security posture. The README does not document what the installer changes on the system beyond installing the service, does not discuss key management, and does not cover what happens if the IP is blocked after setup. The repository also has no licence file, so the terms under which the bundled script can be reused or redistributed are not stated anywhere in the repository. If your organisation needs a clear licence before anything touches production, that absence is itself a blocker.
There is also a documentation gap around the iptables file in the repository root. iptables_shadowsocks.md exists alongside the main tutorial, but the README does not explain when you would need it or how it relates to the ufw disable instruction. A reader who follows the main path will never learn what that file is for.
How this differs from a managed proxy or a self-hosted panel
The obvious alternative is a commercial proxy service, which is what the author was using before he wrote this. The difference is control and failure mode: with a commercial service you depend on the operator staying up and staying unblocked, and you have no way to change the exit IP. With a VPS you own the instance, can destroy and redeploy it in minutes, and can share it with people you trust, which the README lists as an advantage. The cost is that you are now the operator, and every problem in the chain is yours.
A second alternative is a server management panel that installs and configures the proxy for you through a web interface. That trades the command line for a browser and usually adds multi-user management and traffic accounting. This tutorial does neither: it is a fixed sequence of prompts, and the multi-port case is delegated to an external blog post rather than covered in the repository. If you need per-user quotas or a dashboard, the guide's approach will not get you there.
Maintenance, upgrades and the licence question
The last push to this repository was on 2026-09-04, which is recent, so the instructions themselves are being touched. That does not extend to the installer it depends on. The README states plainly that the script's author has quit and the version is no longer updated, and it credits a contributor for a fix submitted through the issue tracker. The practical reading is that the guide is maintained at the documentation level while the thing it installs is not maintained at all.
Upgrade cost is therefore asymmetric. Fixing a broken screenshot or an outdated provider menu is cheap and clearly still happening. Replacing the server-side installation with something current is a rewrite of the central section, and nothing in the repository suggests that is planned. On licensing, the repository contains no licence file, so the default position is that no permission has been granted for reuse of the bundled script. That is a statement about what the repository shows, not legal advice; if you intend to redistribute the script, get your own answer.
Editorial conclusion
Adopt this if you have never rented a VPS and want the ordering of steps handed to you: pick a provider, deploy Debian 12 x64, run the bundled sh/shadowsocks-all.sh, then configure a client. Skip it if you need a maintained server implementation or a documented security posture, because the README itself states the installer version is no longer updated and the repository carries no licence file. Before trusting it, read sh/shadowsocks-all.sh in full, confirm which upstream version it pulls, and decide whether you are comfortable with the ufw disable step the tutorial asks you to run.
Frequently asked questions
Can Shadowsocks be detected?
The tutorial does not make a claim either way. It does offer the simple-obfs plugin during installation as an optional step, which the guide leaves at the default, and it notes that Japanese Vultr IP ranges were widely blocked, which is why it suggests European locations instead.
Is Shadowsocks safe?
The repository does not document a security model. It does instruct you to run sudo ufw disable at the end of setup and does not explain the trade-off, so the firewall question is left to the reader. The installer it uses is described in the README as no longer being updated.
Does Shadowsocks hide my IP address?
The README explains that in PAC mode, traffic to blocked sites goes through the server IP while domestic sites go directly, and that in global mode everything goes through the server. It does not describe the client's own address as hidden in either case.
Does Shadowsocks still work in China?
The guide is written on the assumption that it does, but it also records that Japanese Vultr servers had many IPs blocked and recommends switching to European locations such as Frankfurt. It includes a ping test before you continue, with constant timeouts meaning you should destroy the instance and redeploy.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/zhaoweih-shadowsocks-tutorial)