diff --git a/docs/photos/iot_sandbox_network.png b/docs/photos/iot_sandbox_network.png new file mode 100644 index 0000000..2e202c6 Binary files /dev/null and b/docs/photos/iot_sandbox_network.png differ diff --git a/docs/posts/sandbox-iot-network.md b/docs/posts/sandbox-iot-network.md new file mode 100644 index 0000000..0e7e470 --- /dev/null +++ b/docs/posts/sandbox-iot-network.md @@ -0,0 +1,112 @@ +--- +title: "Sandbox IOT Network" +date: 2024-04-27 +draft: false +tags: ["RaspberryPi", "linux", "router", "wireguard", "tasmota"] +authors: ["trent"] +post: 34 +--- +date: 2024-04-27 + + +## Introduction +This is a scheme for connecting your smart devices to an sandboxed subnet +such that they cannot reach or be reached from anywhere outside of their subnet, +with the only exception being that each smart device can reach, and be reached +from an application server. + +Using a wireguard tunnel between the application server and (wifi) ap server both enables the +flow of traffic between the application server and smart devices on the sandboxed +subnet, but also encrypts the mqtt traffic. + + +
+ +
iot sandbox network
+
+ +## Hostapd +First install `hostapd` on your RaspberryPi. The relevant config file is +`/etc/hostapd/hostapd.conf`. And then start/enable hostapd with `systemctl`. + +## Describe Wifi AP interface +Without explicitly routing traffic between eth0 and wlan0, no devices connecting +to the wifi ap will be able to reach, or be reached from, the internet or your +home network. +```conf +# /etc/network/interfaces.d/wlan0 + +auto wlan0 +iface wlan0 inet static + address 10.0.8.1 + network 10.0.8.0 + netmask 255.255.255.0 + broadcast 10.0.8.255 +``` + +## Install and configure dnsmasq (for dhcp) +Each device connecting to the wifi ap will need to know its' ip address, +therefore you can use dnsmasq for dhcp service. + +Assuming you can figure out how to navigate the tasmota webui of each device +well enough to set the hostname and figure out the mac addr, +on the RaspberryPi wifi ap install dnsmasq and edit the config file. +```conf +# /etc/dnsmasq.conf +listen-address=10.0.8.1 +interface=wlan0 +dhcp-range=10.0.8.150,10.0.8.200 +dhcp-host=bedroomlight,34:ab:95:c5:27:15,10.0.8.2 +dhcp-host=kitchenlight,40:f5:20:11:a9:5d,10.0.8.3 +dhcp-host=bathroomlight,70:03:9F:C5:7C:4C,10.0.8.4 + +``` + +## Create Wireguard Tunnel Between Application Server and Wifi AP +The wireguard tunnel both encrypts traffic between the application +server and the wifi ap server, but also enables communication between the +dashboard application server and the smart devices. The devil is in the +configuration details. + +I think you need to enable forwarding in sysctl on the wifi ap server so +that traffic can pass between `wlan0` and `wg0` (but I'm not entirely positive). +```conf +# /etc/sysctl.conf +net.ipv4.ip_forward=1 +``` + +Configure wg-quick@wg0 on the wifi ap server as follows. +```conf +# /etc/wireguard/wg0.conf +[Interface] +Address = 10.88.1.1/24 +PrivateKey = +ListenPort = 4449 + +[Peer] +PublicKey = +AllowedIPs = 10.88.1.2/32 +``` + +Configure wg-quick@wg0 on the application server as follows. +** The magic is in the `AllowedIPs` value. ** +```conf +[Interface] +Address = 10.88.1.2/24 +PrivateKey = + +[Peer] +PublicKey = +AllowedIPs = 10.0.88.0/24,10.0.8.0/24 +Endpoint = 192.168.1.88:4444 +PersistentKeepalive = 25 +``` + +## Next Step +The next step, not represented in the diagram, is to attach your +application server to a second wireguard tunnel such that it can be +reached from your client devices. + +Note that you can also double-nat the application server in this scheme, because why not? +Everything happens inside wireguard tunnels. In my diagram the application server +is an virtual machine that is double-natted on an `libvirt` subnet. diff --git a/mkdocs.yml b/mkdocs.yml index d1a4605..1faa4cd 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -24,6 +24,7 @@ markdown_extensions: nav: - Home: - Home: index.md + - "Sandbox IOT Network": posts/sandbox-iot-network.md - "QuasselCore on Debian 11": posts/quasselcore-on-debian-11.md - "Forklift Upgrade Arch Linux To A Dell Precision 3561": posts/forklift-upgrade-arch-linux-precision-3561.md - "Ansible KVM Router Lab Part 6": posts/ansible-kvm-router-lab-part-6.md @@ -71,6 +72,7 @@ nav: - FreeCodeCampChallenges: https://trentspalmer.github.io/fcc-challenges/ - DeviceLayout: https://trentpalmer.work/6a57bbe24d8244289610bf57533d6c6f/ - Posts: + - "Sandbox IOT Network": posts/sandbox-iot-network.md - "QuasselCore on Debian 11": posts/quasselcore-on-debian-11.md - "Forklift Upgrade Arch Linux To A Dell Precision 3561": posts/forklift-upgrade-arch-linux-precision-3561.md - "Ansible KVM Router Lab Part 6": posts/ansible-kvm-router-lab-part-6.md