# OpenWRT and AdGuard Home Configuration Guide ## Network Overview **Current Setup:** - Router: 10.0.0.254 (TPLink) - DNS: 10.0.0.55 (HomeAssistant/AdGuard) **New Setup:** - OpenWRT Router: 10.0.0.246 - New AdGuard: 10.0.0.245 - DHCP Range: 10.0.0.1 - 10.0.0.200 --- ## Part 1: Initial OpenWRT Setup ### 1.1 First Login and Basic Configuration 1. **Connect to OpenWRT:** - Connect via Ethernet to LAN port - Default IP is usually `192.168.1.1` - Access via browser: `http://192.168.1.1` - Default login: `root` (no password initially) 2. **Set Root Password:** ``` System → Administration → Router Password ``` Set a strong password immediately. ### 1.2 Configure LAN Interface 1. **Navigate to Network → Interfaces** 2. **Edit LAN interface:** - Protocol: `Static address` - IPv4 address: `10.0.0.246` - IPv4 netmask: `255.255.255.0` - IPv4 gateway: `10.0.0.254` (your main TPLink router) - Use custom DNS servers: `10.0.0.245` (your new AdGuard) - Click "Save" then "Save & Apply" 3. **Reconnect:** - Your OpenWRT will now be at `http://10.0.0.246` - You may need to manually set your PC to 10.0.0.x network temporarily --- ## Part 2: DHCP Server Configuration ### 2.1 Basic DHCP Settings 1. **Navigate to Network → DHCP and DNS** 2. **Server Settings (General Settings tab):** - Check "Authoritative" if this will be the only DHCP server on this network - DNS forwardings: `10.0.0.245` - Click "Save" 3. **DHCP Pool Settings:** - Navigate to Network → Interfaces → LAN → Edit → DHCP Server tab - Check "Enable this DHCP server" - Start: `1` - Limit: `200` - Lease time: `12h` (or your preference) ### 2.2 Static Leases Configuration 1. **Navigate to Network → DHCP and DNS → Static Leases tab** 2. **Add Static Leases:** - Click "Add" - Hostname: Device name (e.g., "homeassistant") - MAC Address: Device MAC - IPv4 Address: Desired IP (e.g., 10.0.0.55) - Lease time: Leave empty for infinite - Click "Save" then "Save & Apply" Example static leases you might want: ``` 10.0.0.55 - HomeAssistant/Current AdGuard 10.0.0.245 - New AdGuard 10.0.0.246 - OpenWRT itself 10.0.0.254 - TPLink Router ``` ### 2.3 DHCP Options for Custom DNS per Client To set different DNS servers for specific clients, you'll need to use DHCP options. **Option 1: Via LuCI (GUI)** 1. Navigate to Network → DHCP and DNS → Static Leases 2. When adding/editing a static lease, you can add DHCP options 3. Add option `6` with comma-separated DNS IPs: `8.8.8.8,8.8.4.4` **Option 2: Via Config File (more flexible)** SSH into OpenWRT and edit `/etc/config/dhcp`: ```bash vi /etc/config/dhcp ``` Add configuration like this: ``` config host option name 'special-device' option mac 'AA:BB:CC:DD:EE:FF' option ip '10.0.0.100' option dns '8.8.8.8 8.8.4.4' config host option name 'standard-device' option mac '11:22:33:44:55:66' option ip '10.0.0.101' # Uses default DNS (AdGuard at 10.0.0.245) ``` Then restart dnsmasq: ```bash /etc/init.d/dnsmasq restart ``` --- ## Part 3: Access Control Configuration ### 3.1 Install Required Packages SSH into your OpenWRT router and install firewall management tools: ```bash opkg update opkg install luci-app-firewall opkg install iptables-mod-extra ``` ### 3.2 Method 1: MAC Address Filtering (Simple Block) **Via LuCI:** 1. Navigate to Network → Wireless (if WiFi) or DHCP 2. For each device you want to block: - Add to static lease with specific IP - Then create firewall rule to block that IP **Create Firewall Rule:** 1. Network → Firewall → Traffic Rules 2. Add new rule: - Name: `Block Device Name` - Source zone: `lan` - Source MAC or IP: `10.0.0.XX` or `AA:BB:CC:DD:EE:FF` - Destination zone: `wan` - Action: `reject` ### 3.3 Method 2: IP Sets for Group Management (Advanced) This allows you to easily manage groups of blocked devices. **SSH Configuration:** Create custom firewall rules in `/etc/firewall.user`: ```bash vi /etc/firewall.user ``` Add: ```bash # Create IP set for blocked devices ipset create blocked_devices hash:ip -exist # Add devices to blocked list (can be managed dynamically) ipset add blocked_devices 10.0.0.100 -exist ipset add blocked_devices 10.0.0.101 -exist # Block internet access for devices in the set iptables -I FORWARD -m set --match-set blocked_devices src -o eth1 -j REJECT ``` Apply: ```bash /etc/init.d/firewall restart ``` **To add/remove devices from block list:** ```bash # Block a device ipset add blocked_devices 10.0.0.150 # Unblock a device ipset del blocked_devices 10.0.0.150 # List blocked devices ipset list blocked_devices ``` ### 3.4 Method 3: Parental Controls Package (Easiest GUI) Install parental controls: ```bash opkg update opkg install luci-app-advanced-reboot opkg install luci-app-simple-adblock # Optional, if not using AdGuard ``` For better device management, install: ```bash opkg install luci-app-nlbwmon # Network bandwidth monitoring ``` This gives you per-device traffic monitoring and easier access control. --- ## Part 4: AdGuard Home Setup (10.0.0.245) ### 4.1 Installation Options **Option A: Docker (Recommended if you have Docker)** ```bash docker run -d \ --name adguardhome \ --restart unless-stopped \ -v /path/to/adguard/work:/opt/adguardhome/work \ -v /path/to/adguard/conf:/opt/adguardhome/conf \ -p 10.0.0.245:53:53/tcp \ -p 10.0.0.245:53:53/udp \ -p 10.0.0.245:3000:3000/tcp \ adguard/adguardhome ``` **Option B: Native Linux Install** ```bash curl -s -S -L https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -v ``` **Option C: Windows** Download from: https://github.com/AdguardTeam/AdGuardHome/releases ### 4.2 Initial AdGuard Configuration 1. **Access Setup:** `http://10.0.0.245:3000` 2. **Setup Wizard:** - Admin Web Interface: Port `3000` (or your choice) - DNS Server: Port `53` - Admin credentials: Set username and password 3. **Configure Upstream DNS:** - Navigate to Settings → DNS settings - Add upstream DNS servers: ``` https://dns.cloudflare.com/dns-query https://dns.google/dns-query 1.1.1.1 8.8.8.8 ``` - Enable parallel queries for better performance - Set rate limit: 20 (adjust based on needs) 4. **Configure Private Reverse DNS:** - Add your local network: `10.0.0.0/24` - Enable "Use private reverse DNS resolvers" 5. **Enable Query Logging:** - Settings → General settings - Query logs retention: 7 days (or your preference) - Statistics retention: 90 days ### 4.3 Blocklists Configuration Add recommended blocklists: 1. Navigate to Filters → DNS blocklists 2. Add these lists: ``` # OISD Big List (comprehensive) https://big.oisd.nl/ # AdGuard DNS filter https://adguardteam.github.io/AdGuardSDNSFilter/Filters/filter.txt # Steven Black's Unified Hosts https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts # Hagezi's Pro DNS Blocklist https://raw.githubusercontent.com/hagezi/dns-blocklists/main/wildcard/pro-onlydomains.txt ``` 3. Click "Save" and "Apply" ### 4.4 Custom Filtering Rules For local network DNS resolution, add custom rules: 1. Navigate to Filters → DNS rewrites 2. Add entries: ``` openwrt.local → 10.0.0.246 adguard.local → 10.0.0.245 homeassistant.local → 10.0.0.55 router.local → 10.0.0.254 ``` --- ## Part 5: Integration and Testing ### 5.1 Point OpenWRT to AdGuard Ensure OpenWRT is configured to use AdGuard: 1. Network → Interfaces → LAN → Edit 2. Advanced Settings tab: - Use custom DNS servers: `10.0.0.245` 3. Network → DHCP and DNS: - DNS forwardings: `10.0.0.245` ### 5.2 Testing DHCP 1. **Connect a test device** to the OpenWRT network 2. **Check IP assignment:** ```bash # On Windows ipconfig /all # On Linux ip addr show ``` 3. **Verify you receive:** - IP in range 10.0.0.1-200 - DNS server: 10.0.0.245 - Gateway: 10.0.0.246 or 10.0.0.254 ### 5.3 Testing DNS Resolution ```bash # On Windows nslookup google.com 10.0.0.245 # On Linux dig @10.0.0.245 google.com ``` ### 5.4 Testing Access Control 1. Add a device to block list 2. Try to access internet from that device 3. Verify connection is blocked 4. Check OpenWRT firewall logs: Status → Firewall ### 5.5 Monitor AdGuard 1. Access AdGuard dashboard: `http://10.0.0.245:3000` 2. Check: - Query log shows requests - Blocked requests are being filtered - All devices are showing up --- ## Part 6: Advanced Configuration ### 6.1 Create Easy Device Management Script Save this script on OpenWRT as `/root/device-control.sh`: ```bash #!/bin/sh # Device Access Control Script for OpenWRT ACTION=$1 DEVICE_IP=$2 DEVICE_NAME=$3 case $ACTION in block) ipset add blocked_devices $DEVICE_IP -exist echo "Blocked: $DEVICE_NAME ($DEVICE_IP)" ;; unblock) ipset del blocked_devices $DEVICE_IP echo "Unblocked: $DEVICE_NAME ($DEVICE_IP)" ;; list) echo "Currently blocked devices:" ipset list blocked_devices ;; status) ipset test blocked_devices $DEVICE_IP && echo "$DEVICE_IP is BLOCKED" || echo "$DEVICE_IP is ALLOWED" ;; *) echo "Usage: $0 {block|unblock|list|status} [IP] [NAME]" exit 1 ;; esac ``` Make executable: ```bash chmod +x /root/device-control.sh ``` Usage: ```bash # Block a device ./device-control.sh block 10.0.0.100 "Kids Tablet" # Unblock ./device-control.sh unblock 10.0.0.100 "Kids Tablet" # List all blocked ./device-control.sh list # Check status ./device-control.sh status 10.0.0.100 ``` ### 6.2 Setup Scheduled Device Controls (Optional) To block devices at specific times (e.g., bedtime): ```bash # Edit crontab crontab -e ``` Add entries: ```cron # Block kids devices at 9 PM 0 21 * * * /root/device-control.sh block 10.0.0.100 "Kids Tablet" # Unblock at 7 AM 0 7 * * * /root/device-control.sh unblock 10.0.0.100 "Kids Tablet" ``` ### 6.3 Backup Configurations **OpenWRT Backup:** 1. System → Backup / Flash Firmware 2. Click "Generate archive" 3. Save the `.tar.gz` file **AdGuard Backup:** 1. Settings → General settings 2. Scroll to "Export settings" 3. Click "Download" to save YAML config --- ## Part 7: Network Topology Options ### Option A: OpenWRT as Router (Full Gateway) ``` Internet → TPLink (10.0.0.254) → OpenWRT (10.0.0.246) → Devices ↓ AdGuard (10.0.0.245) ``` - Requires routing configuration - More complex but more control ### Option B: OpenWRT as DHCP/Access Point (Recommended for your setup) ``` Internet → TPLink (10.0.0.254) ← Gateway for all ↓ OpenWRT (10.0.0.246) - DHCP Server + Access Control ↓ AdGuard (10.0.0.245) - DNS Filtering ↓ Devices (10.0.0.1-200) ``` - OpenWRT provides DHCP and access control - TPLink remains gateway - AdGuard handles DNS - Simpler setup, which I've documented above --- ## Troubleshooting ### DHCP not working ```bash # Check DHCP status /etc/init.d/dnsmasq status # Restart DHCP /etc/init.d/dnsmasq restart # Check logs logread | grep -i dhcp ``` ### DNS not resolving ```bash # Test DNS on OpenWRT itself nslookup google.com 10.0.0.245 # Check if AdGuard is running # On AdGuard server netstat -tulpn | grep :53 ``` ### Access control not working ```bash # Check firewall rules iptables -L FORWARD -v -n # Check ipset ipset list blocked_devices # Reload firewall /etc/init.d/firewall restart ``` ### Can't access OpenWRT web interface ```bash # SSH in and check netstat -tulpn | grep :80 # Restart web interface /etc/init.d/uhttpd restart ``` --- ## Quick Reference Commands ```bash # OpenWRT /etc/init.d/network restart # Restart network /etc/init.d/dnsmasq restart # Restart DHCP/DNS /etc/init.d/firewall restart # Restart firewall logread # View system logs # View DHCP leases cat /tmp/dhcp.leases # View current connections cat /proc/net/nf_conntrack # Monitor traffic tcpdump -i br-lan port 53 # Monitor DNS traffic ``` --- ## Next Steps 1. **Set up OpenWRT first** with static IP 10.0.0.246 2. **Configure DHCP** with your range and static leases 3. **Install and configure AdGuard** on 10.0.0.245 4. **Point OpenWRT DNS** to AdGuard 5. **Set up access control** using one of the methods above 6. **Test thoroughly** with various devices 7. **Create backups** of both configurations --- ## Security Recommendations 1. **Change default passwords** on both OpenWRT and AdGuard 2. **Enable HTTPS** for OpenWRT web interface (System → Administration → HTTP(S) Access) 3. **Disable SSH password authentication**, use keys instead 4. **Keep OpenWRT updated**: System → Software → Update lists 5. **Enable AdGuard statistics** to monitor unusual activity 6. **Set up firewall rules** to prevent LAN → LAN attacks if needed 7. **Regular backups** of both configurations --- ## Additional Resources - OpenWRT Documentation: https://openwrt.org/docs/start - AdGuard Home Documentation: https://github.com/AdguardTeam/AdGuardHome/wiki - OpenWRT Forum: https://forum.openwrt.org/ - AdGuard Forum: https://forum.adguard.com/