ラズパイでDNSサーバを構築する(ラズパイおうちDCシリーズ 第一回)

ラズパイで始める自宅サーバライフ!

Raspberry Pi、いいですよね(唐突)
省電力・静音・省スペース・低価格なので気軽にあこがれの自宅サーバライフを始めることができます。
自宅LAN専用ならセキュリティのハードル低いし、便利だし、ペットみたいでかわいいので、ぜひサーバー初心者の方におすすめしたい…

というわけで今回から「ラズパイおうちDCシリーズ」と題しまして、ラズパイを使った自分用の便利サービス(wikiやクラウドストレージなど)を構築するHowToを書いていきたいと思います!
主にサーバ初心者の方を対象として丁寧に説明していきたいと思いますので、よろしくお願いいたします。

第一回は、おうちDCを支えるインフラサービスとしてUnboundを使ったDNSサーバを構築していきます。

ラズパイでなくても、余っているPCなどにUbuntuを入れれば同じことができます!

目次

なぜDNSサーバを構築するのか

HowToへ入る前に、DNSサーバを建てる意義について説明します。

そもそもDNS(Domain Name Service)とは、目的のサーバと通信するためにドメイン名からIPアドレスを調べる(名前解決)ための仕組みです。一般家庭の環境では、プロバイダの用意したDNSサーバがこの役割を担当していることが多いかと思います。

おうちDCをつくるにあたってDNSサーバは必須ではありませんが、これを用意することで以下のようなメリットがあります。

  • IPアドレスだけでなく、ドメイン名を使って簡単にサーバへアクセスできるようになる
  • 自分で勝手にドメインを考えて使える→推しの名前でアクセスも可
  • HTTPSを使ったセキュアなアクセスでサーバ証明書エラーが出なくなる

サーバ証明書エラーが出なくなることも大切ですが、やはり自分で好きなドメイン考えて使えるメリットが大きいですね(もちろん自宅LAN内専用です)。
くだらないことですが、モチベーション高く自宅で全力エンジニアを続けるにはこういうの大事ですよほんと…

やること

ゴール:ラズパイでおうちDC用のDNSサーバを構築し、クライアントから使えるようにする。
OS:Raspberry Pi OS

  • ラズパイのIPアドレスを固定する
  • Unboundを使用
  • 自宅サーバの問い合わせはラズパイで処理し、外部サーバの問い合わせはルータへフォワーディングする

OSインストールやSSHの設定など初期セットアップを終えたところからスタートします。

初期セットアップについてはこちらをどうぞ!

ラズパイのIPアドレスを固定する

まずはラズパイ本体のIPアドレスを固定します。サーバとして使うには決まったアドレスでアクセスできる必要があるからです。
IPアドレス(通信相手を指定するための住所)は各クライアントが1つ以上持っていますが、一般家庭のネットワークではルータが適当に決めて各クライアントに割り当てる設定になっていることがほとんどです(DHCP機能)。ルータを買ってきて適当につなげば通信できる便利機能なのですが、一方でサーバはアドレスを自分で決めて固定しないと各クライアントからアクセスしにくいという事情があるため、固定します。

設定は簡単で、“/etc/dhcpcd.conf”の最後へ以下の例を参考に追記するだけです。

interface eth0
static ip_address=192.168.1.10/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.1
interfaceインタフェース名を入れます。
初期状態の有線LANポートなら”eth0″、無線LANなら”wlan0″です。
static ip_addressラズパイに設定したいIPアドレスとプレフィックス長を入力します。
static routersデフォルトゲートウェイ(たいていはルータ)のアドレスを入力します。
static domain_name_serversラズパイ自身が使うDNSサーバ(たいていはルータ)のアドレスを入力します。

“static ip_address”には、そのネットワーク内のアドレスを指定するように注意します。

・アドレスの指定:アドレスはそのネットワーク内で指定します。ラズパイでifconfigコマンドを叩きますと”inet 192.168.x.y”と”broadcast 192.168.x.z”の項目が出てきますが、共通する部分(192.168.x)がネットワークを表す「ネットワークアドレス」です。これとクライアントを示す「ホストアドレス」を1~244の範囲で他機器とかぶらないように組み合わせ、アドレスを指定します。例えば”192.168.1.50″は、「192.168.1ネットワーク」の「50番ホスト」という意味です。
・プレフィックス長:プレフィックス長は、どこまでがネットワークアドレスかを示すもので、特に設定してなければたいていは24です(ipv4、クラスCの場合)。

保存したら再起動し、アドレスが変わっていればOKです。

Unboundのインストール

続いてUnboundをインストールします。
こちらも簡単でapt installするだけです。

#いつもの
sudo apt update

#unboundのインストール
sudo apt install unbound

Unboundの設定

インストールすると、“/etc/unbound”ディレクトリが出現します。
この中の“unbound.conf.d”ディレクトリに“*.conf”の名前で設定ファイルを入れると読み込んでくれる仕組みです。

設定ファイルの作成

エディタを使って“unbound.conf.d”内に新しく“*.conf”ファイルを作り、以下の例を参考に設定を記述します。
dns.confとかわかりやすい名前でいいです。

