Skip to content
/ viti Public

A 100 line shadowsocks like tunneling proxy in nodejs.

License

Notifications You must be signed in to change notification settings

timqian/viti

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

simple-shadow

中文介绍

A 100 line shadowsocks like firewall tunneling proxy written in nodejs with educational purpose.

Usage

# 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'

Note

  1. local server will be listening on 127.0.0.1:1081; Then, you need to set up socks proxy for your computer
  2. remote server will be listening on port 1082; make sure this port is opened.
  3. password of remote and local server should be the same

How simple-shadow works

The principle is simple:

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.

Detailed procedure is

  1. browser want to visit google.com; the request is sent in SOCKS5 protocal to local tcp proxy
  2. local tcp proxy encrypt the data and send to remote tcp proxy(pass the wall)
  3. remote tcp proxy decrypt the data and send to SOCKS5 server
  4. SOCKS5 server do the request to google.com and send the response back to remote tcp proxy
  5. remote tcp proxy encrypt the data and send to local tcp proxy(pass the wall)
  6. local tcp proxy decrypt the data and send back to brower, now you can access google.com!

Concepts to grasp

  • 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.

Good reads about GFW

Releases

No releases published

Packages

No packages published