dockerとIPv6を使ってPiHoleを設定する方法のいくつかのガイドを読んだ後、ネットワークでPiHoleを設定してみました。まず、私のISPはプレフィックス委任を提供します。この委任は、ルータ割り当て(RA)を介してネットワークの残りの部分にアドレスを提供するために使用されます。プレフィックスは固定されず、数日ごとに循環します。
ULA設定
br0
私はUbiquity UDM-Proを使用しており、次のようにインターフェイスにULAプレフィックスを追加しました。
ip address add fd79:71d8:a0b7::1/64 dev br0
その直後に、私のすべてのIPv6対応デバイスには、そのプレフィックスを含むULAアドレスが割り当てられました。
端末構成
Dockerが機能するには、IPv6を明示的に有効にしてcidrスコープを提供する必要がありました。これを行うには、daemon.json
次の内容でファイルを作成しました。/etc/docker
{
"ipv6": true,
"fixed-cidr-v6": "fd79:71d8:a0b7::/80"
}
ip6tables
次に、次のコマンドでNATテーブルに追加しました。
sudo ip6tables -t nat -A POSTROUTING -s fd79:71d8:a0b7::/80 ! -o docker0 -j MASQUERADE
これにより、docker0
インターフェイスはIPv6トラフィックを受信できます。もちろん、これらの変更は再起動後も維持されないため、これらの変更を再起動後も維持するパッケージもインストールしiptables-persistent
ましたnetfilter-persistent
。
以下を使用してIPv6接続を確立できることを確認しました。
$ docker run --rm -t busybox ping6 -c 4 google.com
PING google.com (2a00:1450:4017:811::200e): 56 data bytes
64 bytes from 2a00:1450:4017:811::200e: seq=0 ttl=56 time=62.514 ms
64 bytes from 2a00:1450:4017:811::200e: seq=1 ttl=56 time=61.256 ms
64 bytes from 2a00:1450:4017:811::200e: seq=2 ttl=56 time=61.503 ms
64 bytes from 2a00:1450:4017:811::200e: seq=3 ttl=56 time=61.850 ms
--- google.com ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 61.256/61.780/62.514 ms
ピンホール構造
構成はpihole
非常に簡単です。以下を使用してコンテンツをyaml
保存します。pihole.yaml
docker-compose
version: "3.8"
services:
pihole:
container_name: pihole
image: pihole/pihole:latest
ports:
# dns ports
- "53:53/tcp"
- "53:53/udp"
# ports for http interface
- "19080:80/tcp"
- "19443:443/tcp"
environment:
# redacted full address
FTLCONF_LOCAL_IPV4: 10.10.x.25
# redacted full address
FTLCONF_LOCAL_IPV6: fd79:71d8:a0b7:0:...:ae38
# IPs of your DNS entries
dns:
# this is for resolved conf, assuming you have ubuntu and disabled it
- 127.0.0.1
# proper DNS entries follow
- 1.1.1.1
- 1.0.0.1
- 2606:4700:4700::1111
- 2606:4700:4700::1001
# Recommended but not required (DHCP needs NET_ADMIN)
# https://github.com/pi-hole/docker-pi-hole#note-on-capabilities
cap_add:
- NET_ADMIN
restart: unless-stopped
私は使用しますdocker-compose -f pihole.yaml up
。
問題:返信が別のアドレスから来たか、タイムアウトしました。
問題は、他のコンピュータでは利用できないことです。イメージが実行されているマシンでは問題なく使用docker
できます。dig
たとえば、ホストにコマンドを入力すると、次のような結果が表示されます。
$ dig @fd79:71d8:a0b7:0:...:ae38 -p 53 google.com AAAA
; <<>> DiG 9.18.12-0ubuntu0.22.04.1-Ubuntu <<>> @fd79:71d8:a0b7:0:...:ae38 -p 53 google.com AAAA
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60684
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;google.com. IN AAAA
;; ANSWER SECTION:
google.com. 83 IN AAAA 2a00:1450:4017:805::200e
;; Query time: 8 msec
;; SERVER: fd79:71d8:a0b7:0:...:ae38#53(fd79:71d8:a0b7:0:...:ae38) (UDP)
;; WHEN: Mon May 15 01:44:42 EEST 2023
;; MSG SIZE rcvd: 67
ただし、他のLinuxベースのコンピュータでこのコマンドを入力しました。コマンドがタイムアウトしました。つまり、
dig -6 @fd79:71d8:a0b7:0:...:ae38 -p 53 google.com
;; communications error to fd79:71d8:a0b7:0:...:ae38#53: timed out
;; communications error to fd79:71d8:a0b7:0:...:ae38#53: timed out
;; communications error to fd79:71d8:a0b7:0:...:ae38#53: timed out
; <<>> DiG 9.18.12-0ubuntu0.22.04.1-Ubuntu <<>> -6 @fd79:71d8:a0b7:0:...:ae38 -p 53 google.com
; (1 server found)
;; global options: +cmd
;; no servers could be reached
調査のために住所がブロックされているか確認してみましたが、netcat
ポートが営業のために開いていることがわかりました。
nc -z fd79:71d8:a0b7:0:...:ae38 53 -v
Connection to fd79:71d8:a0b7:0:...:ae38 53 port [tcp/domain] succeeded!
さらに調査した結果、MacOSで使用するとより多くの情報が得られる可能性がありますdig
。接続自体はタイムアウトにならないようですが、その他住所
MacOSの出力は、dig
以前と同じアドレスを使用して次のようになります。
$ dig -6 @fd79:71d8:a0b7:0:...:ae38 google.com
;; reply from unexpected source: fd79:71d8:a0b7::60b#53, expected fd79:71d8:a0b7:0:...:ae38#53
;; reply from unexpected source: fd79:71d8:a0b7::60b#53, expected fd79:71d8:a0b7:0:...:ae38#53
; <<>> DiG 9.10.6 <<>> -6 @fd79:71d8:a0b7:0:5043:6018:fb4f:ae38 google.com
; (1 server found)
;; global options: +cmd
;; connection timed out; no servers could be reached
回答を提供するというアドレスを使用すると期待どおりに機能し、
dig -6 @fd79:71d8:a0b7::60b google.com
; <<>> DiG 9.10.6 <<>> -6 @fd79:71d8:a0b7::60b google.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9440
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;google.com. IN A
;; ANSWER SECTION:
google.com. 156 IN A 172.217.17.142
;; Query time: 22 msec
;; SERVER: fd79:71d8:a0b7::60b#53(fd79:71d8:a0b7::60b)
;; WHEN: Mon May 15 01:51:58 EEST 2023
;; MSG SIZE rcvd: 55
ビューインターフェイスIPを使用すると、ip -6 addr show dev enp9s0f1
次のものを検索できます。
5: enp9s0f1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether b4:xx:xx:xx:xx:a6 brd ff:ff:ff:ff:ff:ff
inet 10.10.x.25/24 brd 10.10.x.255 scope global dynamic noprefixroute enp9s0f1
valid_lft 83538sec preferred_lft 83538sec
inet6 2a02:587:<redacted>/128 scope global dynamic noprefixroute
valid_lft 83539sec preferred_lft 83539sec
inet6 fd79:71d8:a0b7::60b/128 scope global dynamic noprefixroute
valid_lft 83539sec preferred_lft 83539sec
inet6 2a02:587:<redacted>/64 scope global dynamic noprefixroute
valid_lft 73590sec preferred_lft 73590sec
inet6 fd79:71d8:a0b7:0:...:ae38/64 scope global dynamic noprefixroute
valid_lft 86138sec preferred_lft 86138sec
inet6 fe80::1ea:<redacted>:eb62/64 scope link noprefixroute
valid_lft forever preferred_lft forever
なぜ別のアドレスから返信が来たのですか?ここに示すように、アウトバウンドアドレスに別のアドレスを使用するRFC4941を無効にしました。
$ nmcli con show "Wired connection 4" | grep ipv6.ip
ipv6.ip6-privacy: 0 (disabled)
IPv6のルーティングは次のとおりです。
$ ip -6 route show
::1 dev lo proto kernel metric 256 pref medium
2a02:587:...::60b dev enp9s0f1 proto kernel metric 100 pref medium
2a02:587:...::/64 dev enp9s0f1 proto ra metric 100 pref medium
fd79:71d8:a0b7::60b dev enp9s0f1 proto kernel metric 100 pref medium
fd79:71d8:a0b7::/80 dev docker0 proto kernel metric 256 linkdown pref medium
fd79:71d8:a0b7::/80 dev docker0 metric 1024 linkdown pref medium
fd79:71d8:a0b7::/64 dev enp9s0f1 proto ra metric 100 pref medium
fe80::/64 dev docker0 proto kernel metric 256 linkdown pref medium
fe80::/64 dev br-5c9052b3a88b proto kernel metric 256 pref medium
fe80::/64 dev br-ba2b20fe7aa1 proto kernel metric 256 pref medium
fe80::/64 dev veth3fb9416 proto kernel metric 256 pref medium
fe80::/64 dev veth7a050e3 proto kernel metric 256 pref medium
fe80::/64 dev vethe299802 proto kernel metric 256 pref medium
fe80::/64 dev veth5110238 proto kernel metric 256 pref medium
fe80::/64 dev cali7ffb27b031d proto kernel metric 256 pref medium
fe80::/64 dev calib5cff4a4a14 proto kernel metric 256 pref medium
fe80::/64 dev cali6b881403436 proto kernel metric 256 pref medium
fe80::/64 dev calib1a2ba7ef9f proto kernel metric 256 pref medium
fe80::/64 dev cali20c73fad203 proto kernel metric 256 pref medium
fe80::/64 dev calib05d5a88d5c proto kernel metric 256 pref medium
fe80::/64 dev vxlan.calico proto kernel metric 256 pref medium
fe80::/64 dev enp9s0f1 proto kernel metric 1024 pref medium
default via fe80::...:62b3 dev enp9s0f1 proto ra metric 100 pref high
なぜこれが起こるのかを理解するのに役立つ人はいますか?応答が常に他のアドレスから来る理由がわかりません... ISPが提供するプレフィックスは時間の経過とともに変更されるため、使用できないため、DNSサーバーに安定したULAアドレスを使用したいと思います。 tプライバシーアドレスを使用して再び言いますが、これは時間の経過とともに変わります。