From 023eeee11c4ab486820938a986597bfbd614f7f1 Mon Sep 17 00:00:00 2001 From: root Date: Sat, 27 Dec 2025 14:10:39 +0000 Subject: [PATCH] first commit --- Network Inventory.docx | Bin 0 -> 37948 bytes README.md | 265 ++++++++++++++++++++++++++++++++++++++ download_reservations.csv | 34 +++++ 3 files changed, 299 insertions(+) create mode 100644 Network Inventory.docx create mode 100644 README.md create mode 100644 download_reservations.csv diff --git a/Network Inventory.docx b/Network Inventory.docx new file mode 100644 index 0000000000000000000000000000000000000000..b137ce039c4cd41334fac3836650998502e51c60 GIT binary patch literal 37948 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 a(#Y@gxbib3Fzj!*02u;Htf6?=xBn0O|27i< literal 0 HcmV?d00001 diff --git a/README.md b/README.md new file mode 100644 index 0000000..56f5b62 --- /dev/null +++ b/README.md @@ -0,0 +1,265 @@ +# Home Network Infrastructure Documentation + +## Overview + +This documentation covers the complete home network setup including IP allocation scheme, DHCP reservations, VLANs, and device inventory for a 192.168.0.0/24 network managed by OPNsense. + +**Network:** 192.168.0.0/24 +**Router:** OPNsense at 192.168.0.1 +**Last Updated:** December 27, 2025 + +## Network Architecture + +### Core Infrastructure +- **Router/Firewall:** OPNsense (192.168.0.1) +- **DNS/Ad Blocking:** AdGuard Home (192.168.0.11) +- **Reverse Proxy:** Nginx Proxy Manager (192.168.0.10) +- **VPN:** Tailscale integration + +### IP Allocation Scheme + +``` +192.168.0.1 - OPNsense Router +192.168.0.2-9 - Reserved for future infrastructure +192.168.0.10-29 - Core Services (VMs/Containers) +192.168.0.30-49 - User Computers & Laptops +192.168.0.50-69 - Mobile Devices & Tablets +192.168.0.70-79 - TVs & Media Devices +192.168.0.80-99 - Smart Home IoT +192.168.0.100-119 - Network Infrastructure (APs, switches, extenders) +192.168.0.120-139 - Hypervisors & Storage +192.168.0.140-149 - Reserved for expansion +192.168.0.150-200 - DHCP Pool (Guest devices only) +192.168.0.201-254 - Future expansion +``` + +## Infrastructure - Core Services (10-29) + +| Hostname | Service | IP | MAC Address | Type | Status | +|----------|---------|-----|-------------|------|--------| +| npm | Nginx Proxy Manager | 192.168.0.10 | bc:24:11:5b:1d:a2 | Docker | ✅ Active | +| adguard | AdGuard Home | 192.168.0.11 | BC:24:11:47:27:43 | LXC | ✅ Active | +| vaultwarden | Vaultwarden | 192.168.0.12 | BC:24:11:A8:44:A1 | LXC | ✅ Active | +| crafty | Crafty Controller | 192.168.0.13 | BC:24:11:70:10:E5 | LXC | ✅ Active | +| nextcloud | Nextcloud | 192.168.0.14 | 02:99:5b:4c:b3:e6 | VM | ✅ Active | +| homeassistant | Home Assistant | 192.168.0.15 | 02:46:0b:d8:35:7c | VM | ✅ Active | +| foundryvtt | FoundryVTT | 192.168.0.16 | bc:24:11:ad:cb:f6 | VM | ✅ Active | +| openmediavault | OpenMediaVault (NAS) | 192.168.0.17 | bc:24:11:2c:68:58 | VM | ✅ Active | +| wordpress-irodori | WordPress - Irodori | 192.168.0.18 | bc:24:11:42:70:2a | VM | ✅ Active | +| wordpress-dustin | WordPress - Dustin | 192.168.0.19 | bc:24:11:7e:fc:ff | VM | ✅ Active | + +## User Devices - Computers (30-49) + +| Hostname | Device | IP | MAC Address | Notes | +|----------|--------|-----|-------------|-------| +| jamiepc | Jamie's PC | 192.168.0.30 | 50:eb:f6:5a:71:f2 | Primary workstation | +| jamie-gaming-vm | Linux Gaming VM | 192.168.0.31 | bc:24:11:b2:20:b0 | Gaming VM | +| 3d-printer | 3D Printer (Bambu A1) | 192.168.0.32 | 10:b4:1d:d7:02:2c | Network printer | +| haruka-laptop | Haruka's Laptop | 192.168.0.33 | a8:41:f4:8d:b9:5b | Laptop | +| hp-printer | HP Printer | 192.168.0.34 | a8:b1:3b:01:c2:ce | Network printer | + +## Mobile Devices (50-69) + +| Hostname | Device | IP | MAC Address | Notes | +|----------|--------|-----|-------------|-------| +| jamie-phone | Jamie's Mobile (S23) | 192.168.0.50 | 1a:de:e8:f1:a5:d3 | Samsung Galaxy S23 | +| haruka-phone | Haruka's Mobile (S25) | 192.168.0.51 | 4e:c7:f7:bc:f1:c5 | Samsung Galaxy S25 | +| samsung-tablet | Samsung Galaxy Tablet | 192.168.0.52 | ee:a1:23:9f:1e:c5 | Tablet | + +## TVs & Media Devices (70-79) + +| Hostname | Device | IP | MAC Address | Notes | +|----------|--------|-----|-------------|-------| +| unknown-media-1 | Unknown Media Device | 192.168.0.70 | e8:ca:c8:6d:b0:7f | Likely TV or streaming | +| unknown-media-2 | Unknown Media Device | 192.168.0.71 | a0:d0:5b:c7:13:28 | Likely TV or streaming | +| unknown-media-3 | Unknown Media Device | 192.168.0.72 | 20:23:51:08:19:76 | Likely TV or streaming | + +## Smart Home / IoT (80-99) + +| Hostname | Device | IP | MAC Address | Notes | +|----------|--------|-----|-------------|-------| +| tapo-hub-h100 | Tapo Hub/Chime H100 | 192.168.0.80 | a8:29:48:88:84:d6 | Smart home hub | +| tapo-leak-t300 | Tapo Water Leak Sensor T300 | 192.168.0.81 | 20:23:51:d0:b1:7d | Battery powered | +| tapo-bedside-l530 | Tapo Smart Bulb L530 - Bedside | 192.168.0.82 | 20:23:51:08:19:76 | Smart bulb | +| tapo-bedroom-l530 | Tapo Smart Bulb L530 - Bedroom | 192.168.0.83 | b0:19:21:17:a7:c3 | Smart bulb | +| tapo-hallway-a-l530 | Tapo Smart Bulb L530 - Hallway A | 192.168.0.84 | f0:09:0d:b6:4a:8d | Smart bulb | +| tapo-hallway-b-l530 | Tapo Smart Bulb L530 - Hallway B | 192.168.0.85 | 40:ae:30:67:a2:46 | Smart bulb | +| tapo-porch-l530 | Tapo Smart Bulb L530 - Porch | 192.168.0.86 | 3c:64:cf:63:58:da | Smart bulb | +| tapo-plug-jamiepc-p110 | Tapo P110 Smart Plug - Jamie PC | 192.168.0.87 | 40:ae:30:50:c8:62 | PC power monitoring | +| tapo-plug-3dprinter-p110 | Tapo P110 Smart Plug - 3D Printer | 192.168.0.88 | b0:19:21:17:a5:7e | 3D printer power | +| yeelight-plug | Yeelight Smart Plug | 192.168.0.89 | 58:b6:23:41:e1:ff | Smart plug | +| reolink-kitchen | Reolink E1 Camera - Kitchen | 192.168.0.90 | 54:ef:33:bd:be:e0 | Security camera | +| reolink-outdoor | Reolink Camera - Outdoor | 192.168.0.91 | e8:ca:c8:6d:b0:7f | Security camera | +| tuya-unknown-1 | Tuya Device - Unknown | 192.168.0.92 | a8:b1:3b:01:c2:ce | Dehumidifier/lights/IR | + +## Network Infrastructure (100-119) + +| Hostname | Device | IP | MAC Address | Notes | +|----------|--------|-----|-------------|-------| +| tplink-ax55 | TP-Link AX55 Router/AP | 192.168.0.100 | 40:ae:30:f8:27:f0 | WiFi Access Point | +| tplink-re450 | TP-Link RE450 Range Extender | 192.168.0.101 | 5c:62:8b:8d:cb:d6 | WiFi Extender | + +## Hypervisors & Storage (120-139) + +| Hostname | Device | IP | MAC Address | Notes | +|----------|--------|-----|-------------|-------| +| proxmox-1 | Proxmox Server 1 | 192.168.0.120 | 10:ff:e0:11:46:9f | Primary hypervisor | +| proxmox-2 | Proxmox Server 2 | 192.168.0.121 | 74:d4:35:97:f4:9d | Secondary hypervisor | + +## DHCP Configuration + +### Current Settings +- **DHCP Pool:** 192.168.0.150 - 192.168.0.200 (51 addresses) +- **Purpose:** Guest devices and temporary connections +- **Static Reservations:** 33 devices with confirmed MACs + +### DNS Settings +- **Primary DNS:** 192.168.0.11 (AdGuard Home) +- **Secondary DNS:** 192.168.0.1 (OPNsense fallback) + +## VPN / Tailscale + +| IP | MAC Address | Purpose | +|----|-------------|---------| +| 100.65.128.1 | e0:cb:19:60:87:70 | Tailscale VLAN device | +| 100.65.159.134 | bc:24:11:be:cf:af | Tailscale VLAN device (permanent) | + +## Unknown/Unidentified Devices + +| Current IP | MAC Address | Hostname | Notes | +|------------|-------------|----------|-------| +| 192.168.0.110 | 5e:81:ec:77:6b:73 | sm-l305f | Unknown Samsung device | +| 192.168.0.153 | d4:54:8b:29:2a:07 | kansaigaijinpc | Jamie's PC (secondary/ignore) | +| 192.168.0.155 | 76:13:3f:a1:13:74 | harukasan-notab-a8 | Unknown - possibly old tablet | + +## Network Statistics + +- **Total Active Devices:** 35 +- **VMs/Containers:** 10 +- **User Computers:** 5 (3 PCs + 2 printers) +- **Mobile Devices:** 3 (2 phones + 1 tablet) +- **TVs & Media:** 3 +- **Smart Home/IoT:** 13 (9 Tapo + 1 Yeelight + 2 Reolink + 1 Tuya) +- **Network Infrastructure:** 2 (AP + Extender) +- **Hypervisors:** 2 +- **Static Assignments:** 33 devices +- **DHCP Pool Size:** 51 addresses +- **Unknown Devices:** 3 + +## Known Issues + +### Tapo App Issues +- **Bedroom light** (192.168.0.83): Showing incorrect info in app +- **3D printer plug** (192.168.0.88): App showing wrong MAC, verify after print finishes +- **Resolution:** Use ARP table MACs as source of truth + +### Devices Needing Attention +- Factory reset recommended for Tapo devices showing app glitches after migration +- Unknown devices at .110, .153, .155 need identification + +## Maintenance Tasks + +### Regular Tasks +- [ ] Monthly: Review DHCP leases for new unknown devices +- [ ] Quarterly: Audit static IP assignments +- [ ] Quarterly: Update device firmware (routers, APs, cameras) +- [ ] Yearly: Review and optimize IP allocation scheme + +### Pending Tasks +- [ ] Identify unknown Samsung device at 192.168.0.110 +- [ ] Review secondary PC at 192.168.0.153 +- [ ] Identify/remove old tablet lease at 192.168.0.155 +- [ ] Factory reset Tapo devices with app issues + +## Security Considerations + +1. **Network Segmentation:** Consider VLANs for IoT devices +2. **Guest Network:** DHCP pool isolated from static devices +3. **Firewall Rules:** OPNsense manages inter-VLAN traffic +4. **DNS Filtering:** AdGuard Home provides ad/tracker blocking +5. **Remote Access:** Tailscale VPN for secure remote access + +## Backup Strategy + +### What to Backup +1. **OPNsense Configuration:** XML backup from web interface +2. **DHCP Reservations:** CSV export (included in this repo) +3. **Network Documentation:** This README and related files +4. **AdGuard Home Config:** Settings and filter lists + +### Restoration Process +See `NETWORK-RESTORE.md` for detailed restoration procedures. + +## Migration Notes + +### Completed Migrations ✅ +- Jamie's PC (192.168.0.30) +- Jamie Gaming VM (192.168.0.31) +- 3D Printer (192.168.0.32) +- Jamie's Phone (192.168.0.50) +- Haruka's Phone (192.168.0.51) + +### Pending Migrations 🔄 +- Haruka's Laptop → 192.168.0.33 +- HP Printer → 192.168.0.34 +- Samsung Tablet → 192.168.0.52 + +### Waiting for DHCP Renewal ⏳ +- Samsung Tablet (will get .52 on next renewal) + +## Troubleshooting + +### Device Not Getting Reserved IP +1. Check MAC address in router's ARP table +2. Verify DHCP reservation exists +3. Release/renew DHCP lease on device +4. Check for MAC address conflicts + +### Cannot Access Device +1. Verify device is online (ping IP) +2. Check if device changed MAC (WiFi vs Ethernet) +3. Review firewall rules in OPNsense +4. Check DNS resolution in AdGuard Home + +### IoT Device Issues +1. Tapo devices: Check app vs ARP table for correct MAC +2. Battery devices (water sensor): Won't always appear in ARP +3. For offline devices: Power cycle or factory reset + +## Tools & Commands + +### Identify Device by MAC +```bash +# Online MAC lookup +curl -s "https://api.macvendors.com/5c:62:8b:8d:cb:d6" + +# Or use OUI lookup +# First 6 characters (3 octets) identify manufacturer +``` + +### Scan Network +```bash +# Using nmap +nmap -sn 192.168.0.0/24 + +# Using arp-scan (more reliable) +sudo arp-scan --interface=eth0 192.168.0.0/24 +``` + +### Check Current IP/MAC +```bash +# View ARP table +arp -a + +# Or on OPNsense +arp -an | grep 192.168.0 +``` + +--- + +**Configuration Files:** +- `dhcp-reservations.csv` - DHCP static assignments export +- `Network Inventory.docx` - Human-readable network map +- `opnsense-config.xml` - OPNsense configuration backup (not in repo) + +**Last Updated:** December 28, 2025 diff --git a/download_reservations.csv b/download_reservations.csv new file mode 100644 index 0000000..2220684 --- /dev/null +++ b/download_reservations.csv @@ -0,0 +1,34 @@ +entry,ip_address,hw_address,hostname,description +1,192.168.000.010,BC:24:11:5b:1d:a2,docker,Docker LXC +2,192.168.000.011,BC:24:11:47:27:43,adguard,Adguard Home LXC +3,192.168.000.012,BC:24:11:A8:44:A1,vaultwarden,Vaultwarden LXC +4,192.168.000.013,BC:24:11:70:10:ff,crafty-controller,Crafty Controller LXC +5,192.168.000.014,02:99:5b:4c:b3:e6,nextcloud,Nextcloud VM +6,192.168.000.015,02:46:0b:d8:35:7c,home-assistant,Home Assistant VM +7,192.168.000.016,BC:24:11:2D:63:66,foundryvtt,FoundryVTT VM +8,192.168.000.017,bc:24:11:2c:68:58,omv,OpenMediaVault VM +9,192.168.000.018,bc:24:11:42:70:2a,irodori-wp,Wordpress LXC - Irodori +10,192.168.000.019,bc:24:11:7e:fc:ff,dustin-wp,Wordpress LXC - Dustin +11,192.168.000.030,50:EB:F6:5A:71:F2,jamie-pc,Main PC - Ethernet +12,192.168.000.031,bc:24:11:b2:20:b0,pop_os,Linux Gaming VM +13,192.168.000.032,10:b4:1d:d7:02:2c,bambu-a1,3D Printer +14,192.168.000.033,a8:41:f4:8d:b9:5b,harukas-laptop,Haruka's Laptop +15,192.168.000.034,a8:b1:3b:01:c2:ce,printer,HP Printer +16,192.168.000.050,1a:de:e8:f1:a5:d3,jamies-s23,Jamies Phone +17,192.168.000.051,4e:c7:f7:bc:f1:c5,harukas-s25,Harukas Phone +18,192.168.000.052,ee:a1:23:9f:1e:c5,tablet-a8,Samsung Tablet A8 +19,192.168.000.070,a0:d0:5b:c7:13:28,livingroom-tv,Samsung TV +20,192.168.000.071,b0:e4:5c:9e:ad:ca,samsung-soundbar,Samsung Soundbar-maybe +21,192.168.000.080,a8:29:48:88:84:d6,chime,Tapo Hub/Chime H100 +22,192.168.000.081,20:23:51:d0:b1:7d,water-leak-sensor,Tapo Water Leak Sensor T300 +23,192.168.000.082,20:23:51:08:19:76,bedside-light,Tapo Light L530 - Bedisde +24,192.168.000.084,f0:09:0d:b6:4a:8d,hallway-a-light,Tapo Light L530 - Hallway A +25,192.168.000.085,40:ae:30:67:a2:46,hallway-b-light,Tapo Light L530 - Hallway B +26,192.168.000.086,3c:64:cf:63:58:da,porch-light,Tapo Light L530 - Porch +27,192.168.000.089,58:b6:23:41:e1:ff,standing-lamp,Yeelight Color4 - Standing Lamp +28,192.168.000.090,54:ef:33:bd:be:e0,kitchen-camera,Reolink E1 +29,192.168.000.091,e8:ca:c8:6d:b0:7f,outdoor-camera,Reolink Argus Eco +30,192.168.000.100,40-AE-30-F8-27-F0,AX55,TP-Link AX55 Access Point +31,192.168.000.101,5c:62:8b:8d:cb:d6,RE450,TP-Link RE450 Range Extender +32,192.168.000.120,10:ff:e0:11:46:9f,proxmox-1,Proxmox 1 +33,192.168.000.121,74:d4:35:97:f4:9d,proxmox-2,Proxmox 2