Files

412 lines
13 KiB
Markdown

# DNS Management
This component provides cmdlets for managing DNS settings on OPNSense firewalls.
## Overview
The DNS Management component allows you to configure and manage DNS settings on OPNSense firewalls. It provides cmdlets for configuring DNS servers, DNS forwarders, DNS overrides, and DNS forwarding.
## Cmdlets
### Get-OPNSenseDNSServer
Retrieves DNS server configurations from an OPNSense firewall.
#### Examples
```powershell
# Get DNS server configuration
Get-OPNSenseDNSServer
```
### Set-OPNSenseDNSServer
Updates the DNS server configuration on an OPNSense firewall.
#### Parameters
- **Enabled** - Whether the DNS server is enabled.
- **ListenIPs** - The IP addresses to listen on.
- **Port** - The port to listen on. Default is 53.
- **DNSSECEnabled** - Whether DNSSEC is enabled.
- **ForwardingEnabled** - Whether DNS forwarding is enabled.
- **ForwardingServers** - The DNS servers to forward queries to.
- **CacheEnabled** - Whether DNS caching is enabled.
- **CacheSize** - The size of the DNS cache in MB.
- **PrefetchEnabled** - Whether DNS prefetching is enabled.
- **PrefetchDomains** - Whether to prefetch domains.
- **Force** - Suppresses the confirmation prompt.
- **PassThru** - Returns the updated DNS server configuration.
#### Examples
```powershell
# Enable the DNS server
Set-OPNSenseDNSServer -Enabled
# Configure DNS forwarding
Set-OPNSenseDNSServer -ForwardingEnabled -ForwardingServers "8.8.8.8","8.8.4.4"
# Configure DNS caching
Set-OPNSenseDNSServer -CacheEnabled -CacheSize 10 -PrefetchEnabled -PrefetchDomains
# Configure DNS server with multiple options
Set-OPNSenseDNSServer -Enabled -ListenIPs "192.168.1.1" -Port 53 -DNSSECEnabled -ForwardingEnabled -ForwardingServers "1.1.1.1","1.0.0.1" -CacheEnabled -CacheSize 20 -PrefetchEnabled -PassThru
```
### Get-OPNSenseDNSOverride
Retrieves DNS overrides from an OPNSense firewall.
#### Parameters
- **Host** - Filter overrides by host.
- **Domain** - Filter overrides by domain.
- **IP** - Filter overrides by IP address.
- **Description** - Filter overrides by description.
#### Examples
```powershell
# Get all DNS overrides
Get-OPNSenseDNSOverride
# Get DNS overrides for a specific host
Get-OPNSenseDNSOverride -Host "server"
# Get DNS overrides for a specific domain
Get-OPNSenseDNSOverride -Domain "example.com"
```
### New-OPNSenseDNSOverride
Creates a new DNS override on an OPNSense firewall.
#### Parameters
- **Host** - The hostname to override.
- **Domain** - The domain to override.
- **IP** - The IP address to resolve to.
- **Description** - A description for the override.
- **Enabled** - Whether the override is enabled. Default is true.
- **Force** - Suppresses the confirmation prompt.
#### Examples
```powershell
# Create a DNS override for a specific host
New-OPNSenseDNSOverride -Host "server" -Domain "example.com" -IP "192.168.1.10" -Description "Internal Server"
# Create a DNS override for a wildcard domain
New-OPNSenseDNSOverride -Host "*" -Domain "example.com" -IP "192.168.1.20" -Description "All example.com hosts"
# Create a DNS override without confirmation
New-OPNSenseDNSOverride -Host "printer" -Domain "example.com" -IP "192.168.1.30" -Description "Office Printer" -Force
```
### Set-OPNSenseDNSOverride
Updates an existing DNS override on an OPNSense firewall.
#### Parameters
- **Uuid** - The UUID of the DNS override to update.
- **Host** - The hostname to override.
- **Domain** - The domain to override.
- **IP** - The IP address to resolve to.
- **Description** - A description for the override.
- **Enabled** - Whether the override is enabled.
- **Force** - Suppresses the confirmation prompt.
- **PassThru** - Returns the updated DNS override.
#### Examples
```powershell
# Update a DNS override's IP address
Set-OPNSenseDNSOverride -Uuid "a1b2c3d4-e5f6-g7h8-i9j0-k1l2m3n4o5p6" -IP "192.168.1.15"
# Update a DNS override's description
Set-OPNSenseDNSOverride -Uuid "a1b2c3d4-e5f6-g7h8-i9j0-k1l2m3n4o5p6" -Description "Updated Server"
# Update multiple properties of a DNS override
Set-OPNSenseDNSOverride -Uuid "a1b2c3d4-e5f6-g7h8-i9j0-k1l2m3n4o5p6" -Host "newserver" -Domain "example.com" -IP "192.168.1.20" -Description "New Server" -PassThru
```
### Remove-OPNSenseDNSOverride
Removes a DNS override from an OPNSense firewall.
#### Parameters
- **Uuid** - The UUID of the DNS override to remove.
- **Force** - Suppresses the confirmation prompt.
#### Examples
```powershell
# Remove a DNS override
Remove-OPNSenseDNSOverride -Uuid "a1b2c3d4-e5f6-g7h8-i9j0-k1l2m3n4o5p6"
# Remove a DNS override without confirmation
Remove-OPNSenseDNSOverride -Uuid "a1b2c3d4-e5f6-g7h8-i9j0-k1l2m3n4o5p6" -Force
```
### Get-OPNSenseDNSForwarder
Retrieves DNS forwarder configurations from an OPNSense firewall.
#### Examples
```powershell
# Get DNS forwarder configuration
Get-OPNSenseDNSForwarder
```
### Set-OPNSenseDNSForwarder
Updates the DNS forwarder configuration on an OPNSense firewall.
#### Parameters
- **Enabled** - Whether the DNS forwarder is enabled.
- **ListenIPs** - The IP addresses to listen on.
- **Port** - The port to listen on. Default is 53.
- **Interfaces** - The interfaces to listen on.
- **DNSSECEnabled** - Whether DNSSEC is enabled.
- **RegdhcpStatic** - Whether to register DHCP static mappings.
- **RegdhcpDynamic** - Whether to register DHCP leases.
- **StrictBind** - Whether to use strict binding.
- **Force** - Suppresses the confirmation prompt.
- **PassThru** - Returns the updated DNS forwarder configuration.
#### Examples
```powershell
# Enable the DNS forwarder
Set-OPNSenseDNSForwarder -Enabled
# Configure DNS forwarder interfaces
Set-OPNSenseDNSForwarder -Interfaces "lan","opt1"
# Configure DNS forwarder with DHCP registration
Set-OPNSenseDNSForwarder -RegdhcpStatic -RegdhcpDynamic
# Configure DNS forwarder with multiple options
Set-OPNSenseDNSForwarder -Enabled -ListenIPs "192.168.1.1" -Port 53 -Interfaces "lan","opt1" -DNSSECEnabled -RegdhcpStatic -RegdhcpDynamic -StrictBind -PassThru
```
### Get-OPNSenseDNSForwarding
Retrieves DNS forwarding configurations from an OPNSense firewall.
#### Parameters
- **Domain** - Filter forwarding by domain.
- **Server** - Filter forwarding by server.
- **Description** - Filter forwarding by description.
#### Examples
```powershell
# Get all DNS forwarding configurations
Get-OPNSenseDNSForwarding
# Get DNS forwarding for a specific domain
Get-OPNSenseDNSForwarding -Domain "example.com"
```
### New-OPNSenseDNSForwarding
Creates a new DNS forwarding configuration on an OPNSense firewall.
#### Parameters
- **Domain** - The domain to forward.
- **Server** - The server to forward to.
- **Description** - A description for the forwarding.
- **Enabled** - Whether the forwarding is enabled. Default is true.
- **Force** - Suppresses the confirmation prompt.
#### Examples
```powershell
# Create a DNS forwarding for a specific domain
New-OPNSenseDNSForwarding -Domain "example.com" -Server "192.168.1.10" -Description "Internal DNS"
# Create a DNS forwarding for a domain to multiple servers
New-OPNSenseDNSForwarding -Domain "example.org" -Server "192.168.1.10,192.168.1.11" -Description "Redundant DNS"
# Create a DNS forwarding without confirmation
New-OPNSenseDNSForwarding -Domain "example.net" -Server "192.168.1.12" -Description "External DNS" -Force
```
### Set-OPNSenseDNSForwarding
Updates an existing DNS forwarding configuration on an OPNSense firewall.
#### Parameters
- **Uuid** - The UUID of the DNS forwarding to update.
- **Domain** - The domain to forward.
- **Server** - The server to forward to.
- **Description** - A description for the forwarding.
- **Enabled** - Whether the forwarding is enabled.
- **Force** - Suppresses the confirmation prompt.
- **PassThru** - Returns the updated DNS forwarding.
#### Examples
```powershell
# Update a DNS forwarding's server
Set-OPNSenseDNSForwarding -Uuid "a1b2c3d4-e5f6-g7h8-i9j0-k1l2m3n4o5p6" -Server "192.168.1.15"
# Update a DNS forwarding's description
Set-OPNSenseDNSForwarding -Uuid "a1b2c3d4-e5f6-g7h8-i9j0-k1l2m3n4o5p6" -Description "Updated DNS"
# Update multiple properties of a DNS forwarding
Set-OPNSenseDNSForwarding -Uuid "a1b2c3d4-e5f6-g7h8-i9j0-k1l2m3n4o5p6" -Domain "new.example.com" -Server "192.168.1.20" -Description "New DNS" -PassThru
```
### Remove-OPNSenseDNSForwarding
Removes a DNS forwarding configuration from an OPNSense firewall.
#### Parameters
- **Uuid** - The UUID of the DNS forwarding to remove.
- **Force** - Suppresses the confirmation prompt.
#### Examples
```powershell
# Remove a DNS forwarding
Remove-OPNSenseDNSForwarding -Uuid "a1b2c3d4-e5f6-g7h8-i9j0-k1l2m3n4o5p6"
# Remove a DNS forwarding without confirmation
Remove-OPNSenseDNSForwarding -Uuid "a1b2c3d4-e5f6-g7h8-i9j0-k1l2m3n4o5p6" -Force
```
### Apply-OPNSenseDNSChanges
Applies pending DNS changes on an OPNSense firewall.
#### Parameters
- **Force** - Suppresses the confirmation prompt.
#### Examples
```powershell
# Apply DNS changes
Apply-OPNSenseDNSChanges
# Apply DNS changes without confirmation
Apply-OPNSenseDNSChanges -Force
```
## Common Scenarios
### Basic DNS Configuration
```powershell
# Connect to the OPNSense firewall
Connect-OPNSense -Server "https://firewall.example.com" -ApiKey "your_api_key" -ApiSecret "your_api_secret" -SkipCertificateCheck
# Configure the DNS server
Set-OPNSenseDNSServer -Enabled -ListenIPs "192.168.1.1" -ForwardingEnabled -ForwardingServers "1.1.1.1","1.0.0.1" -CacheEnabled -CacheSize 10 -Force
# Apply the changes
Apply-OPNSenseDNSChanges -Force
# Disconnect from the firewall
Disconnect-OPNSense
```
### DNS Overrides for Internal Services
```powershell
# Connect to the OPNSense firewall
Connect-OPNSense -Server "https://firewall.example.com" -ApiKey "your_api_key" -ApiSecret "your_api_secret" -SkipCertificateCheck
# Create DNS overrides for internal services
$dnsOverrides = @(
@{ Host = "www"; Domain = "example.com"; IP = "192.168.1.10"; Description = "Internal Web Server" },
@{ Host = "mail"; Domain = "example.com"; IP = "192.168.1.11"; Description = "Internal Mail Server" },
@{ Host = "files"; Domain = "example.com"; IP = "192.168.1.12"; Description = "Internal File Server" },
@{ Host = "*"; Domain = "internal.example.com"; IP = "192.168.1.13"; Description = "Internal Services" }
)
foreach ($override in $dnsOverrides) {
New-OPNSenseDNSOverride -Host $override.Host -Domain $override.Domain -IP $override.IP -Description $override.Description -Force
}
# Apply the changes
Apply-OPNSenseDNSChanges -Force
# Disconnect from the firewall
Disconnect-OPNSense
```
### DNS Forwarding for Specific Domains
```powershell
# Connect to the OPNSense firewall
Connect-OPNSense -Server "https://firewall.example.com" -ApiKey "your_api_key" -ApiSecret "your_api_secret" -SkipCertificateCheck
# Configure DNS forwarding for specific domains
$dnsForwarding = @(
@{ Domain = "example.com"; Server = "192.168.1.10"; Description = "Internal Domain" },
@{ Domain = "partner.com"; Server = "10.0.0.10"; Description = "Partner Domain" },
@{ Domain = "vendor.com"; Server = "172.16.0.10"; Description = "Vendor Domain" }
)
foreach ($forwarding in $dnsForwarding) {
New-OPNSenseDNSForwarding -Domain $forwarding.Domain -Server $forwarding.Server -Description $forwarding.Description -Force
}
# Apply the changes
Apply-OPNSenseDNSChanges -Force
# Disconnect from the firewall
Disconnect-OPNSense
```
### Managing DNS Overrides
```powershell
# Connect to the OPNSense firewall
Connect-OPNSense -Server "https://firewall.example.com" -ApiKey "your_api_key" -ApiSecret "your_api_secret" -SkipCertificateCheck
# Get all DNS overrides
$overrides = Get-OPNSenseDNSOverride
# Update all overrides for a specific domain
$overrides | Where-Object { $_.Domain -eq "example.com" } | ForEach-Object {
Set-OPNSenseDNSOverride -Uuid $_.Uuid -IP "192.168.2.$($_.IP.Split('.')[-1])" -Description "$($_.Description) (Migrated)" -Force
Write-Output "Updated override: $($_.Host).$($_.Domain)"
}
# Remove all overrides with "Temporary" in the description
$overrides | Where-Object { $_.Description -like "*Temporary*" } | ForEach-Object {
Remove-OPNSenseDNSOverride -Uuid $_.Uuid -Force
Write-Output "Removed override: $($_.Host).$($_.Domain)"
}
# Apply the changes
Apply-OPNSenseDNSChanges -Force
# Disconnect from the firewall
Disconnect-OPNSense
```
## Notes
- DNS changes are not applied until you call `Apply-OPNSenseDNSChanges`.
- DNS overrides take precedence over DNS forwarding.
- When using DNS forwarding, ensure that the forwarded domains are accessible from the OPNSense firewall.
- DNS caching can improve performance by reducing the number of external DNS queries.
- DNSSEC provides additional security by validating DNS responses.
- Consider using the `-PassThru` parameter when updating DNS configurations to verify the changes.
- Wildcard DNS overrides (using "*" as the host) can be used to override all subdomains of a domain.
- DNS forwarding can be used to direct queries for specific domains to internal or external DNS servers.