mirror of
https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake.git
synced 2025-10-13 11:11:30 -04:00
Add Dockerfile and README for deploying probetest
The easiest way to set up the probe server behind a symmetric NAT is to deploy it as a Docker container and alter the iptables rules for the Docker network subnet that the container runs in.
This commit is contained in:
parent
f368c87109
commit
a4f10d9d6e
3 changed files with 58 additions and 0 deletions
3
probetest/Dockerfile
Normal file
3
probetest/Dockerfile
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
FROM golang:1.13
|
||||||
|
|
||||||
|
COPY probetest /go/bin
|
44
probetest/README.md
Normal file
44
probetest/README.md
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
This is code for a remote probe test component of Snowflake.
|
||||||
|
|
||||||
|
### Overview
|
||||||
|
|
||||||
|
This is a probe test server to allow proxies to test their compatability
|
||||||
|
with Snowflake. Right now the only type of test implemented is a
|
||||||
|
compatability check for clients with symmetric NATs.
|
||||||
|
|
||||||
|
### Running your own
|
||||||
|
|
||||||
|
The server uses TLS by default.
|
||||||
|
There is a `--disable-tls` option for testing purposes,
|
||||||
|
but you should use TLS in production.
|
||||||
|
|
||||||
|
To build the probe server, run
|
||||||
|
```go build```
|
||||||
|
|
||||||
|
To deploy the probe server, first set the necessary env variables with
|
||||||
|
```
|
||||||
|
export HOSTNAMES=${YOUR HOSTNAMES}
|
||||||
|
export EMAIL=${YOUR EMAIL}
|
||||||
|
```
|
||||||
|
then run ```docker-compose up```
|
||||||
|
|
||||||
|
Setting up a symmetric NAT configuration requires a few extra steps. After
|
||||||
|
upping the docker container, run
|
||||||
|
```docker inspect snowflake-probetest```
|
||||||
|
to find the subnet used by the probetest container. Then run
|
||||||
|
```sudo iptables -L -t nat``` to find the POSTROUTING rules for the subnet.
|
||||||
|
It should look something like this:
|
||||||
|
```
|
||||||
|
Chain POSTROUTING (policy ACCEPT)
|
||||||
|
target prot opt source destination
|
||||||
|
MASQUERADE all -- 172.19.0.0/16 anywhere
|
||||||
|
```
|
||||||
|
to modify this rule, execute the command
|
||||||
|
```sudo iptables -t nat -R POSTROUTING $RULE_NUM -s 172.19.0.0/16 -j MASQUERADE --random```
|
||||||
|
where RULE_NUM is the numbered rule corresponding to your docker container's subnet masquerade rule.
|
||||||
|
Afterwards, you should see the rule changed to be:
|
||||||
|
```
|
||||||
|
Chain POSTROUTING (policy ACCEPT)
|
||||||
|
target prot opt source destination
|
||||||
|
MASQUERADE all -- 172.19.0.0/16 anywhere random
|
||||||
|
```
|
11
probetest/docker-compose.yml
Normal file
11
probetest/docker-compose.yml
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
version: "3.8"
|
||||||
|
|
||||||
|
services:
|
||||||
|
snowflake-probetest:
|
||||||
|
build: .
|
||||||
|
container_name: snowflake-probetest
|
||||||
|
ports:
|
||||||
|
- "8443:8443"
|
||||||
|
volumes:
|
||||||
|
- /home/snowflake-broker/acme-cert-cache:/go/bin/acme-cert-cache
|
||||||
|
entrypoint: [ "probetest" , "-addr", ":8443" , "-acme-hostnames", $HOSTNAMES, "-acme-email", $EMAIL, "-acme-cert-cache", "/go/bin/acme-cert-cache"]
|
Loading…
Add table
Add a link
Reference in a new issue