前回のFireflyの移設に味を占めたのでpi-holeも移植することにしました。
ブラウザにも広告ブロックを有効にしているので困ってはいませんが、やはり根元から広告は減らしておきたいです。
移植は上手くいったものの、ホスト側からリゾルバが効かなくて実用には至りませんでした。
環境
もともとのクライアントであったWindows10のwsl上のdockerの中に作ります。
やはり作成が簡単ですからね。
Windowsは自身に問い合わせるという形になります。
デプロイ
ymlファイル
公式サイトにdockerでのインストール方法も乗っていますのでdocker-composeファイルをほぼコピーです。
一部マスクしますが、こんな感じ。
ポート80はFireflyで使ってますので81にしました。
は自分の環境用に追加しました。
masashi@DESKTOP-HBP3520:/mnt/c/Users/masashi/tools/docker/pi-hole$ cat docker-compose.yml version: "3" # 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 - "81:80/tcp" environment: TZ: 'Asia/Tokyo' # WEBPASSWORD: 'set a secure password here or it will be random' # Volumes store your data between container upgrades WEBPASSWORD: 'xxxxxxxxxxxxxx' FTLCONF_LOCAL_IPV4: 192.168.xx.xx PIHOLE_DNS_: xx.xx.xx.xx;xx.xxx.xx.xx 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
up
とりあえずフォアグラウンドで動かします。
masashi@DESKTOP-HBP3520:/mnt/c/Users/masashi/tools/docker/pi-hole$ sudo docker-compose -f docker-compose.yml up Recreating pihole ... done Attaching to pihole pihole | s6-rc: info: service s6rc-oneshot-runner: starting pihole | s6-rc: info: service s6rc-oneshot-runner successfully started pihole | s6-rc: info: service fix-attrs: starting pihole | s6-rc: info: service fix-attrs successfully started pihole | s6-rc: info: service legacy-cont-init: starting pihole | s6-rc: info: service legacy-cont-init successfully started pihole | s6-rc: info: service cron: starting pihole | s6-rc: info: service cron successfully started pihole | s6-rc: info: service _uid-gid-changer: starting pihole | s6-rc: info: service _uid-gid-changer successfully started pihole | s6-rc: info: service _startup: starting pihole | [i] Starting docker specific checks & setup for docker pihole/pihole (略) pihole | pihole | [?] FTL is listening on port 53 pihole | [?] UDP (IPv4) pihole | [?] TCP (IPv4) pihole | [?] UDP (IPv6) pihole | [?] TCP (IPv6) pihole | pihole | [?] Pi-hole blocking is enabled pihole | pihole | Pi-hole version is v5.16.2 (Latest: v5.16.2) pihole | AdminLTE version is v5.19 (Latest: v5.19) pihole | FTL version is v5.22 (Latest: v5.22) pihole | Container tag is: 2023.03.1 pihole |
上がったっぽい。
管理Webアクセス
見えてますね。OKそう。
問題: ホスト側から名前解決できない
管理画面は見えたものの肝心の名前解決ができません。
なぜだ。
PS C:\Users\masashi> nslookup www.google.com サーバー: UnKnown Address: 127.0.0.1 *** UnKnown が www.google.com を見つけられません: No response from server
ちなみにwsl上ではOK。
masashi@DESKTOP-HBP3520:/mnt/c/Users/masashi/tools/docker/pi-hole$ dig www.google.com @127.0.0.1 ; <<>> DiG 9.16.1-Ubuntu <<>> www.google.com @127.0.0.1 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 39335 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ;; QUESTION SECTION: ;www.google.com. IN A ;; ANSWER SECTION: www.google.com. 209 IN A 142.251.222.4 ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Sun Apr 09 13:22:33 JST 2023 ;; MSG SIZE rcvd: 59
Listen状態を確認
コンテナを落として実は競合とかしてないか確認します。
PS C:\Users\masashi> netstat -ano | findstr 53 TCP 0.0.0.0:5357 0.0.0.0:0 LISTENING 4 TCP 127.0.0.1:5354 0.0.0.0:0 LISTENING 4040 TCP [::]:5357 [::]:0 LISTENING 4 UDP 0.0.0.0:53 *:* 4852 UDP 0.0.0.0:5353 *:* 11104 UDP (略)
53番がListenしている。なんだこれは。
PS C:\Users\masashi> tasklist -svc -fi "pid eq 4852" イメージ名 PID サービス ========================= ======== ============================================ svchost.exe 4852 SharedAccess
pidで絞ったらShardAccessというサービスが使っているようです。
なんかWindows経由で同じLAN内のコンピュータをインターネットに接続できるようにできるサービスらしいです。
コンテナ起動時にポート競合のエラー等は出ていなかったのですが、ポート競合していると正常な動作はしなさそうなので、ICSサービスを停止しました。
が、直ぐ上がってきてしまいました。
サービス管理のウィザード等試しましたがOS再起動すると戻ってしまうしどうやら無効にはできないみたい。
結論: WindowsでのDNSサーバはやめよう
これがWindows Serverとかなら何かやりようがあると思いますが、使っている10はもともとクライアント用途のOSですし、レジストリをいじってまで自身のDNSサーバを使うものでもないと思うので今回のケースはあきらめました。
今回の構成は文献、記事も無く試す人もいないほど効果的なものではないのでしょうか。
dockerでのデプロイまでは成功しているのでまた別筐体に移せるときにDNS周りは変更したいと思います。