DNSおよびDHCPサーバーとしてのPi-holeの使用
OpenWrt を使用する過程で、OpenWrt の設定が頻繁に変更され、OpenWrt に問題が発生します。その中で、IP アドレスの静的割り当てが最も一般的です。
また、DNSによる広告ブロッキングを行う必要があるため、DNSサーバーとしてPi-holeを利用する必要があり、DNSルックアップを迅速に完了させるためには、Pi-holeのDNSの上流としてSmartdnsを利用する必要があり、DNSルックアップがSmartdnsで提供されます。
Docker macvlan ネットワークの構成
複数のサービスが同じサーバー上で提供されるため、Pi-hole と Smartdns の両方で DNS を提供するためにポート 53 が必要であり、ポート 53 はデフォルトで Ubuntu サーバーによって使用され、LAN 内のデバイスはポート 53 にアクセスする必要があります。 DHCP サービスなので、競合を避けるために、Docker ネットワークのドライバーとして macvlan を使用する必要があります。
macvlan は、複数の MAC アドレスを同じ物理ネットワーク カード上に構成できるようにするネットワーク カード仮想化テクノロジです。つまり、各インターフェイスが独自の IP を構成できます。
macvlan を通じて、各 Docker コンテナに特定の IP アドレスを提供し、コンテナの IP アドレスを通じて LAN 内の設定に直接アクセスできます。/p>
- NIC 無差別モードを有効にする
デフォルトでは、NIC はローカル マシンに送信されたパケットのみを上位層サービスに配信し、他のすべてのパケットは破棄されます。 無作為検出モードを有効にすると、マシンのNICは、宛先アドレスが無作為であるかどうかに関係なく、通過するすべてのデータストリームを受信できるため、Dockerコンテナが他のデバイスからの要求を正常に受信するには、NIC無差別モードを有効にする必要があります。 eth0 は実際の NIC 名と同じでなければならないことに注意してください。
sudo ip link set eth0 promisc on
- macvlanネットワークの作成
macvlan ネットワークを作成するときは、直接アクセスを容易にするために、LAN と一致するように IP 範囲とゲートウェイを指定します。
docker network create -d macvlan --subnet=192.168.0.0/24 --gateway=192.168.0.1 -o parent=eth0 mynet
SmartDNSのインストールと設定
Smartdns をコンテナとして実行し、構成で上流の DNS を指定します
- smartdns.conf
よく使用する DNS サービス プロバイダーを上流 DNS として構成に追加しています。ping による応答遅延を確認し、タイムアウトした上流 DNS を削除できます。
IPV6 を有効にしないこと、または DNS ルックアップに IPV6 アドレスを使用しないことをお勧めします。有効にすると、ネットワークの速度が大幅に低下します。
# サーバーの名前
sever-name mydns
bind-tcp [::]:53
bind [::]:53
tcp-idle-time 10
# ドメイン名の結果キャッシュの数
cache-size 0
prefetch-domain yes
# 有効期限キャッシュサービス機能
serve-expired yes
# 期限切れのキャッシュ サービスの最大タイムアウト
serve-expired-ttl 0
# 速度テストモードの選択
speed-check-mode tcp:80,tcp:443,ping
# 最初のクエリ応答パターン
response-mode first-ping
# TTL 値
rr-ttl-min 60
rr-ttl-max 86400
# IPV6 禁止
force-AAAA-SOA yes
# dualstack-ip-selection yes
# アップストリーム UDP DNS
server 8.8.8.8
server 9.9.9.9 -blacklist-ip -check-edns
# アップストリーム TCP DNS
server-tcp 8.8.8.8
server-tcp 9.9.9.9
# アップストリーム TLS DNS
server-tls 8.8.8.8
server-tls 9.9.9.9
# アップストリーム HTTPS DNS
server-https https://cloudflare-dns.com/dns-query
- Smardns コンテナーを起動する
コンテナを起動するときに、IP アドレスをローカル エリア ネットワーク内で競合しない固定 IP アドレスとして指定し、同時に構成ファイルをコンテナにマウントします。
docker run --restart always \
--name mydns \
-d --network mynet \
--ip 192.168.0.2 \
-v /workspace/mydns/:/mydns
起動が完了したら、telnet を使用してポート 53 に到達できることを確認します。
telnet 192.168.0.2 53
Trying ::1...
Connected to 192.168.0.2.
Escape character is '^]'.
Pi-holeのインストールと設定
- Pi-hole容器を始動します
また、Pi-holeの起動時にIPアドレスを指定する必要があります。
docker run --restart always \
--name pihole \
-d --network mynet \
--ip 192.168.0.3 \
pihole/pihole
Pi-holeの管理インターフェースhttp://192.168.0.3/admin を起動した後、アクセスパスワードを入力する必要があります。
docker exec -it pihole bash
パスワード変更
sudo pihole -a -p
- Smartdns をアップストリーム サーバーとして構成する
[設定]-[DNS]で、Smartdnsを最初のアップストリームサービスサービスとしてアップストリームDNSサービスを構成します。 同時に、他のDNSサービスを追加して、Smartdnsに問題があるときに他のDNSサーバーを使用してインターフェイス構成を変更することを回避し、すべてのクエリソースを許可できます
- DHCPの設定
[設定]-[DNS]で、DHCPを有効にし、割り当てられたIP範囲、ルーターアドレス、ローカルドメイン名、およびDHCP有効期限を指定します
ルーター DHCP 設定および DNS サービス
ルーターの設定で、DHCP をオフにすることを選択し、ルーターを再起動すると、DNS を Pi ホール アドレスとして指定します。
- DHCPをオフにする
[network-interface-LAN] で [Ignore this interface] を選択します。
- DNSの設定
network-interface-LAN設定で、カスタムDNSサーバをPi-holeのアドレスにポイントします