Skip to main content

Pi-hole (DoH) ตัวกันโฆษณา พร้อมปกป้องความเป็นส่วนตัว ติดตั้งแบบแบบ macvlan

ลงแบบนี้ต่างกับใช้แบบเดิม ๆ คือถ้าไม่ได้ตั้ง Pi-hole เป็น DHCP ก็จะยังเห็น client ที่ connect เข้ามาแยกกัน ไม่รวมเป็นอันเดียวว่ามาจาก router  และจะได้ ip จริง เช่น 192.168.111 ไม่ได้เป็น port Synology ซึ่งจำง่ายและสะดวกกว่าเวลาเอาไปใช้ นอกจากนี้ยังทำ DNS-over-HTTPS ให้ด้วยเพื่อความเป็นส่วนตัว

ขั้นตอนติดตั้ง

จัดเตรียมไฟล์

save code ด้านล่างไปทำไฟล์ docker-compose.yaml

# Note: 192.168.1.xxx is an example network, you must update all these to match your own.

version: '2.2'

services:
  cloudflared:
    container_name: cloudflared
    image: cloudflare/cloudflared
    command: proxy-dns
    environment:
      - "TUNNEL_DNS_UPSTREAM=https://1.1.1.1/dns-query,https://1.0.0.1/dns-query,https://9.9.9.9/dns-query,https://149.112.112.9/dns-query"

      # Listen on an unprivileged port
      - "TUNNEL_DNS_PORT=5053"

      # Listen on all interfaces
      - "TUNNEL_DNS_ADDRESS=0.0.0.0"

    # Attach cloudflared only to the private network
    networks:
      internal:
        ipv4_address: 172.30.9.2
    restart: unless-stopped
    
  pihole:
    container_name: pihole
    image: pihole/pihole:latest
    # For DHCP it is recommended to remove these ports and instead add: network_mode: "host"
    hostname: pihole
    domainname: example.com             # <-- Update
    mac_address: d0:ca:ab:cd:ef:01
    cap_add:
      - NET_ADMIN # Required if you are using Pi-hole as your DHCP server, else not needed
    volumes:
      - "./etc-pihole/:/etc/pihole/"
      - "./etc-dnsmasq.d/:/etc/dnsmasq.d/"
    dns:
      - 127.0.0.1
      - 8.8.8.8
    ports:
      - 443/tcp
      - 53/tcp
      - 53/udp
      - 67/udp          # Only required if you are using Pi-hole as your DHCP server
      - 80/tcp
    environment:
      TZ: Asia/Bangkok
      FTLCONF_REPLY_ADDR4: 192.168.1.111        # <-- Update (match ipv4_address)
      VIRTUAL_HOST: pihole.example.com          # <-- Update (match hostname + domainname)
      WEBPASSWORD: "yourpassword"                 # <-- Add password (if required)
      PIHOLE_DNS_: "172.30.9.2#5053;no"
      # Listen on all interfaces and permit all origins
      # This allows Pihole to work in this setup and when answering across VLANS,
      # but do not expose pi-hole to the internet!
      DNSMASQ_LISTENING: "all"
    networks:
      internal:
        ipv4_address: 172.30.9.3
      default:
        ipv4_address: 192.168.1.111   # <-- Update
    restart: unless-stopped
    # Starts cloudflard before Pi-hole
    depends_on:
      - cloudflared

networks:
  # Create the internal network
  internal:
    ipam:
      config:
        - subnet: 172.30.9.0/29
  default:                      # Name of network
    driver: macvlan             # Use the macvlan network driver
    driver_opts:                # If open vSwitch is disabled use eth0 (or eth1 +)
      parent: eth0
    ipam:
      config:
        - subnet: 192.168.1.0/24            # Specify subnet <-- Update 
          gateway: 192.168.1.1              # Gateway address <-- Update
          ip_range: 192.168.1.250/28        # Available IP addresses <-- Update

