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
```
|