Skip to content
This repository was archived by the owner on Jan 23, 2025. It is now read-only.

Commit 18536db

Browse files
committed
Added README project documentation
1 parent 57a110b commit 18536db

2 files changed

Lines changed: 72 additions & 2 deletions

File tree

README.md

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
# Windscribe SOCKS5 Server in Docker
2+
3+
## Motivations
4+
[Windscribe](https://windscribe.com/) is a yet another VPN service, offering varying tiers of plans and subscriptions (free, pro, "build a plan", etc). Typically, traffic is tunneled through their servers by installing [Windscribe software](https://windscribe.com/download) on host devices. However, [additional methods](https://windscribe.com/features/config-generators) are available for tunneling without their software, through other protocols such as OpenVPN, IKEv2, and SOCKS5. Unfortunately, these protocols are unavailable to accounts that are not specifically on the "Pro" plan (e.g. free and "build a plan").
5+
6+
I had requested SOCKS5 support for the "Build A Plan" option from their support, but have received a generic response indicating that there was no particular interest in adding such support for any plans other than "Pro". As a result, Windscribe software must be utilized to tunnel traffic on a host device, presenting two corollaries:
7+
- a host device must be able to install and run the Windscribe VPN software
8+
- _all_ traffic is tunneled through Windscribe servers
9+
10+
This project addresses fringe use-cases and serves to avoid the aforementioned corollaries by containerizing Windscribe software in [Docker](https://www.docker.com/) and exposing a tunnel as a SOCKS5 proxy server.
11+
12+
13+
## Pro Et Contra
14+
### Benefits
15+
There are a few benefits of using this project's containerized application:
16+
- No premium subscription is necessary to use the SOCKS5 protocol to tunnel traffic through Windscribe.
17+
- A host device incompatible with Windscribe software can still leverage tunneling through their VPN.
18+
- Traffic on a host device may be finely controlled to only tunnel specific traffic through Windscribe.
19+
- Not all traffic may need to be tunneled, and tunneled traffic may incur a significant bandwidth and latency performance hit.
20+
- Tools such as [Proxifier](https://www.proxifier.com/) may be utilized to handle per-process traffic tunneling.
21+
- Some internet services have blacklisted commonly used Windscribe IP ranges, previously presenting an issue accessing specific services when the VPN was connected.
22+
- Containerization allows tunneling traffic through Windscribe in Docker stacks.
23+
24+
### Limitations
25+
There are, however, limitations to this project's usefulness relating significantly to security:
26+
- The SOCKS5 server has no authentication - the SOCKS5 server should _only_ be used in a tightly controlled network.
27+
- Exposing the SOCKS5 server publicly allows any individual to tunnel traffic that is ultimately linked to a specific Windscribe account.
28+
> Note: This concern can be addressed by swapping the underlying implementation of the SOCKS5 to an proxy server that supports authentication (e.g. [dante](https://www.inet.no/dante/)).
29+
- [Windscribe-CLI](https://windscribe.com/guides/linux) requires iptables support, requiring the NET_ADMIN cap permission to execute inside of a Docker container. As a corollary, a compromised container may be able to leverage all the capabilities of CAP_NET_ADMIN, as defined in the [Linux manuals](http://man7.org/linux/man-pages/man7/capabilities.7.html).
30+
- While it is unlikely the software involved would be compromised, there is a non-zero possibility that a compromised container may be able to manipulate the host's iptables for malicious reasons.
31+
32+
33+
## Deployment
34+
This project is bundled into a Docker image, making [Docker](https://www.docker.com/) a prerequisite for running this project.
35+
36+
### Source
37+
A pre-built image is available for pulling from any of the following registries:
38+
- [Docker Hub](https://hub.docker.com/repository/docker/concisions/windscribe-socks-server)
39+
- [GitHub Packages](https://github.com/concision/docker-windscribe-socks-server/packages)
40+
41+
The only currently supported OS/arch is linux/amd64.
42+
43+
Alternatively, the project can be built from the Dockerfile for new architectures by executing the following command in the project root directory:
44+
```bash
45+
docker build -t concisions/windscribe-socks-server:latest .
46+
```
47+
48+
### Configuration
49+
There are several environment variables that can be configured for this image:
50+
- `WINDSCRIBE_DNS` (optional): Whitespace delimited list of DNS servers to use (default: `1.1.1.1`). Setting a DNS server with Docker flags is not sufficient enough, as it utilizes an embedded local DNS server. Windscribe tunnels all DNS requests to prevent DNS leakage.
51+
- `WINDSCRIBE_USERNAME`: Windscribe account username.
52+
- `WINDSCRIBE_PASSWORD`: Windscribe account password.
53+
- `WINDSCRIBE_LOCATION` (optional): A preferred Windscribe location to automatically connect to.
54+
55+
### Docker Compose
56+
To deploy with Docker compose, a commented configuration file is available in this repository [here](https://github.com/concision/docker-windscribe-socks-server/blob/master/docker-compose.yml). Environment variables may be sourced with an `.env` file or explicitly defined in the configuration file.
57+
58+
To deploy it, the following command can be executed:
59+
```bash
60+
docker-compose up
61+
```
62+
63+
### Docker CLI
64+
To deploy with only Docker, an example run script is available in this repository [here](https://github.com/concision/docker-windscribe-socks-server/blob/master/deploy-container.sh). It can be configured in the script itself or use an `.env` file.
65+
66+
To deploy it, the following command can be executed:
67+
```bash
68+
./deploy-container.sh
69+
```
70+
> Note: Running the container interactively may break Windscribe authentication

deploy-container.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
#!/bin/bash
22
# explicitly define variables here or source them from an .env file with --env-file flag
33
#export WINDSCRIBE_DNS="1.1.1.1"
4-
export WINDSCRIBE_USERNAME="username"
5-
export WINDSCRIBE_PASSWORD="password"
4+
#export WINDSCRIBE_USERNAME="username"
5+
#export WINDSCRIBE_PASSWORD="password"
66
#export WINDSCRIBE_LOCATION=""
77

88
docker run \

0 commit comments

Comments
 (0)