Skip to content

Instantly share code, notes, and snippets.

@opariffazman
Created May 31, 2020 06:41
Show Gist options
  • Save opariffazman/874251773e30969ad60b99a058ef971d to your computer and use it in GitHub Desktop.
Save opariffazman/874251773e30969ad60b99a058ef971d to your computer and use it in GitHub Desktop.
Simple pihole docker setup.
# network variables
$enabledAdapter = Get-WmiObject -Class Win32_NetworkAdapterConfiguration -filter "IPEnabled = $true" | ForEach-Object Description
$enabledAdapter | ForEach-Object {
Get-NetAdapter -InterfaceDescription $_
}
do {
$interfaceAlias = Read-Host -Prompt "Enter your main NetAdapter Name (with Internet Access)"
try {
$adapterExist = Get-NetAdapter -InterfaceAlias $interfaceAlias -ErrorAction 'SilentlyContinue'
Write-Verbose -Message "$interfaceAlias Selected" -Verbose
}
catch {
Write-Warning -Message "NetAdapter with name $interfaceAlias not found"
}
} while (!$adapterExist)
Write-Verbose -Message "Disabling IPv6 for $interfaceAlias" -Verbose
Disable-NetAdapterBinding -InterfaceAlias $interfaceAlias -ComponentID ms_tcpip6
$interfaceIP = Get-NetIPAddress -InterfaceAlias $interfaceAlias | ForEach-Object IPAddress
Write-Verbose -Message "Using $interfaceIP for Pihole ServerIP" -Verbose
# docker variables
$name = "pihole"
$serverIP = $interfaceIP
$webpassword = Read-Host -Prompt "Set Password for PiHole Web Control Panel"
# cloudfare
$dnsOpt1 = "1.1.1.1"
$dnsOpt2 = "1.0.0.1"
<# google
$dnsOpt1 = "8.8.8.8"
$dnsOpt2 = "8.8.4.4" #>
$cmd = "docker.exe"
$prm = "run -d --name $name -e ServerIP=$serverIP -e WEBPASSWORD=$webpassword -e TZ=Asia/Kuala_Lumpur -e DNS1=`"127.17.0.1`" -e DNS2=$dnsOpt1 -e DNS3=$dnsOpt2 -p 80:80 -p 53:53/tcp -p 53:53/udp -p 443:443 --restart=unless-stopped pihole/pihole:latest"
$dockerScript = $cmd + ' ' + $prm
Write-Verbose -Message "Executing Docker Script for PiHole Installation" -Verbose
try {
Invoke-Expression $dockerScript -ErrorAction 'Stop'
Write-Verbose -Message "Pihole installed successfully, point your devices DNS to this IP: $serverIP" -Verbose
}
catch {
Write-Error $PSItem
}
Write-Verbose -Message "Setting this device DNS to $serverIP" -Verbose
Set-DnsClientServerAddress -InterfaceAlias $interfaceAlias -ServerAddresses $serverIP
Write-Verbose -Message "PiHole Web Control Panel will be accessible here: http://127.17.0.1/admin/ (in a minute)" -Verbose
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment