HOME | 2026-11-05 (Thu) Today's Access : 28 Total : 1414503. Since 10 Sep. 2019

ラズパイで作る自宅WEBサーバ:nginx編
第2回 DNS設定
2026.09.24

通常、WEBサーバーへのアクセスは、インターネット上のDNSサーバが参照されますが、開発時にはサーバ内部にDNSサーバを立ててテストします。 これにより、レジストラに登録していない任意のドメイン名でのテストが可能になります。

ブロードバンドルータの内側、ローカル側にあるラズパイにDNS設定を行います。 DNS (Domain Name System) はドメイン名とIPアドレスの名前解決を行います。
第1回 Ubuntu Server 設定 で行った各種IPアドレスおよびドメイン名は下記の通りです。

ブロードバンドルータ:192.168.11.1
ラズパイ:192.168.11.28
ドメイン名:example.com
ホスト名:ns.example.com

●DNS参照順位の確認と設定
サーバー内部のDNSを参照し、該当しない場合は外部DNSを参照するように設定します。

$ resolvectl status | grep 'DNS Server' -A2
Current DNS Server: 192.168.11.1
       DNS Servers: 192.168.11.28 192.168.11.1
現在のDNSが192.168.11.1になってしまっています。 この状態ではブロードバンドルータを介して外部のDNSが最初に参照されてしまいます。

Netplanでの指定順位に従わない場合は、systemd-resolved の共通設定ファイルに直接プライマリDNSを強制記述することで解決できます。 最初にサーバー内部のDNSが参照され、該当しない場合は外部DNSを参照しに行きます。

$ sudo vi /etc/systemd/resolved.conf
[Resolve]
DNS=192.168.11.28 192.168.11.1

$ sudo systemctl restart systemd-resolved

$ resolvectl status | grep 'DNS Server' -A2
Current DNS Server: 192.168.11.28
       DNS Servers: 192.168.11.28 192.168.11.1
再起動後も設定を継承する
$ sudo systemctl enable systemd-resolved.service

リンクを確認します
$ ls -al /etc/resolv.conf
/etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf

相対パスから絶対パスへリンクを張り直しています
$ sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
$ sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
リンク先には resolv.conf と stub-resolv.conf の2つがあります。 既定は後者で、127.0.0.53 を経由して systemd-resolved が名前解決します(キャッシュや DNSSEC が効く)。 最初の resolv.conf は実際の DNS サーバーの IP が直接書かれるもので、127.0.0.53 を理解しないコンテナやツールがある環境ではこちらが無難です。

●bind のインストール
BIND(Berkeley Internet Name Domain)は、インターネット上でドメイン名とIPアドレスを変換するDNSサーバー・ソフトウェアです。

パッケージの有無を確認します
$ dpkg --get-selections | grep bind
bind9-dnsutils                                  install
bind9-host                                      install
bind9-libs:arm64                                install
パッケージのバージョンの確認します
$ apt-cache show bind9
Package: bind9
Architecture: arm64
Version: 1:9.18.39-0ubuntu0.24.04.5

bind 9 をインストールします
$ sudo apt-get install bind9

●bind の設定
サーバー内部のDNSには、ドメイン名 example.com を設定します。 このドメイン名はレジストラに登録している必要はなく、任意の名称で設定できます。

正引きを設定します

$ sudo vi /etc/bind/db.example.com
;
; BIND reverse data file for example.com zone
;
$ORIGIN example.com.
$TTL            604800
@               IN SOA  ns.example.com. root.example.com. (
        2026091501;     Serial
        604800;         Refresh
        86400;          Retry
        2419200;        Expire
        604800 );       Negative Cache TTL
;
        IN      NS      ns.example.com.
        IN      MX      10      mail.example.com.
        IN      A       192.168.11.28
        IN      TXT "v=spf1 +ip4:192.168.11.28 ~all"

