config files, macOS support
This commit is contained in:
40
README.md
40
README.md
@@ -5,18 +5,52 @@ A hub-and-spoke VPN for IPv6
|
||||
## Features
|
||||
* **Post-quantum security:** Uses [HPKE](https://datatracker.ietf.org/doc/html/rfc9180/)([XWingMLKEM768X25519](https://datatracker.ietf.org/doc/html/draft-connolly-cfrg-xwing-kem/), [HKDF-SHA-256](https://en.wikipedia.org/wiki/HKDF)) + [XChaCha20-Poly1305](https://en.wikipedia.org/wiki/ChaCha20-Poly1305#XChaCha20-Poly1305_%E2%80%93_extended_nonce_variant) for encryption and [ML-DSA-44](https://nvlpubs.nist.gov/nistpubs/fips/nist.fips.204.pdf) for signatures.
|
||||
* **NAT-resistant architecture:** Any device with Internet access can easily join the network.
|
||||
* **Cross-platform-ish:** Tested on Linux and Windows. macOS should probably work too.
|
||||
* **Cross-platform:** Tested on Linux, Windows and macOS.
|
||||
|
||||
## Protocol
|
||||
|
||||
See [proto.go](https://git.ton1.dev/toni/baalvpn/src/branch/main/shared/proto.go) for details
|
||||
|
||||
### Known limitations
|
||||
* Compromised server could give out fake pubkeys allowing a MITM attack and decrypting the peer-to-peer traffic
|
||||
* A compromised server could give out fake pubkeys allowing a MITM attack and decrypting the peer-to-peer traffic
|
||||
* The keys are rotated only on client and server restart
|
||||
* The protocol is vulnerable to replay attacks
|
||||
|
||||
## Setup
|
||||
|
||||
### Prerequisites
|
||||
* [Go](https://go.dev/dl/) 1.26.3+
|
||||
|
||||
### Building
|
||||
```sh
|
||||
go build -o baalvpn-server ./server
|
||||
|
||||
CGO_ENABLED=0 go build -o baalvpn-client ./client
|
||||
```
|
||||
|
||||
### Server
|
||||
|
||||
1. Generate a keypair:
|
||||
```
|
||||
./baalvpn-server keygen
|
||||
```
|
||||
This creates `server.conf` and `client.conf`.
|
||||
|
||||
2. Run:
|
||||
```
|
||||
sudo ./baalvpn-server server.conf
|
||||
```
|
||||
|
||||
### Client
|
||||
1. Copy `client.conf` (generated by keygen) and ensure `SERVER_ADDR` points to the server.
|
||||
|
||||
2. Run:
|
||||
```
|
||||
sudo ./baalvpn-client client.conf
|
||||
```
|
||||
The client will be assigned an IPv6 address from the `fd00:baa1::/32` range.
|
||||
|
||||
## Third-party dependencies
|
||||
* [`github.com/songgao/water`](https://github.com/songgao/water) - wrapper around TUN interfaces for \*nix
|
||||
* [`golang.zx2c4.com/wintun`](https://git.zx2c4.com/wintun-go) - wrapper around `wintun.dll`
|
||||
* [`github.com/cloudflare/circl`](https://github.com/cloudflare/circl) - used for ML-DSA, hopefully [not for long](https://github.com/golang/go/issues/77626)
|
||||
* [`github.com/cloudflare/circl`](https://github.com/cloudflare/circl) - used for ML-DSA, but [only until next Go release](https://go.dev/doc/go1.27#crypto_mldsa)
|
||||
|
||||
Reference in New Issue
Block a user