|
| 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 |
0 commit comments