Files
openwrt-adguard-setup/openwrt-adguard-setup.md

581 lines
13 KiB
Markdown

# 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/