ใช้ notepad หรืออะไรก็ได้เปิดไฟล์ docker-compose.yaml ขึ้นมา เน้นดูตรงส่วนของ comment ในไฟล์ แก้ให้ตรงกับที่ใช้ ส่วนที่สำคัญที่ต้องดูจริง ๆ คือ

mac_address: d0:ca:ab:cd:ef:01

mac_address: ใช้ในการ fix IP บน router ตั้งให้ถูกหลักพอ หรือไม่ตั้งก็ได้


FTLCONF_REPLY_ADDR4: 192.168.1.111        # <-- Update (match ipv4_address)

FTLCONF_REPLY_ADDR4: แก้  ip ของ Pi-hole ที่จะใช้ โดยตั้งให้ตรงกับวง LAN ในบ้าน อย่างของผมใช้ 192.168.1.111 วงในบ้านคือ 192.168.1.1


VIRTUAL_HOST: pihole.example.com          # <-- Update (match hostname + domainname)
WEBPASSWORD: "yourpassword"                 # <-- Add password (if required)

VIRTUAL_HOST: อันนี้ไม่สำคัญแต่เป็นโดเมนไว้เข้า Pi-hole ง่าย ๆ ถ้าไม่แก้อะไรเลยเวลาใช้งานก็เข้าผ่าน pihole.example.com หรือ pi.hole ซึ่งเป็นค่าเริ่มต้น  ถ้าจะแก้ VIRTUAL_HOST: อย่าลืมย้อนไปแก้ hostname: และ domainname: ให้ตรงด้วย

WEBPASSWORD: ตั้งรหัสผ่านเพื่อเข้าใช้หน้า admin page

    networks:
      internal:
        ipv4_address: 172.30.9.3
      default:
        ipv4_address: 192.168.1.111   # <-- Update

network ในส่วนของ Pi-hole ดูเฉพาะส่วน  ipv4_address: ของ  default:  ที่เขียนให้อัพเดท โดยตั้งให้ตรงกับ FTLCONF_REPLY_ADDR4:



  default:                      # Name of network
    driver: macvlan             # Use the macvlan network driver
    driver_opts:                # If open vSwitch is disabled use eth0 (or eth1 +)
      parent: eth0

network ในส่วนล่างสุดใช้ในการสร้าง network ของ docker จุดสำคัญคือต้องไปเช็คว่าใช้  eth0  หรือใช้ ovs_eth0 โดยดูได้จากภาพ

เช็ค Open vSwitch และ LAN ที่ใช้อยู่

เช็ค Open vSwitch และ LAN ที่ใช้อยู่

สำหรับคนที่เปิด Open vSwitch ไว้
เช็คได้จาก
Control Panel > Network > Network Interface > Manage > Open vSwitch Settings ถ้ามีติ๊กถูก แสดงว่าต้องใช้ ovs_eth0
ให้แก้บรรทัดสุดท้ายให้เป็น
ovs_eth0 จาก eth0

parent: ovs_eth0

สำหรับ NAS ที่มี Lan 2 ช่อง ให้เช็ค
Control Panel > Network > Network Interface
ว่าคุณเสียบ LAN ช่องไหนไว้ ถ้าเป็น LAN 1 ไม่ต้องแก้อะไร ถ้าเป็น LAN 2 ให้แก้เป็น

parent: eth1



    ipam:
      config:
        - subnet: 192.168.1.0/24            # Specify subnet <-- Update 
          gateway: 192.168.1.1              # Gateway address <-- Update
          ip_range: 192.168.1.250/28        # Available IP addresses <-- Update

ส่วนนี้คือ subnet, gateway และ ip_range ให้ตั้งเป็นวง LANในบ้าน
คือถ้าบ้านเป็นวง 192.168.0.1 ก็ต้องเปลี่ยนจาก 192.168.1.0/24 ให้เป็น 192.168.0.0/24 ทำนองนั้น ทำทั้ง 3 บรรทัดให้ครบ (ถ้าเป็นวง 192.168.1.x อยู่แล้วก็ไม่ต้องทำอะไร)  แก้เสร็จหมดแล้วให้เซฟไฟล์