server:
 interface: 192.168.1.50

 #あるネットワークからの問い合わせを受ける
 access-control: 192.168.1.0/24 allow
 #あるクライアントからの問い合わせを受ける
 access-control: 192.168.1.1 allow
 #それ以外のクライアントからの問い合わせを拒否する
 access-control: 0.0.0.0/0 deny
 access-control: ::0 deny

 local-data: "babanba.tanmati. IN A 192.168.1.10"
 local-data: "eieimun.tanmati. IN A 192.168.1.10"

 python:
  remote-control:
   forward-zone:
    name: "."
    forward-addr: 192.168.1.1

 verbosity: 1
 logfile: /var/log/unbound/dns.log
 use-syslog: no
 
interfaceラズパイのIPアドレスを入力します。
access-controlどのネットワークやクライアントからの問い合わせを受け付けるか指定し、アクセス制御ができます。
まず許可するアドレスを記述し、最後は全アドレスを拒否することでホワイトリスト方式による制御ができます。
local-dataこのサーバで扱う内部ドメインのDNSレコード情報を記載します。
Aレコードは”ドメイン名. IN A アドレス”で指定できます。
FQDNの後に” . “を入れすのを忘れないようにします。
forward-addr外部のドメインに関する問い合わせのフォワーディング先を指定します。
ルータのIPアドレスを指定すれば、構築前の状況と同じくルータに問い合わせを任せられます。
verbosityログをどれくらい詳しく残すか指定します。
0-5まで指定でき、数字が多いと情報も詳しくなります。通常は1でいいです。
logfileログの保存先を指定します。
use-syslognoにするとsyslogに出力しなくなります。

ここで推しの名前をTLDにして”local-data”で設定してあげれば、サーバに推しの名前でアクセスできて楽しいです(もちろんLAN内限定ですが)!
ただし実在するドメイン名と被ったものを設定すると本物にアクセスできなくなるので注意。

推しの名前でドメイン指定できるのは自宅サーバならではの楽しみ!

できたら再起動します。

sudo systemctl restart unbound

問題なければUnboundのセットアップは完了です。

🐴パルシャちゃんのセキュアポイント🐴
DNSとHTTPのリスク


このようにDNSサーバを用意すればDNS情報は変えることができ、閲覧者を偽サイトへ誘導するなど簡単に悪用できてしまいます。そのため、ユーザとして公衆無線LANのような外部のネットワークに接続する際は、相手サーバが本物かどうか検証を行わないHTTPメソッドを使った通信はリスクが高いので避けるべきでしょう。HTTPSメソッドならば、サーバ証明書の検証エラーでブラウザが警告を出すので気づけます。
また、サーバ管理者側の対策としては、常時SSL化だけでなくHSTSに対応する、さらにPreloadにも対応するなどのユーザを守る努力が必要かと思います。

ファイアウォールの設定

続いて外部とUnboundが通信できるよう、ファイアウォールを設定します。
DNSサービスは53/UDPポートを使用します。

#FWで接続元を限定するならば
sudo ufw allow from 192.168.xx.xx to any port 53 proto udp
#FWでは特に限定しないのならば
sudo ufw allow to any port 53 proto udp
#適用前に設定の確認
sudo ufw status
#適用
sudo ufw reload

これでDNSサーバの構築は完了です!
試しにWindowsから問い合わせてみましょう。WindowsでDNSサーバを指定して問い合わせるには以下のコマンドをcmdで実行します。

#windows cmd
nslookup 問い合わせたいドメイン名 DNSサーバのIPアドレス

以下のように1つ目の“Address”がDNSサーバのアドレスとなっている正しいレスポンスが返ってくればokです!

C:\Users\sumomo>nslookup www.jra.go.jp 192.168.1.2
サーバー: UnKnown
Address: 192.168.1.2 ←これ

権限のない回答:
名前: e72745.ksd.akamaiedge.net
Addresses: 184.26.43.217
           184.26.43.203
Aliases:   www.jra.go.jp
           www.jra.go.jp.edgekey.net

クライアント側の設定

最後にクライアント(PC)側でDNSサーバを使うための設定をします。
ここではWindowsでの設定を紹介します。

まずデスクトップ右下のネットワークアイコンを右クリックし、「ネットワークとインターネットの設定を開く」→「アダプターのオプションを変更する」と進み、「ネットワーク接続」画面で使っているネットワークデバイスを右クリック、「プロパティ」を選択します。

すると「(ネットワークデバイス名)のプロパティ」という画面が開きますので「インターネットプロトコルバージョン4(TCP/IPv4)」を選択して「プロパティ」ボタンをクリックします。

プロパティ画面が開いたら「次のDNSサーバーのアドレスを使う」のラジオボタンをクリックし「優先DNSサーバー」にDNSサーバのIPアドレスを入力します。

あとは先ほどのnslookupやブラウジングを試してみて問題なくできれば完了です!

おわり

今回はラズパイおうちDCシリーズの第一回として、Unboundを使ったDNSサーバの構築を行いました。
今後はクラウドストレージの構築やWikiの構築などをやっていきたいと思っておりますので、また覗きに来ていただけますと幸いです。

では!

  • URLをコピーしました!
ベル
お馬ちゃんが大好きなサイバーセキュリティ熱波師
セキスペ合格済
静香さん・ひなたちゃん・風花担当の熱波師P🍎

コメント

コメントする

CAPTCHA


目次