From 662e844fa61fcbe1c4ba36eaefbc79472cbaaebe Mon Sep 17 00:00:00 2001 From: Bruno Tavares Date: Sun, 3 Feb 2019 20:33:22 +0000 Subject: [PATCH] Adds documentation on Network --- docs/imgs/zerotier-auto-assign-pool.jpg | Bin 0 -> 23449 bytes docs/imgs/zerotier-ipv6-ula-assignment.jpg | Bin 0 -> 10035 bytes docs/imgs/zerotier-routing-table.jpg | Bin 0 -> 19316 bytes docs/networking.md | 57 +++++++++++++++++++++ hypriot/README.md | 2 +- 5 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 docs/imgs/zerotier-auto-assign-pool.jpg create mode 100644 docs/imgs/zerotier-ipv6-ula-assignment.jpg create mode 100644 docs/imgs/zerotier-routing-table.jpg create mode 100644 docs/networking.md diff --git a/docs/imgs/zerotier-auto-assign-pool.jpg b/docs/imgs/zerotier-auto-assign-pool.jpg new file mode 100644 index 0000000000000000000000000000000000000000..815dfe090046188fbe6b96eb6b8bf20d7d3ac127 GIT binary patch literal 23449 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

ps{u^Cb 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 F{{_&XpYZ?y literal 0 HcmV?d00001 diff --git a/docs/networking.md b/docs/networking.md new file mode 100644 index 0000000..7936477 --- /dev/null +++ b/docs/networking.md @@ -0,0 +1,57 @@ +# Networking + +[ZeroTier] is a great product. It provides a Layer 2 P2P Switch, which means that Bonjour and any other local anycast communication strategy should work without using a any router and propagation between network ranges. + +It is an impressively low-lantecy option. I can't recomend them enough. + +My idea is to use ZeroTier as a virtual network, making all devices communicate with each other. +Taking advantage of ther [6PLANE] IPv6 addressing scheme, I would also be able to make Docker containers on any host be able to talk to each other, without using a Network plugin. + +TODO: Bootstrap a Nomad cluster with 6PLANE communication (alternative to Flannel and other VXLAN). +TODO: Document VPN setup using [algo] (WireGuard + IPSEC) + +## ZeroTier Setup + +### IPv4 + +This setup will route from `10.147.16.0` to `10.147.17.255`. Zerotier will have `10.147.17.0` to `10.147.17.255` to autoassign among it's devices. +The beggining of the range will be reserved to use on on the phyisical router side. + +Using a `/23` netmask instead of a `/24` allow us to configure our router to use a Layer 2 Bridge, and propagate packates from ZeroTier into their LAN. +This mean that any device on the physical side of the router will be visible to the virtual network, and any node on the virtual will be visible on the physical side as well. + +If you need, you may increase the netmask. Just search for any netmask calculator online, and adjust what is allowed to be routed on the ZeroTier network. + +For this bridge to work, delete everything on **Managed Routes** and add `10.147.16.0/23` to have ZeroTier also acknoledge what the travel router will bridge. +Leave the second box empty to route to `(lan)`. + +### IPv6 + +We will provide 3 different IPv6 IPs per device conneccted on ZeroTier network: + +- **RFC4193**: `/128` to connect directly to the device using IPv6, giving each connected device a single IP +- **6PLANE**: `/80` o allow Docker daemon to expose each container on the network by providing each with an IP +- **Auto-Assign Range**: Using a `/48` range with **ULA addresses**, to allow manual configuration of the Bridge on the router side + +[ULA] addresses are similar to a private network range of IPv4. +The suggestion is that each [ULA] range should be selected using MAC address and time, and there [are tools](https://www.ultratools.com/tools/rangeGenerator) to you create yours. + +With ULA configured, you will be able to give the physical router its own `/48` range, +and it will forward the prefixes, so the physical devices also have a `/80` for their containers and a `/128` for themselves. + +Summing everything up, it will endup like this: + +![Zerotier routing table](imgs/routing-table.jpg) +![Zerotier Auto Assign Pool](imgs/routing-table.jpg) +![Zerotier ULA assignment](imgs/zerotier-ipv6-ula-assignment.jpg) + +## Travel Router Setup + +TODO: Document OpenWRT setup + +## TODO: VLAN and better isolation + +[ZeroTier]: https://zerotier.com/ +[6PLANE]: https://zerotier.atlassian.net/wiki/spaces/SD/pages/7274520/Using+NDP+Emulated+6PLANE+Addressing+With+Docker +[ULA]: https://en.wikipedia.org/wiki/Unique_local_address +[algo]: https://github.com/trailofbits/algo \ No newline at end of file diff --git a/hypriot/README.md b/hypriot/README.md index 5a37226..c15789e 100644 --- a/hypriot/README.md +++ b/hypriot/README.md @@ -31,4 +31,4 @@ Connect from the controller with: `sudo minicom pX` Files must start with `#cloud-config` to be valid configuration. -Validate on [CoreOs](https://coreos.com/validate/) \ No newline at end of file +Validate on [CoreOs](https://coreos.com/validate/)