จัดเตรียม folder ติดตั้ง

ย้อนกลับไปดูไฟล์ docker-compose.yaml อีกครั้ง ในส่วนของ volume

    volumes:
      - "./etc-pihole/:/etc/pihole/"
      - "./etc-dnsmasq.d/:/etc/dnsmasq.d/"

จะเห็นได้ว่าเราจะต้องมีการสร้าง 2 folder ย่อยใน docker โดยโครงสร้าง folder ก็จะมีหน้าตาประมาณนี้

docker
│
└─── pihole
     │   docker-compose.yaml
     │
     └─── etc-pihole
     │
     └─── etc-dnsmasq.d


เข้าไปจัดการสร้าง folder ผ่าน File Station ใน DSM ให้เรียบร้อย

หลังจากนั้น copy ไฟล์ docker-compose.yml ที่ทำไว้แล้วไปใส่ไว้ใน pihole

 ตัวอักษรเล็กใหญ่มีผล ตั้งให้ถูกต้อง ไม่งั้นจะไป error ในขั้นตอนติดตั้ง

image.png

ขั้นตอนเตรียมไฟล์ต่าง ๆ เสร็จเรียบร้อยแล้วต่อไปคือติดตั้ง



ติดตั้ง

SSH แล้วติดตั้งโปรแกรมตามขั้นตอนปกติ

cd /volume1/docker/pihole
docker-compose up -d


หลังจากติดตั้งเสร็จแล้ว pihole จะขึ้นไปแสดงใน tab Container เอง โดยหากดูที่ tab Network ก็จะเห็น macvlan แสดงขึ้นมาด้วย

1 DHGGSUDWUKo7ajLnMCVK7w.jpeg

จบขั้นตอนติดตั้งแล้วอย่าลืม

  • เข้าไปตั้งค่าใน Router ให้ DHCP ชี้ไปที่ IP ของ pihole โดยในตัวอย่างคือให้ชี้ไปที่ 192.168.1.111
  • fix ip ใน DHCP โดย mac address ดูในจากในสคริปต์ ในตัวอย่างคือ mac_address: d0:ca:ab:cd:ef:01 เพื่อกันอุปกรณ์อื่นพลาดมาใช้ ip เดียวกัน
  • เข้า Pi-hole ได้ผ่าน IP ที่ตั้งไว้ หรือโดเมน pi.hole และ pihole.example.com เข้าไปตั้งค่าได้เลย
  • หลังจากทุกอย่างทำงานเรียบแล้วแล้วเช็คว่า DoH ทำงานหรือไม่ได้ที่ https://1.1.1.1/help



Blocklists

ลงไม่ต้องเยอะไม่งั้นจะสร้างปัญหาให้แทน

https://firebog.net/ — Pi Hole blocklists



อัพเดท Pi-hole

ง่าย ๆ ค่าที่ตั้งไว้ไม่หายโดย

  • เปิด Docker ใน Synology ขึ้นมา
  • tab Container ให้หยุดการทำงานแล้วลบทิ้ง
  • tab Image ให้ลบ pihole/pihole:latest ทิ้ง
  • tab Network ให้ลบ pihole_network ทิ้งได้เลย
  • ทำซ้ำขั้นตอนติดตั้งจบที่ docker-compose up -d
  • เรียบร้อย

หรือ ลง watchtower แล้วก็ไม่ต้องมาสนใจเรื่องอัพเดทเองอีกเลย

Source
https://www.reddit.com/r/synology/comments/gmfta3/pihole_5_on_synology_using_docker_simplified_with/
http://tonylawrence.com/posts/unix/synology/free-your-synology-ports/