authsec.pihole
ピホール (Pi-hole)
ピホールのロール。このロールは、Pi-hole®: インターネット広告のブラックホールをあなたのためにインストールします。
また、お気に入りのエディタで編集できるシンプルなCSVファイルを使って、Pi-Holeの管理を手伝います。
要件
Ubuntu/Debian/Photon OSを実行しているホスト、またはRaspberry Pi OS (Lite)を実行しているラズベリーパイが必要です。
問題が発生した場合は、Pi-holeのドキュメントを参照すると役立つかもしれません。
ホストCSVファイル
Pi-holeの設定はCSVファイルを通じて行われます。これにより、環境を簡単に管理でき、良い概要が得られます。
このロールには、確認のための完全な例のCSVファイルが files
フォルダーに含まれています。
次の行には、DNSサーバーとしてのIPアドレスをタグ付けし、実際のラズベリーパイで実行されているDNSサーバーの設定を示すdhcp-option
設定が表示されます。
DHCPオプションの設定
hostname,domainname,ip_address,static,mac_address,dhcp_option,type,comment
,,,,,"tag:vm-dns,option:dns-server,192.168.30.253","<<tag>>","使用するDNSサーバーを指定するdhcp-option設定の値を設定"
,,,,,"tag:pi-dns,option:dns-server,192.168.30.254","<<tag>>","使用するDNSサーバーを指定するdhcp-option設定の値を設定"
注意: 複数のDNSサーバーを設定している場合、特定の設定のないクライアントにデフォルトのDNSサーバーを設定するために、riv_pihole_dns_default_tag
オプションを設定することをお勧めします。
IP/ホストのマッピング設定
以下の設定では、slash
という名前のホストがまだ空いている場合、192.168.128.2
のIPアドレスを受け取るように設定されています。別のマシンに既にDHCPリースが割り当てられている場合、新しいIPアドレスが割り当てられます。このマシンは物理ホストとして識別されます。
hostname,domainname,ip_address,static,mac_address,dhcp_option,type,comment
slash,example.net,192.168.128.2,true,,,"<<physical>>","ESXi Host"
静的IPアドレスの設定
特定のホスト名にのみIPアドレスが割り当てられるようにするには、static
フィールドをtrue
に設定します。このオプションを設定すると、dnsmasqは次の例に示されるように、vmhole
という名前のホストからのDHCPリクエストを無視するよう指示します。タイプも仮想マシンとして識別されます。
hostname,domainname,ip_address,static,mac_address,dhcp_option,type,comment
vmhole,example.net,192.168.128.253,true,,,"<<virtual>>","Pi-hole仮想マシンDNSサーバー"
MACアドレス/IPアドレスのマッピング設定
デバイスのMACアドレスを使用して特定のIPアドレスとホスト名を特別なデバイスに割り当てるには、CSV設定データベースに次のエントリを使用します。
hostname,domainname,ip_address,static,mac_address,dhcp_option,type,comment
blib,example.net,192.168.128.18,,00:0c:29:43:37:dc,,"<<virtual>>","Pi-hole仮想マシンDNSサーバー"
異なるDNSサーバーの設定
特定のデバイス用に特別なDNSサーバーを設定するには、マッピングを定義する際に適切なDHCPオプションを提供します。以下の例では、フォトンホスト用にvm-dns
DNSサーバーを設定する方法を示しています。
hostname,domainname,ip_address,static,mac_address,dhcp_option,type,comment
photon,example.net,192.168.128.19,,00:0c:29:51:80:1f,"vm-dns","Dockerイメージに基づくプロキシサーバーVM、vm-dnsサーバーを使用"
ロール変数
このロールでは、以下の変数を使用します:
変数名 | デフォルト | 説明 |
---|---|---|
riv_pihole_admin_password_generated | {{ lookup('password', '/dev/null length=15 chars=ascii_letters') }} | この変数はウェブユーザーインターフェースのパスワードを設定します。パスワードが設定されていない場合、自動生成されます。変数riv_pihole_show_summary がtrue に設定されている場合、最後のステップでパスワードの値が平文で表示されます。 |
riv_pihole_dns_default_tag | この変数は、設定CSVファイルにリストされていないホストのデフォルトDNSサーバーを指定するDHCPタグを設定します。 | |
riv_pihole_show_summary | false | true に設定すると、最後のステップで(生成された)パスワードとともに、Pi-holeがインストールされたホストのIPアドレスや名前など、いくつかの役立つ情報が平文で表示されます。 |
riv_pihole_docker_network | host | Dockerが接続するネットワーク。DHCPを使用する場合、ホストネットワークに接続する必要があります。 |
riv_pihole_docker_purge_networks | yes | Dockerコンテナがシャットダウンされたときに作成されたネットワークを削除します。 |
riv_pihole_dhcp_active | false | 内蔵DHCPサーバーを有効または無効にします。Pi-holeをDHCPサーバーとして使用したい場合は、このオプションをオンにする必要があります。 |
riv_pihole_dhcp_leasetime | 24h | クライアントIPアドレスを割り当てる際のデフォルトリース期間 |
riv_pihole_dhcp_start | 192.168.1.2 | 内蔵DHCPサーバーの開始レンジ。 |
riv_pihole_dhcp_end | 192.168.1.253 | 内蔵DHCPサーバーの最後のアドレス。 |
riv_pihole_dhcp_router | 192.168.1.1 | IPアドレスを取得するクライアントに広告するルーター。 |
riv_pihole_domain | example.net | あなたのローカルネットワークのドメイン。 |
riv_pihole_interface | eth0 | Pi-hole内で処理されるインターフェース。 |
riv_pihole_dhcp_ipv6 | false | DHCPでのIPv6サポートを有効にします。 |
riv_pihole_dhcp_rapid_commit | false | ラピッドコミットオプションの制御スイッチ。 |
riv_pihole_dnsmasq_listening | all | dnsmasqがリッスンするインターフェース。 |
riv_pihole_query_logging | true | DNSクエリをログに記録します。 |
riv_pihole_install_web_server | true | 組み込みのWebサーバーをインストールします。 |
riv_pihole_install_web_interface | true | Webインターフェースをインストールします。 |
riv_pihole_lighttpd_enabled | lighttpdを有効にします。 | |
riv_pihole_ipv4_address | {{ hostvars[inventory_hostname]['ansible_default_ipv4']['address'] | default(ansible_host) }} | Pi-HoleがリッスンするIPv4アドレス。 |
riv_pihole_ipv6_address | Pi-HoleがリッスンするIPv6アドレス。 | |
riv_pihole_dns_bogus_priv | 偽のプライベートリバースルックアップを制御します。 | |
riv_pihole_dns_fqdn_required | 無効の名前がDNSに登録されるかどうかを制御します。 | |
riv_pihole_dnssec | DNSSECを制御します。 | |
riv_pihole_rev_server_enabled | デバイス名解決のためのDNS条件転送を有効にします。 | |
riv_pihole_rev_server_cidr | 条件転送が有効な場合、リバースDNSゾーンを設定します(例: 192.168.0.0/24)。 | |
riv_pihole_rev_server_domain | 条件転送が有効な場合、ローカルネットワークルーターのドメインを設定します(例: example.net)。 | |
riv_pihole_rev_server_target | 条件転送が有効な場合、ローカルネットワークルーターのIPを設定します。 | |
riv_pihole_docker_image | pihole/pihole:latest | プルするDockerイメージを指定します。例えば、バージョンを指定することができます。 |
riv_pihole_configuration_base_folder | /opt/pihole | ターゲットホスト上に設定を保存する場所を指定します。 |
riv_pihole_etc_pihole_folder | {{ riv_pihole_configuration_base_folder }}/pihole | piholeフォルダの位置を制御します。 |
riv_pihole_etc_dnsmasq_folder | {{ riv_pihole_configuration_base_folder }}/dnsmasq.d | dnsmasq.dフォルダの位置を制御します。 |
riv_pihole_sys_dns_server1 | 127.0.0.1 | Pi-hole用のシステムDNSサーバー。最初の1つは必ず127.0.0.1である必要があります。 |
riv_pihole_sys_dns_server2 | 8.8.8.8 | Pi-hole用のシステムDNSサーバー。 |
riv_pihole_dns_server1 | 1.1.1.1 | Dockerコンテナ内で使用されるDNSサーバー。 |
riv_pihole_dns_server2 | 8.8.8.8 | Dockerコンテナ内で使用されるDNSサーバー。 |
riv_pihole_serverip | {{ hostvars[inventory_hostname]['ansible_default_ipv4']['address'] | default(ansible_host) }} | Pi-holeホストのIPアドレス。 |
riv_pihole_timezone | Europe/Berlin | あなたのタイムゾーン。 |
riv_pihole_open_firewall_ports | true | 必要なファイアウォールポートを開かない場合はfalseに設定します。 |
riv_pihole_dns_db_configuration_file | {{ role_path }}/files/mappings.csv | DNS構成ファイルの場所。デフォルトで指し示されているファイルが適切にコピーされ、適応される必要があります。 |
例プレイブック
以下の例は、Photon OSベースの仮想マシンにピホールを設定するために使用できるプレイブックを示しています。インベントリファイルに反映されています。
フォルダ構造
フォルダ構造は以下の通りです(rolesフォルダは自動的に後で作成されます):
|-- dns-db.csv
|-- inventory
|-- pihole-vm.yml
`-- roles
`-- authsec.pihole
|-- defaults
| `-- main.yml
|-- files
| `-- mappings.csv
|-- LICENSE
|-- meta
| `-- main.yml
|-- README.md
|-- tasks
| |-- checkssh-photonos.yml
| |-- checkssh.yml
| |-- firewall-iptables.yml
| |-- install-apt.yml
| |-- install-photonos.yml
| `-- main.yml
`-- templates
|-- 02-pihole-dhcp.conf.j2
|-- 10-pihole-custom-static.conf.j2
`-- setupVars.conf.j2
ロールのインポート
以下のコマンドを使って、このロールをプロジェクトにインポートできます:
#> ansible-galaxy install -p roles authsec.pihole
データベースの作成
これは、roles/authsec.pihole/files
にある例のデータベースのコピーです。
dns-db.csv:
hostname,domainname,ip_address,static,mac_address,dhcp_option,comment
,,,,,"tag:vm-dns,option:dns-server,192.168.128.253","dhcp-option設定の値を設定"
,,,,,"tag:pi-dns,option:dns-server,192.168.128.254","dhcp-option設定の値を設定"
slash,example.net,192.168.128.2,,,,"ESXi Host"
mohh,example.net,192.168.128.5,,,,"The Brain (vCenter Server)"
blib,example.net,192.168.128.18,,00:0c:29:43:37:dc,"pi-dns","Raspberry PiベースのDNS(およびDHCP)サーバーを使用するVM"
photon,example.net,192.168.128.19,,00:0c:29:51:80:1f,"vm-dns","VMベースのDNSサーバーを使用するVM"
vmhole,example.net,192.168.128.253,true,,,"Pi-hole仮想マシンDNSサーバー"
pihole,example.net,192.168.128.254,,,,"このネットワークのためのRaspberry Piが支えるPi-Hole DNSおよびDHCPサーバー、dockerベースおよびansible管理"
inventory:
[dns_vms]
vmhole.example.net ansible_host=192.168.128.253 ansible_user=pihole ansible_become_method='su' ansible_become_password='kevin.is.dead' ansible_python_interpreter=/usr/bin/python3
pihole-vm.yml:
---
# Dockerコンテナ内でpi-holeを実行するためのマシンを設定する
- hosts: dns_vms
gather_facts: yes
become: yes
tasks:
- include_role:
name: authsec.pihole
vars:
# true|false
riv_pihole_admin_password: "secure.me"
riv_pihole_dhcp_active: "false"
riv_pihole_dhcp_start: "192.168.128.8"
riv_pihole_dhcp_end: "192.168.128.252"
riv_pihole_dhcp_router: "192.168.128.1"
riv_pihole_domain: "example.net"
riv_pihole_show_summary: true
riv_pihole_dns_db_configuration_file: "dns-db.csv"
Ansibleを実行
すべてが設定されたら、インベントリで設定したシステムにpi-holeを設定するために、以下のコマンドを実行できます。
#> ansible-playbook -i inventory pihole-vm.yml
ライセンス
MIT