Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/thomas-maurice/dupont
Creates VXLAN overlay networks over wireguard
https://github.com/thomas-maurice/dupont
networking sdn vxlan vxlan-tunnel wireguard wireguard-tunnel
Last synced: 27 days ago
JSON representation
Creates VXLAN overlay networks over wireguard
- Host: GitHub
- URL: https://github.com/thomas-maurice/dupont
- Owner: thomas-maurice
- Created: 2021-08-06T15:14:57.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2021-08-08T09:04:50.000Z (over 3 years ago)
- Last Synced: 2024-11-07T23:47:47.979Z (3 months ago)
- Topics: networking, sdn, vxlan, vxlan-tunnel, wireguard, wireguard-tunnel
- Language: Go
- Homepage:
- Size: 49.8 KB
- Stars: 4
- Watchers: 5
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- awesome-starred - thomas-maurice/dupont - Creates VXLAN overlay networks over wireguard (sdn)
README
# dupont
Creates VXLAN tunnels over wireguard
## Why ?
Wireguard does not allow you to route arbitrary traffic through a tunnel, let's say I have this setup
* Network A: 10.0.0.0/24
* Network B: 10.1.0.0/24
* Tunnel A<>B 10.3.0.0/24You cannot make A and B communicate without having to NAT traffic, hence masking the original IPs.
To get around this you can create an overlay network on top of the wireguard tunnel.
## How ?
Look at the config files in the `examples` directoryThen compile the binary
```bash
$ make
$ ./bin/dupont -what apply -config examples/host-1.hcl
# You can teardown the config by doing
$ ./bin/dupont -what delete -config examples/host-1.hcl
```## Example config
You can write the configurations both in yaml and HCL, the HCL being the more readable
one, as follows:```hcl
# Make sure we enable ip forward and co
ensureSysctl = true# Our interfaces definitions
interfaces {
# Wireguard interfaces definitions
wireguard "wg-0" {
# First interface definition
address = "192.168.69.1/32"
port = 6969
key {
privateKey = "4CQWNQylWDWoZGgWDj58skAQuC84v1JXBKKqLTwcb3c="
# Note that specifying the public key here is a matter
# of convenience, you would not have that (prolly) on
# an actual deployment
publicKey = "bScGfgslFnmIEcuAdU8PQla6OtE29VntPOd3rOb5phs="
}
peer "wg-0" {
description = "Laptop"
key {
publicKey = "NYNj4shJcxucrhgNTwRg1sshlCT9cGKvClWEsycm/28="
}
allowedIPs = [
"192.168.69.2/32",
]
endpoint {
address = "10.99.1.200"
port = 6969
}
keepAlive = 5
}
}
vxlan "vx-0" {
address = "192.168.70.1/24"
vni = 60
parent = "wg-0"
neighbour {
address = "192.168.70.2"
}
}
}
```Which produces something like that:
```
$ ip address
[...]
40: wg-0: mtu 1420 qdisc noqueue state UNKNOWN group default
link/none
inet 192.168.69.2/24 brd 192.168.69.255 scope global wg-0
valid_lft forever preferred_lft forever
41: br-vx-0: mtu 1350 qdisc noqueue state UP group default
link/ether 8a:a5:6a:ec:81:e5 brd ff:ff:ff:ff:ff:ff
inet 192.168.70.2/24 brd 192.168.70.255 scope global br-vx-0
valid_lft forever preferred_lft forever
inet6 fe80::88a5:6aff:feec:81e5/64 scope link
valid_lft forever preferred_lft forever
42: vx-0: mtu 1350 qdisc noqueue master br-vx-0 state UNKNOWN group default
link/ether 8a:a5:6a:ec:81:e5 brd ff:ff:ff:ff:ff:ff
inet6 fe80::88a5:6aff:feec:81e5/64 scope link
valid_lft forever preferred_lft forever
```## Topologies
You can also use dupont to generate the topology of the network for you. Create a file like so
```hcl
name = "example topology"network {
wireguard = "10.80.0.1/24"
overlay = "10.80.1.1/24"
vni = 42
wireguardPort = 6060
}hosts = {
pi1 = "19.99.1.60"
pi2 = "19.99.1.61"
pi3 = "19.99.1.62"
pi4 = "19.99.1.63"
}
```Then run `./bin/dupont -what generate -config config/topology.hcl` and it will generate one file per host in a folder
named after the `topology ID` of the said topology. It is basically a short hash of the topology name. You would have
then something like
```bash
$ tree 657861/
657861/
├── pi1.hcl
├── pi2.hcl
├── pi3.hcl
└── pi4.hcl0 directories, 4 files
```You only have to copy those files on every host of the mesh, then apply the config and you are done !