summaryrefslogtreecommitdiff
path: root/README.md
blob: 42e679395e50dc921a51ace08de45e4081e287fd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# ObfsVPN

The `obfsvpn` module contains a Go package that provides server and client components to 
use variants of the obfs4 obfuscation protocol. It is intended to be used as a
drop-in Pluggable Transport for OpenVPN connections (although it can be used
for other, more generic purposes).

A docker container will be provided to facilitate startng an OpenVPN service that
is accessible via the obfuscated proxy too.

## Protocol stack

```
--------------------
 application data
--------------------
      OpenVPN
--------------------
   obfsvpn proxy
--------------------
       obfs4
--------------------
   wire transport
--------------------
```

* Application data is written to the specified interface (typically a `tun`
  device started by `OpenVPN`).
* `OpenVPN` provides end-to-end encryption and a reliability layer. We'll be
  testing with the `2.5.x` branch of the reference OpenVPN implementation.
* `obfs4` is used for an extra layer of encryption and obfuscation. It is a
  look-like-nothing protocol that also hides the key exchange to the eyes of
  the censor.
* Wire transport is, by default, TCP. Other transports will be explored to
  facilitate evasion: `KCP`, `QUIC`?

## Testing

...

## Android

Assuming you have the `android ndk` in place, you can build the bindings for android using `gomobile`:

```
make build-android
```