simple-shadow
A 100 line shadowsocks like firewall tunneling proxy written in nodejs with educational purpose.
# install
npm install -g viti
# start remote server
viti --remote --password 'sample password'
# start local server and connect with remote
viti --local --host '127.0.0.1' --password 'sample password'
- local server will be listening on
127.0.0.1:1081
; Then, you need to set up socks proxy for your computer - remote server will be listening on port
1082
; make sure this port is opened. - password of remote and local server should be the same
Your local machine is not able to visit google.com because a firewall blacklist the google's IP or reading your request and preventing you from visit google.
However, you have another machine which you can access and that machine can access google.com.
It is easy to think of that you can ask that machine to visit sites on behalf of you and return result back to you. But the firewall may reading your request to that machine. So, you will need to encrypt your data when you are requesting that machine.
- browser want to visit google.com; the request is sent in SOCKS5 protocal to
local tcp proxy
local tcp proxy
encrypt the data and send toremote tcp proxy
(pass the wall)remote tcp proxy
decrypt the data and send toSOCKS5 server
SOCKS5 server
do the request to google.com and send the response back toremote tcp proxy
remote tcp proxy
encrypt the data and send tolocal tcp proxy
(pass the wall)local tcp proxy
decrypt the data and send back to brower, now you can access google.com!
- SOCKS5: An Internet protocol that exchanges network packets between a client and server through a proxy server. We use SOCKS5 as a request client on remote server.
- AES (Advanced Encryption Standard): AES is an symmetric-key algorithm (the same key is used for both encrypting and decrypting the data). We use AES to encrypt data in order to pass through the wall.