ใช้หอสังเกตการณ์? ดูหมายเหตุบนหอสังเกตการณ์ที่ด้านล่างของเอกสารนี้
ตั้งแต่ 2023.01
หากคุณมีการแก้ไขใด ๆ สำหรับ lighttpd ผ่านไฟล์ external.conf
ไฟล์นี้จะต้องแมปลงใน /etc/lighttpd/conf-enabled/whateverfile.conf
แทน
เนื่องจากปัญหาที่ทราบกับ Docker และ libseccomp <2.5 คุณอาจพบปัญหาในการทำงาน 2022.04
และใหม่กว่าบนระบบโฮสต์ที่มี libseccomp2
เวอร์ชันเก่ากว่า (เช่น Debian/Raspbian buster หรือ Ubuntu 20.04 และอาจเป็น CentOS 7)
คำแนะนำแรกคืออัปเกรดระบบปฏิบัติการโฮสต์ของคุณ ซึ่งจะรวม libseccomp
เวอร์ชันล่าสุด (และแก้ไขแล้ว) ไว้ด้วย
หากคุณไม่สามารถทำเช่นนี้ได้อย่างแน่นอน ผู้ใช้บางรายได้รายงานความสำเร็จในการอัปเดต libseccomp2
ผ่าน backport บน debian หรือที่คล้ายกันผ่านการอัปเดตบน Ubuntu คุณสามารถลองวิธีแก้ปัญหานี้ด้วยความเสี่ยงของคุณเอง (หมายเหตุ คุณอาจพบว่าคุณต้องการ docker.io
ล่าสุด (รายละเอียดเพิ่มเติมที่นี่)
ผู้ใช้บางรายได้รายงานปัญหาเกี่ยวกับการใช้ --privileged
flag บน 2022.04
ขึ้นไป TL; DR อย่าใช้โหมดนั้นและระบุตัวพิมพ์ใหญ่ที่อนุญาตให้ชัดเจน (หากจำเป็น) แทน
# More info at https://github.com/pi-hole/docker-pi-hole/ and https://docs.pi-hole.net/
services :
pihole :
container_name : pihole
image : pihole/pihole:latest
# For DHCP it is recommended to remove these ports and instead add: network_mode: "host"
ports :
- " 53:53/tcp "
- " 53:53/udp "
- " 67:67/udp " # Only required if you are using Pi-hole as your DHCP server
- " 80:80/tcp "
environment :
TZ : ' America/Chicago '
# WEBPASSWORD: 'set a secure password here or it will be random'
# Volumes store your data between container upgrades
volumes :
- ' ./etc-pihole:/etc/pihole '
- ' ./etc-dnsmasq.d:/etc/dnsmasq.d '
# https://github.com/pi-hole/docker-pi-hole#note-on-capabilities
cap_add :
- NET_ADMIN # Required if you are using Pi-hole as your DHCP server, else not needed
restart : unless-stopped
docker compose up -d
เพื่อสร้างและเริ่ม pi-hole (ไวยากรณ์อาจเป็น docker-compose
บนระบบรุ่นเก่า)bridge
เริ่มต้นของ Docker (สามารถทำได้โดยการตั้งค่าตัวแปรสภาพแวดล้อม DNSMASQ_LISTENING
เป็น all
)นี่คือสคริปต์เรียกใช้นักเทียบท่าที่เทียบเท่า
โปรเจ็กต์ Docker เพื่อสร้างคอนเทนเนอร์ x86 และ ARM น้ำหนักเบาพร้อมฟังก์ชัน Pi-hole
คอนเทนเนอร์นี้ใช้พอร์ตยอดนิยม 2 พอร์ต ได้แก่ พอร์ต 53 และพอร์ต 80 ดังนั้น อาจขัดแย้งกับพอร์ตแอปพลิเคชันที่มีอยู่ หากคุณไม่มีบริการอื่นๆ หรือคอนเทนเนอร์นักเทียบท่าที่ใช้พอร์ต 53/80 (หากคุณมี โปรดอ่านด้านล่างเพื่อดูตัวอย่างพร็อกซีย้อนกลับ) อาร์กิวเมนต์ขั้นต่ำที่จำเป็นในการเรียกใช้คอนเทนเนอร์นี้จะอยู่ในสคริปต์ docker_run.sh
หากคุณใช้การแจกจ่ายแบบ Red Hat โดยมีนโยบายบังคับใช้ SELinux ให้เพิ่ม :z
เพื่อให้สอดคล้องกับปริมาณดังนี้:
-v "$(pwd)/etc-pihole:/etc/pihole:z"
-v "$(pwd)/etc-dnsmasq.d:/etc/dnsmasq.d:z"
แนะนำให้ใช้วอลุ่มสำหรับการคงข้อมูลไว้ในการสร้างคอนเทนเนอร์ขึ้นใหม่เพื่ออัปเดตรูปภาพ ตัวแปรการค้นหา IP อาจไม่ทำงานสำหรับทุกคน โปรดตรวจสอบค่าและฮาร์ดโค้ด IP และ IPv6 หากจำเป็น
คุณสามารถปรับแต่งตำแหน่งที่จะจัดเก็บข้อมูลถาวรได้โดยการตั้งค่าตัวแปรสภาพแวดล้อม PIHOLE_BASE
เมื่อเรียกใช้ docker_run.sh
(เช่น PIHOLE_BASE=/opt/pihole-storage ./docker_run.sh
) หากไม่ได้ตั้งค่า PIHOLE_BASE
ไฟล์จะถูกจัดเก็บไว้ในไดเร็กทอรีปัจจุบันของคุณเมื่อคุณเรียกใช้สคริปต์
การอัปเดตรายการโฆษณาอัตโนมัติ - ตั้งแต่รุ่น 3.0 ขึ้นไป cron
จะถูกรวมไว้ในคอนเทนเนอร์และจะดึงรายการเวอร์ชันใหม่ล่าสุดของคุณและล้างบันทึกของคุณ ตั้งค่าตัวแปรสภาพแวดล้อม TZ เพื่อให้แน่ใจว่าการหมุนเวียนบันทึกเวลาเที่ยงคืนซิงค์กับเวลาเที่ยงคืนของเขตเวลาของคุณ
มีหลายวิธีในการเรียกใช้ DHCP จากภายในคอนเทนเนอร์ Docker Pi-hole ของคุณ แต่จะซับซ้อนกว่าเล็กน้อยและมีขนาดเดียวไม่พอดีทั้งหมด โหมดเครือข่ายหลายโหมดของ DHCP และ Docker มีรายละเอียดครอบคลุมอยู่ในไซต์เอกสารของเรา: Docker DHCP และโหมดเครือข่าย
มีตัวแปรสภาพแวดล้อมอื่น ๆ หากคุณต้องการปรับแต่งสิ่งต่าง ๆ ภายในคอนเทนเนอร์นักเทียบท่า:
ตัวแปร | ค่าเริ่มต้น | ค่า | คำอธิบาย |
---|---|---|---|
TZ | เวลาสากลเชิงพิกัด | <Timezone> | ตั้งค่าเขตเวลาของคุณเพื่อให้แน่ใจว่าบันทึกจะหมุนเวียนในเวลาเที่ยงคืนท้องถิ่น แทนที่จะเป็นเที่ยงคืน UTC |
WEBPASSWORD | สุ่ม | <Admin password> | http://pi.hole/admin รหัสผ่าน เรียกใช้ docker logs pihole | grep random เพื่อค้นหาบัตรสุ่มของคุณ |
FTLCONF_LOCAL_IPV4 | ไม่ได้ตั้งค่า | <Host's IP> | ตั้งค่าเป็น LAN IP ของเซิร์ฟเวอร์ของคุณ ซึ่งใช้โดยโหมดบล็อกเว็บ |
ตัวแปร | ค่าเริ่มต้น | ค่า | คำอธิบาย |
---|---|---|---|
PIHOLE_DNS_ | 8.8.8.8;8.8.4.4 | IP คั่นด้วย ; | เซิร์ฟเวอร์ DNS อัปสตรีมสำหรับ Pi-hole เพื่อส่งต่อข้อความค้นหา โดยคั่นด้วยเครื่องหมายอัฒภาค (รองรับพอร์ตที่ไม่ได้มาตรฐานด้วย #[port number] ) เช่น 127.0.0.1#5053;8.8.8.8;8.8.4.4 (รองรับชื่อและลิงก์บริการนักเทียบท่าแทน IP) เช่น upstream0;upstream1 โดยที่ upstream0 และ upstream1 เป็นชื่อบริการหรือลิงก์ไปยังบริการนักเทียบท่าหมายเหตุ: การมีอยู่ของตัวแปรสภาพแวดล้อมนี้ถือว่านี่เป็นการจัดการอัพสตรีม DNS แต่ เพียงผู้เดียว DNS อัปสตรีมที่เพิ่มผ่านทางเว็บอินเตอร์เฟสจะถูกเขียนทับเมื่อรีสตาร์ท/สร้างคอนเทนเนอร์ |
DNSSEC | false | <"true"|"false"> | เปิดใช้งานการสนับสนุน DNSSEC |
DNS_BOGUS_PRIV | true | <"true"|"false"> | อย่าส่งต่อการค้นหาแบบย้อนกลับสำหรับช่วงส่วนตัว |
DNS_FQDN_REQUIRED | true | <"true"|"false"> | ห้ามส่งต่อที่ไม่ใช่ FQDN |
REV_SERVER | false | <"true"|"false"> | เปิดใช้งานการส่งต่อแบบมีเงื่อนไข DNS สำหรับการแก้ไขชื่ออุปกรณ์ |
REV_SERVER_DOMAIN | ไม่ได้ตั้งค่า | โดเมนเครือข่าย | หากเปิดใช้งานการส่งต่อแบบมีเงื่อนไข ให้ตั้งค่าโดเมนของเราเตอร์เครือข่ายท้องถิ่น |
REV_SERVER_TARGET | ไม่ได้ตั้งค่า | IP ของเราเตอร์ | หากเปิดใช้งานการส่งต่อแบบมีเงื่อนไข ให้ตั้งค่า IP ของเราเตอร์เครือข่ายท้องถิ่น |
REV_SERVER_CIDR | ไม่ได้ตั้งค่า | ย้อนกลับ DNS | หากเปิดใช้งานการส่งต่อแบบมีเงื่อนไข ให้ตั้งค่าโซน DNS ย้อนกลับ (เช่น 192.168.0.0/24 ) |
DHCP_ACTIVE | false | <"true"|"false"> | เปิดใช้งานเซิร์ฟเวอร์ DHCP การเช่า DHCP แบบคงที่สามารถกำหนดค่าได้ด้วย /etc/dnsmasq.d/04-pihole-static-dhcp.conf แบบกำหนดเอง |
DHCP_START | ไม่ได้ตั้งค่า | <Start IP> | เริ่มต้นช่วงของที่อยู่ IP ที่จะแจกโดยเซิร์ฟเวอร์ DHCP (จำเป็นหากเปิดใช้งานเซิร์ฟเวอร์ DHCP) |
DHCP_END | ไม่ได้ตั้งค่า | <End IP> | สิ้นสุดช่วงที่อยู่ IP ที่จะแจกโดยเซิร์ฟเวอร์ DHCP (จำเป็นหากเปิดใช้งานเซิร์ฟเวอร์ DHCP) |
DHCP_ROUTER | ไม่ได้ตั้งค่า | <Router's IP> | ที่อยู่ IP ของเราเตอร์ (เกตเวย์) ที่ส่งโดยเซิร์ฟเวอร์ DHCP (จำเป็นหากเปิดใช้งานเซิร์ฟเวอร์ DHCP) |
DHCP_LEASETIME | 24 | <hours> | เวลาเช่า DHCP เป็นชั่วโมง |
PIHOLE_DOMAIN | lan | <domain> | ชื่อโดเมนที่ส่งโดยเซิร์ฟเวอร์ DHCP |
DHCP_IPv6 | false | <"true"|"false"> | เปิดใช้งานการสนับสนุนเซิร์ฟเวอร์ DHCP IPv6 (SLAAC + RA) |
DHCP_rapid_commit | false | <"true"|"false"> | เปิดใช้งานการส่งข้อมูลด่วน DHCPv4 (การกำหนดที่อยู่ด่วน) |
VIRTUAL_HOST | ${HOSTNAME} | <Custom Hostname> | เว็บเซิร์ฟเวอร์ของคุณ 'โฮสต์เสมือน' คืออะไร การเข้าถึงผู้ดูแลระบบผ่านชื่อโฮสต์/IP นี้ช่วยให้คุณสามารถเปลี่ยนแปลงรายการไวท์ลิสต์ / บัญชีดำ นอกเหนือจากที่อยู่เริ่มต้น 'http://pi.hole/admin/' |
IPv6 | true | <"true"|"false"> | สำหรับความเข้ากันได้แบบ Unraid ให้ตัดการกำหนดค่า IPv6 ทั้งหมดออกจากบริการ DNS/เว็บ เมื่อเป็นเท็จ |
TEMPERATUREUNIT | c | <c|k|f> | ตั้งหน่วยอุณหภูมิที่ต้องการเป็น c : เซลเซียส, k : เคลวิน หรือหน่วย f ฟาเรนไฮต์ |
WEBUIBOXEDLAYOUT | boxed | <boxed|traditional> | ใช้เค้าโครงแบบกล่อง (มีประโยชน์เมื่อทำงานบนหน้าจอขนาดใหญ่) |
QUERY_LOGGING | true | <"true"|"false"> | เปิดใช้งานการบันทึกแบบสอบถามหรือไม่ |
WEBTHEME | default-light | <"default-dark"|"default-darker"|"default-light"|"default-auto"|"high-contrast"|"high-contrast-dark"|"lcars"> | ธีมส่วนต่อประสานผู้ใช้ที่จะใช้ |
WEBPASSWORD_FILE | ไม่ได้ตั้งค่า | <Docker secret path> | ตั้งรหัสผ่านผู้ดูแลระบบโดยใช้ความลับของนักเทียบท่า หากมีการตั้งค่า WEBPASSWORD WEBPASSWORD_FILE จะถูกละเว้น หาก WEBPASSWORD ว่างเปล่า และ WEBPASSWORD_FILE ถูกตั้งค่าเป็นพาธของไฟล์ที่ถูกต้องที่สามารถอ่านได้ ดังนั้น WEBPASSWORD จะถูกตั้งค่าเป็นเนื้อหาของ WEBPASSWORD_FILE |
ตัวแปร | ค่าเริ่มต้น | ค่า | คำอธิบาย |
---|---|---|---|
INTERFACE | ไม่ได้ตั้งค่า | <NIC> | ค่าเริ่มต้นทำงานได้ดีกับคำสั่งรันนักเทียบท่าตัวอย่างพื้นฐานของเรา หากคุณกำลังพยายามใช้ DHCP กับ --net host คุณอาจต้องปรับแต่งสิ่งนี้หรือ DNSMASQ_LISTENING |
DNSMASQ_LISTENING | ไม่ได้ตั้งค่า | <local|all|single> | การฟัง local บนเครือข่ายย่อย all อนุญาตให้ฟังบนเครือข่ายย่อยที่มาจากอินเทอร์เน็ต นอกเหนือจากการฟังแบบท้องถิ่น การฟัง single บนอินเทอร์เฟซที่ระบุเท่านั้น |
WEB_PORT | ไม่ได้ตั้งค่า | <PORT> | การดำเนินการนี้จะทำให้ฟังก์ชัน 'หน้าเว็บถูกบล็อก' ของ Pi-hole เสียหาย แต่อาจช่วยการตั้งค่าขั้นสูง เช่น การรัน synology หรือ --net=host docker argument คู่มือนี้จะอธิบายวิธีคืนค่าฟังก์ชันการทำงานที่ถูกบล็อกของหน้าเว็บโดยใช้กฎ DNAT ของเราเตอร์ Linux: วิธีการติดตั้ง Synology ทางเลือก |
WEB_BIND_ADDR | ไม่ได้ตั้งค่า | <IP> | ที่อยู่การเชื่อมโยงของ Lighttpd หากไม่ได้ตั้งค่า lighttpd จะเชื่อมโยงกับทุกอินเทอร์เฟซ ยกเว้นเมื่อทำงานในโหมดเครือข่ายโฮสต์ซึ่งจะใช้ FTLCONF_LOCAL_IPV4 แทน |
SKIPGRAVITYONBOOT | ไม่ได้ตั้งค่า | <unset|1> | ใช้ตัวเลือกนี้เพื่อข้ามการอัปเดตฐานข้อมูล Gravity เมื่อทำการบูทคอนเทนเนอร์ ตามค่าเริ่มต้น ตัวแปรสภาพแวดล้อมนี้ไม่ได้ตั้งค่าไว้ ดังนั้นฐานข้อมูล Gravity จะได้รับการอัปเดตเมื่อคอนเทนเนอร์เริ่มทำงาน การตั้งค่าตัวแปรสภาพแวดล้อมนี้เป็น 1 (หรืออะไรก็ได้) จะทำให้ฐานข้อมูล Gravity ไม่ได้รับการอัปเดตเมื่อคอนเทนเนอร์เริ่มทำงาน |
CORS_HOSTS | ไม่ได้ตั้งค่า | <FQDNs delimited by ,> | รายชื่อโดเมน/โดเมนย่อยที่อนุญาตให้ใช้ CORS ไม่รองรับไวด์การ์ด เช่น CORS_HOSTS: domain.com,home.domain.com,www.domain.com |
CUSTOM_CACHE_SIZE | 10000 | ตัวเลข | ตั้งค่าขนาดแคชสำหรับ dnsmasq มีประโยชน์สำหรับการเพิ่มขนาดแคชเริ่มต้นหรือตั้งค่าเป็น 0 โปรดทราบว่าเมื่อ DNSSEC เป็น "จริง" การตั้งค่านี้จะถูกละเว้น |
FTL_CMD | no-daemon | no-daemon -- <dnsmasq option> | ปรับแต่งตัวเลือกที่จะเริ่มต้น DNS เช่น no-daemon -- --dns-forward-max 300 เพื่อเพิ่มค่าสูงสุด จำนวนการสืบค้น DNS พร้อมกันในการตั้งค่าโหลดสูง |
FTLCONF_[SETTING] | ไม่ได้ตั้งค่า | ตามเอกสาร | ปรับแต่ง pihole-FTL.conf ด้วยการตั้งค่าที่อธิบายไว้ในหน้าการกำหนดค่า FTLDNS ตัวอย่างเช่น ในการปรับแต่ง LOCAL_IPV4 ตรวจสอบให้แน่ใจว่าคุณได้ตั้งค่าตัวแปรสภาพแวดล้อม FTLCONF_LOCAL_IPV4 แล้ว |
ตัวแปร | ค่าเริ่มต้น | ค่า | คำอธิบาย |
---|---|---|---|
DNSMASQ_USER | ไม่ได้ตั้งค่า | <pihole|root> | อนุญาตให้เปลี่ยนผู้ใช้ที่ FTLDNS ทำงานเป็น ค่าเริ่มต้น: pihole บางระบบเช่น Synology NAS อาจต้องการให้คุณเปลี่ยนสิ่งนี้เป็น root (ดู #963) |
PIHOLE_UID | 999 | ตัวเลข | แทนที่รหัสผู้ใช้ pihole เริ่มต้นของรูปภาพเพื่อให้ตรงกับรหัสผู้ใช้โฮสต์ สำคัญ : ต้องไม่ได้ใช้ ID ภายในคอนเทนเนอร์! |
PIHOLE_GID | 999 | ตัวเลข | แทนที่รหัสกลุ่ม pihole เริ่มต้นของรูปภาพเพื่อให้ตรงกับรหัสกลุ่มโฮสต์ สำคัญ : ต้องไม่ได้ใช้ ID ภายในคอนเทนเนอร์! |
WEB_UID | 33 | ตัวเลข | แทนที่รหัสผู้ใช้ www-data เริ่มต้นของรูปภาพเพื่อให้ตรงกับรหัสผู้ใช้โฮสต์ สำคัญ : ต้องไม่ได้ใช้ ID ภายในคอนเทนเนอร์! (ตรวจสอบให้แน่ใจว่ามันแตกต่างจาก PIHOLE_UID หากคุณใช้สิ่งนั้นด้วย) |
WEB_GID | 33 | ตัวเลข | แทนที่รหัสกลุ่มข้อมูล www เริ่มต้นของรูปภาพเพื่อให้ตรงกับรหัสกลุ่มโฮสต์ สำคัญ : ต้องไม่ได้ใช้ ID ภายในคอนเทนเนอร์! (ตรวจสอบให้แน่ใจว่ามันแตกต่างจาก PIHOLE_GID หากคุณใช้สิ่งนั้นด้วย) |
WEBLOGS_STDOUT | 0 | 0|1 | 0 บันทึกไปยังไฟล์ที่กำหนด, การเข้าถึงการเปลี่ยนเส้นทาง 1 ครั้ง และบันทึกข้อผิดพลาดไปยัง stdout |
แม้ว่าสิ่งเหล่านี้อาจยังใช้งานได้ แต่ก็มีแนวโน้มที่จะถูกลบออกในเวอร์ชันอนาคต ในกรณีที่เป็นไปได้ ชื่อตัวแปรทางเลือกจะถูกระบุ โปรดตรวจสอบตารางด้านบนเพื่อใช้ตัวแปรทางเลือก
Docker สภาพแวดล้อมที่หลากหลาย | คำอธิบาย | แทนที่โดย |
---|---|---|
CONDITIONAL_FORWARDING | เปิดใช้งานการส่งต่อแบบมีเงื่อนไข DNS สำหรับการแก้ไขชื่ออุปกรณ์ | REV_SERVER |
CONDITIONAL_FORWARDING_IP | หากเปิดใช้งานการส่งต่อแบบมีเงื่อนไข ให้ตั้งค่า IP ของเราเตอร์เครือข่ายท้องถิ่น | REV_SERVER_TARGET |
CONDITIONAL_FORWARDING_DOMAIN | หากเปิดใช้งานการส่งต่อแบบมีเงื่อนไข ให้ตั้งค่าโดเมนของเราเตอร์เครือข่ายท้องถิ่น | REV_SERVER_DOMAIN |
CONDITIONAL_FORWARDING_REVERSE | หากเปิดใช้งานการส่งต่อแบบมีเงื่อนไข ให้ตั้งค่า DNS ย้อนกลับของเราเตอร์เครือข่ายท้องถิ่น (เช่น 0.168.192.in-addr.arpa ) | REV_SERVER_CIDR |
DNS1 | ผู้ให้บริการ DNS อัพสตรีมหลัก ค่าเริ่มต้นคือ google DNS | PIHOLE_DNS_ |
DNS2 | ผู้ให้บริการ DNS อัพสตรีมสำรอง ค่าเริ่มต้นคือ google DNS no หากควรใช้ DNS เดียว | PIHOLE_DNS_ |
ServerIP | ตั้งค่าเป็น LAN IP ของเซิร์ฟเวอร์ของคุณ ซึ่งใช้โดยโหมดบล็อกเว็บและที่อยู่การเชื่อมโยง lighttpd | FTLCONF_LOCAL_IPV4 |
ServerIPv6 | หากคุณมีเครือข่าย v6 ที่ตั้งค่าเป็น LAN IPv6 ของเซิร์ฟเวอร์ของคุณให้บล็อกโฆษณา IPv6 อย่างสมบูรณ์ | FTLCONF_LOCAL_IPV6 |
FTLCONF_REPLY_ADDR4 | ตั้งค่าเป็น LAN IP ของเซิร์ฟเวอร์ของคุณ ซึ่งใช้โดยโหมดบล็อกเว็บและที่อยู่การเชื่อมโยง lighttpd | FTLCONF_LOCAL_IPV4 |
FTLCONF_REPLY_ADDR6 | หากคุณมีเครือข่าย v6 ที่ตั้งค่าเป็น LAN IPv6 ของเซิร์ฟเวอร์ของคุณให้บล็อกโฆษณา IPv6 อย่างสมบูรณ์ | FTLCONF_LOCAL_IPV6 |
หากต้องการใช้ env vars เหล่านี้ในรูปแบบการเรียกใช้นักเทียบท่าเช่น: -e DNS1=1.1.1.1
ต่อไปนี้เป็นบทสรุปของอาร์กิวเมนต์อื่นๆ สำหรับการเรียกใช้ docker-compose / docker
อาร์กิวเมนต์นักเทียบท่า | คำอธิบาย |
---|---|
-p <port>:<port> แนะนำ | พอร์ตที่จะเปิดเผย (53, 80, 67) พอร์ตขั้นต่ำเปล่าที่จำเป็นสำหรับบริการ Pi-holes HTTP และ DNS |
--restart=unless-stopped ที่แนะนำ | สตาร์ท Pi-hole ของคุณโดยอัตโนมัติ (ใหม่) เมื่อบู๊ตเครื่องหรือในกรณีที่เกิดการขัดข้อง |
-v $(pwd)/etc-pihole:/etc/pihole ที่แนะนำ | ไดรฟ์ข้อมูลสำหรับการกำหนดค่า Pi-hole ของคุณช่วยคงการเปลี่ยนแปลงในการอัปเดตอิมเมจนักเทียบท่า |
-v $(pwd)/etc-dnsmasq.d:/etc/dnsmasq.d ที่แนะนำ | วอลุ่มสำหรับการกำหนดค่า DNS ของคุณช่วยคงการเปลี่ยนแปลงในการอัปเดตอิมเมจของ Docker |
--net=host ไม่จำเป็น | ทางเลือกอื่นสำหรับอาร์กิวเมนต์ -p <port>:<port> (ไม่สามารถใช้พร้อมกันกับ -p) หากคุณไม่ได้เรียกใช้เว็บแอปพลิเคชันอื่น DHCP ทำงานได้ดีที่สุดกับ --net=host ไม่เช่นนั้นเราเตอร์ของคุณต้องรองรับการตั้งค่า dhcp-relay |
--cap-add=NET_ADMIN ที่แนะนำ | ความสามารถที่เพิ่มโดยทั่วไปสำหรับ DHCP โปรดดูหมายเหตุเกี่ยวกับความสามารถด้านล่างสำหรับความสามารถอื่นๆ |
--dns=127.0.0.1 ไม่จำเป็น | ตั้งค่าการแก้ไขคอนเทนเนอร์ของคุณเป็น localhost เพื่อให้สามารถแก้ไขชื่อโฮสต์ DHCP จาก DNSMasq ของ Pi-hole อาจแก้ไขข้อผิดพลาดในการแก้ไขเมื่อรีสตาร์ทคอนเทนเนอร์ |
--dns=1.1.1.1 ไม่จำเป็น | ตั้งค่าเซิร์ฟเวอร์สำรองที่คุณเลือกในกรณีที่ DNSMasq มีปัญหาในการเริ่มต้น |
--env-file .env ไม่จำเป็น | ไฟล์เพื่อจัดเก็บตัวแปรสภาพแวดล้อมสำหรับนักเทียบท่าแทนที่การตั้งค่า -e key=value ที่นี่เพื่อความสะดวก |
docker exec -it pihole_container_name pihole -a -p
- จากนั้นป้อนรหัสผ่านของคุณลงในพรอมต์-p 8080:80
หากคุณใช้โหมดการบล็อกเริ่มต้น หากคุณกำลังใช้โหมดการบล็อก IP เดิม คุณไม่ควรทำการแมปพอร์ตนี้ใหม่DEFAULT_HOST
env ใน nginxproxy/nginx-proxy และคุณต้องตั้งค่า VIRTUAL_HOST
ที่ตรงกันสำหรับคอนเทนเนอร์ของ Pi-hole โปรดอ่าน nginxproxy/nginx-proxy readme สำหรับข้อมูลเพิ่มเติมหากคุณประสบปัญหาbridge
โหมดเครือข่ายเริ่มต้นของนักเทียบท่าจะแยกคอนเทนเนอร์ออกจากเครือข่ายของโฮสต์ นี่เป็นการตั้งค่าที่ปลอดภัยกว่า แต่จำเป็นต้องตั้งค่าตัวเลือก Pi-hole DNS สำหรับ พฤติกรรมการฟังอินเทอร์เฟซ เป็น "ฟังบนอินเทอร์เฟซทั้งหมด อนุญาตต้นกำเนิดทั้งหมด" Ubuntu รุ่นใหม่ๆ (17.10+) และ Fedora (33+) มี systemd-resolved
ซึ่งได้รับการกำหนดค่าตามค่าเริ่มต้นเพื่อใช้ตัวแก้ไข DNS stub สำหรับแคช วิธีนี้จะป้องกันไม่ให้ pi-hole ฟังบนพอร์ต 53 ควรปิดการใช้งานตัวแก้ไข stub ด้วย: sudo sed -r -i.orig 's/#?DNSStubListener=yes/DNSStubListener=no/g' /etc/systemd/resolved.conf
สิ่งนี้จะไม่เปลี่ยนการตั้งค่าเนมเซิร์ฟเวอร์ ซึ่งชี้ไปที่ตัวแก้ไข stub ดังนั้นจึงป้องกันการแก้ไข DNS เปลี่ยน /etc/resolv.conf
symlink ให้ชี้ไปที่ /run/systemd/resolve/resolv.conf
ซึ่งได้รับการอัปเดตโดยอัตโนมัติเพื่อให้เป็นไปตาม netplan
ของระบบ: sudo sh -c 'rm /etc/resolv.conf && ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf'
หลังจากทำการเปลี่ยนแปลงเหล่านี้ คุณควรรีสตาร์ท systemd-resolved โดยใช้ systemctl restart systemd-resolved
เมื่อติดตั้ง pi-hole แล้ว คุณจะต้องกำหนดค่าไคลเอนต์ของคุณให้ใช้งาน (ดูที่นี่) หากคุณใช้ symlink ด้านบน โฮสต์นักเทียบท่าของคุณจะใช้อะไรก็ตามที่ DHCP ให้บริการ หรือการตั้งค่าคงที่ใดๆ ก็ตามที่คุณกำหนดค่าไว้ หากคุณต้องการตั้งค่าเนมเซิร์ฟเวอร์ของโฮสต์นักเทียบท่าอย่างชัดเจน คุณสามารถแก้ไข netplan ที่ /etc/netplan
จากนั้นรัน sudo netplan apply
ตัวอย่างเน็ตแพลน:
network :
ethernets :
ens160 :
dhcp4 : true
dhcp4-overrides :
use-dns : false
nameservers :
addresses : [127.0.0.1]
version : 2
โปรดทราบว่าคุณสามารถปิดการใช้งาน systemd-resolved
ทั้งหมดได้เช่นกัน อย่างไรก็ตาม สิ่งนี้อาจทำให้เกิดปัญหากับการแก้ไขชื่อใน VPN (ดูรายงานข้อผิดพลาด) นอกจากนี้ยังปิดการใช้งานฟังก์ชันการทำงานของ netplan เนื่องจาก systemd-resolved ถูกใช้เป็นตัวเรนเดอร์เริ่มต้น (ดู man netplan
) หากคุณเลือกที่จะปิดใช้งานบริการ คุณจะต้องตั้งค่าเนมเซิร์ฟเวอร์ด้วยตนเอง เช่น โดยการสร้าง /etc/resolv.conf
ใหม่
ผู้ใช้ Ubuntu รุ่นเก่า (ประมาณ 17.04) จะต้องปิดการใช้งาน dnsmasq
@ Rikj000 ได้จัดทำคู่มือเพื่อช่วยเหลือผู้ใช้ในการติดตั้ง Pi-hole บน Dokku
แท็กนักเทียบท่าหลักอธิบายไว้ในตารางต่อไปนี้ คลิกที่นี่เพื่อดูรายการแท็กทั้งหมด ดูบันทึกประจำรุ่น GitHub เพื่อดูเวอร์ชันเฉพาะของ Pi-hole Core, Web และ FTL ที่รวมอยู่ในรุ่น
เวอร์ชันตามวันที่ (รวมถึงเวอร์ชัน "แพทช์" ที่เพิ่มขึ้น) ไม่เกี่ยวข้องกับหมายเลขเวอร์ชันเชิงความหมายใดๆ แต่จะใช้วันที่เพื่อแยกความแตกต่างระหว่างเวอร์ชันใหม่และเวอร์ชันเก่า ไม่มีอะไรเพิ่มเติม บันทึกประจำรุ่นจะมีรายละเอียดทั้งหมดเกี่ยวกับการเปลี่ยนแปลงในคอนเทนเนอร์เสมอ รวมถึงการเปลี่ยนแปลงส่วนประกอบหลักของ Pi-hole
แท็ก | คำอธิบาย |
---|---|
latest | รุ่นล่าสุดเสมอ |
2022.04.0 | การเปิดตัวตามวันที่ |
2022.04.1 | การเปิดตัวครั้งที่สองในเดือนที่กำหนด |
dev | คล้ายกับ latest แต่สำหรับสาขาการพัฒนา (ดันเป็นครั้งคราว) |
*beta | การเปิดตัวเบต้าช่วงต้นของเวอร์ชันที่กำลังจะมาถึง - นี่คือ Dragons |
nightly | เช่นเดียวกับ dev แต่ถูกผลักดันทุกคืนและดึงมาจากสาขา development ล่าสุดของส่วนประกอบ Pi-hole หลัก (Pi-hole, เว็บ, FTL) |
ความสามารถในการปรับแต่ง Pi-hole มาตรฐานใช้กับนักเทียบท่านี้ แต่ด้วยการบิดตัวนักเทียบท่า เช่น การใช้การเมานต์วอลุ่มนักเทียบท่าเพื่อแมปการกำหนดค่าไฟล์ที่โฮสต์จัดเก็บไว้ในค่าเริ่มต้นของคอนเทนเนอร์ อย่างไรก็ตาม ควรหลีกเลี่ยงการติดตั้งไฟล์การกำหนดค่าเหล่านี้เป็นแบบอ่านอย่างเดียว ไดรฟ์ข้อมูลยังเป็นสิ่งสำคัญในการคงการกำหนดค่าไว้ ในกรณีที่คุณได้ลบคอนเทนเนอร์ Pi-hole ซึ่งเป็นรูปแบบการอัพเกรดนักเทียบท่าทั่วไป
อย่าพยายามอัพเกรด ( pihole -up
) หรือกำหนดค่าใหม่ ( pihole -r
) อิมเมจใหม่จะถูกปล่อยออกมาสำหรับการอัปเกรด การอัปเกรดโดยการแทนที่คอนเทนเนอร์เก่าของคุณด้วยอิมเมจที่อัปเกรดใหม่คือ 'วิธีนักเทียบท่า' คอนเทนเนอร์นักเทียบท่าที่มีอายุการใช้งานยาวนานไม่ใช่วิธีนักเทียบท่าเนื่องจากมีเป้าหมายที่จะพกพาและทำซ้ำได้ ทำไมไม่สร้างมันขึ้นมาใหม่บ่อยครั้ง! เพียงเพื่อพิสูจน์ว่าคุณทำได้
docker pull pihole/pihole
docker rm -f pihole
docker run <args> pihole/pihole
( <args>
เป็นปริมาณการรันที่คุณต้องการและ env vars)ทำไมการอัพเกรดสไตล์นี้ถึงดี? เหตุผลสองประการ: ทุกคนเริ่มต้นจากอิมเมจพื้นฐานเดียวกันซึ่งได้รับการทดสอบแล้วว่าใช้งานได้ ไม่ต้องกังวลกับการอัปเกรดจาก A เป็น B, B เป็น C หรือ A เป็น C เมื่อเปิดตัวการอัปเดต ซึ่งช่วยลดความซับซ้อน และช่วยให้ 'เริ่มต้นใหม่' ได้ทุกครั้ง ในขณะที่ยังคงรักษาการปรับแต่งตามปริมาณไว้ โดยพื้นฐานแล้ว ฉันสนับสนุนหลักการเซิร์ฟเวอร์ฟีนิกซ์สำหรับคอนเทนเนอร์ของคุณ
หากต้องการกำหนดค่า Pi-hole ใหม่ คุณจะต้องใช้ตัวแปรสภาพแวดล้อมคอนเทนเนอร์ที่มีอยู่ หรือหากไม่มีตัวแปรสำหรับสิ่งที่คุณต้องการ ให้ใช้เว็บ UI หรือคำสั่ง CLI
นี่คือหน้าวิกิที่เกี่ยวข้องบางส่วนจากเอกสารของ Pi-hole คุณสามารถใช้เว็บอินเตอร์เฟสหรือเครื่องมือบรรทัดคำสั่งเพื่อดำเนินการเปลี่ยนแปลงกับ pihole
เราติดตั้งยูทิลิตี้ pihole ทั้งหมด ดังนั้นคำสั่ง pihole ในตัวจะทำงานผ่าน docker exec <container> <command>
ดังนี้:
docker exec pihole_container_name pihole updateGravity
docker exec pihole_container_name pihole -w spclient.wg.spotify.com
docker exec pihole_container_name pihole -wild example.com
เว็บเซิร์ฟเวอร์และบริการ DNS ภายในคอนเทนเนอร์สามารถปรับแต่งได้หากจำเป็น ไฟล์การกำหนดค่าใดๆ ที่คุณต่อเชื่อมโวลุ่มเข้ากับ /etc/dnsmasq.d/
จะถูกโหลดโดย dnsmasq เมื่อคอนเทนเนอร์เริ่มทำงานหรือรีสตาร์ท หรือหากคุณต้องการแก้ไขการกำหนดค่า Pi-hole ไฟล์นั้นจะอยู่ที่ /etc/dnsmasq.d/01-pihole.conf
สคริปต์เริ่มต้นของนักเทียบท่าจะทำการทดสอบการกำหนดค่าก่อนที่จะเริ่ม ดังนั้นจะแจ้งให้คุณทราบเกี่ยวกับข้อผิดพลาดใดๆ ในบันทึกของนักเทียบท่า
ในทำนองเดียวกันสำหรับเว็บเซิร์ฟเวอร์ คุณสามารถปรับแต่งการกำหนดค่าได้ใน /etc/lighttpd
ตราบใดที่บริการระบบนักเทียบท่าของคุณเริ่มต้นอัตโนมัติเมื่อบู๊ตและคุณรันคอนเทนเนอร์ของคุณด้วย --restart=unless-stopped
คอนเทนเนอร์ของคุณควรเริ่มทำงานเมื่อบู๊ตและรีสตาร์ทเมื่อเกิดปัญหา หากคุณต้องการให้คอนเทนเนอร์นักเทียบท่าของคุณทำงานเป็นบริการ systemd แทน ให้เพิ่มไฟล์ pihole.service ไปที่ "/etc/systemd/system"; ปรับแต่งชื่อคอนเทนเนอร์ของคุณคืออะไรและลบ --restart=unless-stopped
จากการรันนักเทียบท่าของคุณ หลังจากที่คุณสร้างคอนเทนเนอร์นักเทียบท่าในขั้นต้นโดยใช้คำสั่ง docker run ด้านบน คุณสามารถควบคุมมันได้ด้วย "systemctl start pihole" หรือ "systemctl stop pihole" (แทน docker start
/ docker stop
) คุณยังสามารถเปิดใช้งานให้เริ่มอัตโนมัติเมื่อบู๊ตด้วย "systemctl เปิดใช้งาน pihole" (ซึ่งตรงข้ามกับ --restart=unless-stopped
และตรวจสอบให้แน่ใจว่าบริการนักเทียบท่าเริ่มอัตโนมัติเมื่อบู๊ต)
หมายเหตุ: หลังจากการรันครั้งแรก คุณอาจต้องหยุดคอนเทนเนอร์นักเทียบท่าด้วยตนเองด้วย "docker stop pihole" ก่อนที่ systemctl จะเริ่มควบคุมคอนเทนเนอร์ได้
DNSMasq / FTLDNS คาดว่าจะมีความสามารถดังต่อไปนี้:
CAP_NET_BIND_SERVICE
: อนุญาตให้ FTLDNS เชื่อมโยงกับซ็อกเก็ต TCP/UDP ต่ำกว่า 1,024 (เฉพาะบริการ DNS บนพอร์ต 53)CAP_NET_RAW
: ใช้ซ็อกเก็ตดิบและแพ็กเก็ต (จำเป็นสำหรับการจัดการคำขอ DHCPv6 และตรวจสอบว่าไม่ได้ใช้งาน IP ก่อนที่จะเช่า)CAP_NET_ADMIN
: แก้ไขตารางเส้นทางและการดำเนินการอื่น ๆ ที่เกี่ยวข้องกับเครือข่าย (โดยเฉพาะการแทรกรายการในตารางเพื่อนบ้านเพื่อตอบคำขอ DHCP โดยใช้แพ็กเก็ตแบบผู้รับเดียว)CAP_SYS_NICE
: FTL ตั้งค่าตัวเองเป็นกระบวนการสำคัญเพื่อให้ได้เวลาการประมวลผลเพิ่มขึ้นหากกระบวนการหลังเหลือน้อยCAP_CHOWN
: เราต้องสามารถเปลี่ยนความเป็นเจ้าของไฟล์บันทึกและฐานข้อมูลได้ในกรณีที่ FTL เริ่มต้นเป็นผู้ใช้ที่แตกต่างจาก pihole
อิมเมจนี้จะมอบความสามารถเหล่านั้นโดยอัตโนมัติ หากมี ให้กับกระบวนการ FTLDNS แม้ว่าจะรันในฐานะที่ไม่ใช่รูทก็ตาม
ตามค่าเริ่มต้น นักเทียบท่าจะไม่รวมความสามารถ NET_ADMIN
สำหรับคอนเทนเนอร์ที่ไม่มีสิทธิ์ และขอแนะนำให้เพิ่มลงในคอนเทนเนอร์อย่างชัดเจนโดยใช้ --cap-add=NET_ADMIN
อย่างไรก็ตาม หากไม่ได้ใช้งานโฆษณาเราเตอร์ DHCP และ IPv6 ก็ควรจะข้ามไปได้อย่างปลอดภัย สำหรับผู้ที่หวาดระแวงที่สุด ควรเป็นไปได้ที่จะยกเลิกความสามารถ NET_RAW
อย่างชัดเจนเพื่อป้องกันไม่ให้ FTLDNS ได้รับความสามารถโดยอัตโนมัติ
เราสังเกตเห็นว่าผู้คนจำนวนมากใช้หอสังเกตการณ์เพื่ออัปเดตคอนเทนเนอร์ Pi-hole ให้ทันสมัยอยู่เสมอ ด้วยเหตุผลเดียวกันกับที่เราไม่มีฟีเจอร์การอัปเดตอัตโนมัติในการติดตั้ง Bare Metal คุณ ไม่ควร มีระบบอัปเดตคอนเทนเนอร์ Pi-hole ของคุณโดยอัตโนมัติ โดยเฉพาะอย่างยิ่งไม่ต้องดูแล แม้ว่าเราจะพยายามทำให้แน่ใจว่าจะไม่มีอะไรผิดพลาด บางครั้งก็มีบางอย่างผิดพลาด และคุณต้องจัดสรรเวลาในการดึงและอัปเดตเวอร์ชันของคอนเทนเนอร์ที่คุณต้องการเรียกใช้ ด้วยตนเอง กระบวนการอัปเกรดควรเป็นไปตาม:
Pi-hole เป็นส่วนสำคัญของเครือข่ายของคุณ อย่าปล่อยให้มันหลุดเนื่องจากการอัพเดตโดยไม่ได้ตั้งใจในตอนกลางคืน
โปรดรายงานปัญหาเกี่ยวกับโครงการ GitHub เมื่อคุณสงสัยว่ามีบางอย่างที่เกี่ยวข้องกับนักเทียบท่า คำถาม Pi-hole หรือนักเทียบท่าทั่วไปจะได้รับคำตอบที่ดีที่สุดในฟอรัมผู้ใช้ของเรา