ns      IN      A       192.168.11.28
@       IN      A       192.168.11.28
www     IN      A       192.168.11.28
sub1    IN      A       192.168.11.28
sub2    IN      A       192.168.11.28
mail    IN      CNAME   ns
@ IN SOA ns.example.com. root.example.com. (
 SOA(Start Of Authority) レコード
 @ IN SOA  ネームサーバの名前 管理者のメールアドレス (...
  @ は named.conf の zone "example.com" { の example.com を指す
  管理者のメールアドレス root@example.com は root.example.com と記載

IN  NS ns.example.com.
 NS(Name Server)レコード
 example.com ドメインのネームサーバは ns.example.com である

IN  A 192.168.11.28
 A (host Address)レコード
 example.com のIP アドレスは 192.168.11.28 である

IN  MX 10 mail.example.com.
 MX(Mail eXchange)レコード
 example.com宛(****@example.com)メールはmail.example.comに転送すれば届くことを表す
 プリファレンス値は小さい方が優先される(10おきに指定するのが慣例)

IN  TXT "v=spf1 +ip4:202.241.168.99 ~all"
 SPF(Sender Policy Framework)レコード
 202.241.168.99: 内部SMTPサーバが外部に出るときに使用するグローバルIPアドレス

ns  IN A 192.168.11.28
 A (host Address)レコード
 ns.example.com のIP アドレスは 192.168.11.28 である

www  IN A 192.168.11.28
 A (host Address)レコード
 www.example.com のIP アドレスは 192.168.11.28 である

mail  IN CNAME ns
 CNAME(Canonical Name)レコード
 mail.example.com の正式名称は ns.example.com である、
 つまりmail.example.com は ns.example.com の別名である

逆引きを設定します

$ sudo vi /etc/bind/db.192.168.11.28
$ORIGIN 28.11.168.192.in-addr.arpa.
$TTL    604800
@       IN SOA  ns.example.com. root.ns.example.com. (
        2026091501;     Serial
        604800;         Refresh
        86400;          Retry
        2419200;        Expire
        604800 );       Negative Cache TTL
;
         IN NS   ns.example.com.
@        IN PTR  ns.example.com.
@ IN SOA ns.example.com. root.example.com. (
 SOA(Start Of Authority) レコード
 @ IN SOA  ネームサーバの名前 管理者のメールアドレス (...
  @ は named.conf の zone "example.com" { の example.com を指す
  管理者のメールアドレス postmaster@example.com は postmaster.example.com と記載

2026091501;  Serial
 内容を更新した際には、現在の値より大きな値に変更します。
 日付と枝番で管理するとよいでしょう。

IN NS ns.example.com.
 NS(Name Server)レコード
 example.com ドメインのネームサーバは ns.example.com である

28 IN PTR ns.example.com.
 PTR (PoinTeR)レコード
 28: IPアドレスの4オクテッド目
 ns.example.com.:ホスト名
 192.168.11.28のホスト名は ns.example.com であることを示す

ゾーンファイルを named.conf に追記します
$ sudo vi /etc/bind/named.conf
include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";

zone "example.com" {
        type master;
        file "/etc/bind/db.example.com";
        allow-query { any; };
        allow-update { none; };
};
zone "28.11.168.192.in-addr.arpa" {
        type master;
        file "/etc/bind/db.192.168.11.28";
};

$ sudo vi /etc/bind/named.conf.options
options {
  directory "/var/cache/bind";

  forwarders {
    192.168.11.1; ← ブロードバンドルータのアドレス
  };

  dnssec-validation auto;

  listen-on-v6 { none; }; ← IPV6を利用する場合は、any
};
bind の再起動と有効化を行います。

$ sudo systemctl restart named
$ sudo systemctl enable named

ホスト名からIPアドレスを調べてみます
digコマンドは、DNSに問い合わせて、WebサイトのIPアドレスを調べるためのコマンドです。

Raspberry Pi OSの場合は、まず dnsutils をインストールします。
$ sudo apt install dnsutils

$ dig example.com
; <<>> DiG 9.18.39-0ubuntu0.24.04.5-Ubuntu <<>> example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44906
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;example.com.                  IN      A

;; ANSWER SECTION:
example.com.           7177    IN      A       192.168.11.28

;; Query time: 1 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Thu Jul 02 20:32:22 JST 2026
;; MSG SIZE  rcvd: 57

IPアドレスをもとにネームサーバ名を逆引きしてみます
$ dig -x 192.168.11.28
; <<>> DiG 9.18.39-0ubuntu0.24.04.5-Ubuntu <<>> -x 192.168.11.28
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60996
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;28.11.168.192.in-addr.arpa.    IN      PTR

;; ANSWER SECTION:
28.11.168.192.in-addr.arpa. 6942 IN     PTR     ns.example.com.

;; Query time: 0 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Mon Aug 03 17:46:45 JST 2026
;; MSG SIZE  rcvd: 84
サーバ内コンソールから、ping を飛ばしてみます
$ ping example.com
PING example.com (192.168.11.28) 56(84) bytes of data.
64 bytes from ns.example.com (192.168.11.28): icmp_seq=1 ttl=64 time=0.096 ms
64 bytes from ns.example.com (192.168.11.28): icmp_seq=2 ttl=64 time=0.436 ms
64 bytes from ns.example.com (192.168.11.28): icmp_seq=3 ttl=64 time=0.198 ms
64 bytes from ns.example.com (192.168.11.28): icmp_seq=4 ttl=64 time=0.132 ms

LAN内のWindowsパソコンからもブロードバンドルーターの外側にでることなくアクセスできるように設定します。

Windowsパソコンから検証する際は、IPv4プロパティの優先DNSをBIND設定したサーバに振り向けます。

Windowsのコマンドプロンプトから ping を飛ばして確認してみます。
> ping example.com


下記のサイトでDNSの設定をチェックできます。
https://dnscheck.jp

2026.08.27 番外編 DNSトランスファー
2026.09.06 第0回 nginx を始めよう
2026.09.14 第1回 Ubuntu Server 設定
2026.09.24 第2回 DNS設定
2026.10.08 第3回 Nginxインストール
2026.10.21 第4回 PHPインストール
2026.10.29 第5回 MariaDB設定
2026.10.30 第6回 ファイアウォール設定
2026.10.31 第7回 認証サーバ設定
2026.11.01 第8回 メールサーバ設定
2026.11.02 第9回 Node.js設定
2026.11.03 第10回 アプリ作成
2026.11.04 第11回 crontab設定
2026.11.05 第12回 運用・保守

KEYESTUDIO Micro:bit V2ロボットスターターキット (マイクロビットなし) MakecodeとPython用
動き、光と音の使い方、障害物の検知と回避方法、線をたどり、IRリモコンとアプリでコントロールする方法を学びます。

Maqueen Lite V5 micro:bit ロボットキット STEM用(ライントレース&障害物回避)
Maqueen Lite V5 STEMロボットは、事前調整済みのライントレースアルゴリズム、耐衝撃モーター、開封即使用可能な設計で、ストレスを解消します。

たいていのことは100日あれば、うまくいく。長田英知著
「時間がなくて、なかなか自分のやりたいことができない」 「一念発起して何かを始めても、いつも三日坊主で終わってしまう」 「色んなことを先延ばしにしたまま、時間だけが過ぎていく」 そこで本書では、そんな著者が独自に開発した、 まったく新しい目標達成メソッド「100日デザイン」について、 その知識と技術を、余すところなくご紹介します。

まんがで納得ナポレオン・ヒル 思考は現実化する
OLとして雑務をこなす日々に飽き足らず、科学者だった父が残した薬品を商品化すべく、起業を決意した内山麻由(27)。彼女はセミナーで知り合った謎の女性からサポートを得ながら、彼女と二人三脚でナポレオン・ヒルの成功哲学を実践し、さまざまな問題を乗り越えていく。 ヒル博士の<ゴールデンルール>に従い、仕事に、恋に全力疾走する彼女の、成功への物語。

今日は人生最悪で最高の日 1秒で世界を変えるたったひとつの方法 ひすいこたろう著
偉人の伝記を読むと、最悪な日は、不幸な日ではなく、新しい自分が始まる日であることがわかります。最悪な出来事は、自分の人生が、想像を超えて面白くなる兆しなのです。偉人伝を読むことで、このときの不幸があったおかげで、未来にこういう幸せがくるのかと、人生を俯瞰する視線が立ち上がるのです。

ご飯は私を裏切らない heisoku著
辛い現実から目を背けて食べるご飯は、いつも美味しく幸せを届けてくれる。 29歳、中卒、恋人いない歴イコール年齢。バイト以外の職歴もなく、短期バイトを転々とする日々。ぐるぐると思索に耽るけど、ご飯を食べると幸せになれる。奇才の新鋭・heisokuが贈るリアル労働グルメ物語!

【最新版Gemini 3に対応!】できるGemini (できるシリーズ)
Geminiを「最強の知的生産パートナー」として使いこなすための、実践的なノウハウを凝縮した一冊です。 基本的な操作方法から、具体的なビジネスシーンでの活用、日々の業務を自動化するGoogle Workspaceとの連携、さらには自分だけのオリジナルAIを作成する方法まで余すところなく解説します。

Rustプログラミング完全ガイド 他言語との比較で違いが分かる!
Rustの各手法や考え方を幅広く解説! 500以上のサンプルを掲載。実行結果も確認。 全24章の包括的なチュートリアル。

ポチらせる文章術
販売サイト・ネット広告・メルマガ・ブログ・ホームページ・SNS… 全WEB媒体で効果バツグン! カリスマコピーライターが教える「見てもらう」「買ってもらう」「共感してもらう」すべてに効くネット文章術

小型で便利な Type-C アダプター USB C オス - USB3.1 オスアダプター
Type-C端子のマイコンボードをこのアダプタを介して直接Raspberry Piに挿すことができます。ケーブルなしで便利なツールです。

Divoom Ditoo Pro ワイヤレススピーカー
15W高音質重低音/青軸キーボード/Bluetooth5.3/ピクセルアート 専用アプリ/USB接続/microSDカード

電源供給USBケーブル スリム 【5本セット】
USB電源ケーブル 5V DC電源供給ケーブル スリム 【5本セット】 電源供給 バッテリー 修理 自作 DIY 電子工作 (100cm)

Copyright © 2011-2027 Sarako Tsukiyono All rights reserved®.