前提

自宅でWebサーバーを公開をする際のもっとも大きなハードルは、ネットワークの設定だと思っています。自分のページのURLを自分のIPアドレスに変換し、自宅のサーバーの場所を教えて、かつ、通常は複数存在する自宅のLAN内のパソコンのどれがWebサーバーなのかをどうやって教えるのか?ということです。この問題を難しくさせているのが、ネットワーク環境の組み合わせが多数存在することだと思います。どういったものを組み合わせるかというと
  • ドメインをどうするか?
    • 無料のサブドメイン
    • 独自ドメイン取得
  • ドメイン(URL)から自分のIPアドレスに変換するには?
    • ダイナミックDNS(通常のIPアドレスはプロバイダによって定期的に変更されるので、こちらを利用)
    • 固定IPを取得し、ドメインとIPアドレスに変換してくれるDNSを登録
  • 自宅サーバー内の公開Webサーバーをどうやって特定させるか?
    • (ルーターでアドレス変換する訳ですが、ルーター独自の設定方法があって、ノウハウが蓄積しにくい。)
これらの組み合わせな訳です。そのため、通常のサーバー設定のように、コマンドコピーでは済まされないということになります。
ここでは、私の自宅サーバー設置に当たっての設定を備忘します。私の組み合わせは下記のとおり
独自ドメイン
Bfitから取得
固定IPを取得して、自前DNSサーバー
自分の場所(IPアドレス)を自分で教える方法になります。
ルーター

ルーター設定

順番では、まずルーターの設定になります。さらにその前の段階として、同LAN内から、IPアドレスでは、Webページが表示されているとします。つまり、192.168.99.10 などのIPアドレスにより、Webページが表示されているという訳です。
その次の段階として、インターネットからの接続でウェブページが表示されることを目指します。もちろん、ドメインを取得していないので、IPアドレスによる接続です。まだ、固定IPを取得していないとすると、IPアドレスは、変更しますが、短い間なら同じIPアドレスなので、大丈夫です。IPアドレスによる接続には、自分のIPアドレスを知る必要があります。色々やり方がありますが、以下のページで自分のIPアドレスが分かります。 http://www.cman.jp/network/support/go_access.cgi
自分のIPアドレスでアクセスしてみると、おそらくルーターの設定ページにアクセスします。つまり、 192.168.99.1 にアクセスしているのと同じ状態になります。(こんなことがあるので、ルーターのパスワード設定は必ずした方が安全です。)
ここからが、ルーターの設定になります。インターネットのIPアドレスを入れて、自宅のルーターまで到着している訳ですから、ルーターからWebサーバーへ繋げることができたらWebサーバーが公開できる訳です。これをアドレス変換とかポート変換と呼びます
私が現在利用しているのポート変換の方法は、ここに掲載されています。変換が必要なポートは 80(WEB)と53(DNS 後述)です。また、ssh で外から操作したいときには 21 も開けます。ただし!この設定を行ったのち、同じLAN内から、インターネットIPアドレスにアクセスしても、やはりルーターの設定画面(つまりルーター)につながってしまいます。もし、同じLAN内でない、接続方法があるなら(例えば、携帯電話等)そこからつなげてみてください。つながるはずです。これは、ルーターとして致し方の無い設定だそうです。(この部分の対処方法は後述します)

固定IPとドメイン取得

これでインターネットのWebサーバー公開はできました。問題は固定していないIPアドレスをどうやってわかりやすいURLに変えるかです。上述したとおり、私はまず、固定IPの申し込みをしました。so-net で月額1260円くらいです。その他の方法としては、固定していないIPアドレスをお知らせしてURLを変換してもらう方法があります。これは、ダイナミックDNSサービスというサービスで、無料のところがたくさんあります。ただし、独自ドメインではありません。サブドメインで、felix-labo.webhop.info といった感じの少し長いURLになります。(このあたりに情報あり)また、この場合には、自身のサーバーに、自分のIPアドレスが変わったら、ダイナミックDNSへ変わったことを教えるDiCEなどのサーバーを稼動させておく必要があります。私はこの辺は、経験がありません。
固定IPの場合は、まず、申し込んで固定IPを取得して、今度はドメインを取得します。固定IP+サブドメインのSTATIC DNSサービスを使うという手もあるのでしょうが、あまり一般的でないかもしれません。やはり、独自ドメインを取得したい。なら固定IPだ というのが一般的なのかもしれません。

ドメイン取得

普通は、無料のサブドメインをとって、ダイナミックDNSによるWeb公開をするのでしょうが、私の場合は、いきなり独自ドメインを取得しました。ダイナミックDNSの設定に自信がなかったということもあります。けっこう勇気が必要ですが、取ったからにはなんとしても繋げるという意欲も沸いてそれは、それでよかったと思っています。

Bfitから取得

メニュー ドメイン から取得します。料金表

Bfitでネームサーバー設定

Bfitの取得が完了したら、取得したドメインの設定ページで、ネームサーバーを設定できます。すこしこんがらがるところですが、実際のURLからIPアドレスに変換されるまでは概ね以下の様になります。
  1. felix-labo.org の場所を .jp に聞きにいく
  2. Bfitで設定したネームサーバーに場所を聞いてくれと言われる
  3. ネームサーバーが、felix-labo.org のIPアドレスはここだよと教えてくれる。
  4. そのIPアドレスへつながる
で、そのネームサーバーが、自分のサーバー自身にあるので、サーバーには二回アクセスしてくることになります。一度目が、felix-labo.orgはどこ?ということを聞いてきて、それに対して、自分のIPアドレスを教えて、そこへアクセスしてくるのでページが表示できるという訳です。一度目は、DNSサーバーの役割で、ポート53番で、二回めはWebサーバーなのでポートは80となります。

DNSサーバーの登録

Bfitでログインすると、トップページに『ドメイン一覧』があります。
Screenshot-12.png
この『詳細を表示する』を押すと、『ドメイン詳細』の画面になります。肝心なのは、『ネームサーバー設定』の部分です。
Screenshot-13.png
この右下の『DNS設定変更』を押すと、『DNS設定変更』画面になります。
Screenshot-14.png
自宅サーバーの場合のネームサーバーは、3番目の『取得したドメインでネームサーバーを使用する』となるので、これを選択してから、下の『取得したドメインでネームサーバーを登録する場合はこちら>>』を押します。以下のウィンドウが立ち上がります。
Screenshot-15.png
ここに入力するのは、自身のサーバーに設置してあるDNSサーバー名と、自身のインターネットIPアドレスです。これこそがまさに、自分の位置を教えるDNSサーバーの位置を教えている設定です。(一回目のアクセスのための設定です。)

DNSサーバーの設定

Bfitから、自宅サーバーの db.felix-labo.org というネームサーバーへの道は通ったのに、自宅サーバーのDNSサーバーがたっていなければ話になりません。とは言うものの、通常 Ubuntu サーバーをインストールした場合には、DNSサーバーも一緒にインストールしていることが多いかもしれません。以下は既にDNSサーバー bind がインストールされているという前提の設定です。
DNSサーバーの設定は、理解しにくいです。解説には自信がありません。参考となるのは、いつもながらの です。(もうバイブルやね) その他、参考にさせて頂いたサイト
やりたいこと
  • とにもかくにも、ネームサーバーを稼動させて、自分のWebサーバーの位置を自分でしらせる。
  • 自分のLAN内からも、URL でページがみれるようにする
です。以下、/etc/bind/ の中の設定ファイルを修正、追加していきます。
(DNSサーバー機から)
$ cd /etc/bind
$ sudo vi ./named.conf
/named.conf の中身。大本の設定ファイル
include "/etc/bind/named.conf.options";

view "internal"{
       # この view は次のネットワークからの要求に対してのみ使用される
       match-clients {
               192.168.99.1;
               192.168.99.2;
               192.168.99.3;
               192.168.99.4;
               192.168.99.5;
               192.168.99.6;
               127.0.0.1;
       };
       recursion yes;

       // prime the server with knowledge of the root servers
       zone "." {
               type hint;
               file "/etc/bind/db.root";
       };

       // be authoritative for the localhost forward and reverse zones, and for
       // broadcast zones as per RFC 1912

       zone "localhost" {
               type master;
               file "/etc/bind/db.local";
       };

       zone "127.in-addr.arpa" {
               type master;
               file "/etc/bind/db.127";
       };

        zone "0.in-addr.arpa" {
               type master;
               file "/etc/bind/db.0";
       };

       zone "255.in-addr.arpa" {
               type master;
               file "/etc/bind/db.255";
       };

       include "/etc/bind/named.conf.internal";
};

view "external"{
       # view "internal" の match-clients にマッチしない場合は、
       # この view が使われる。
       match-clients { any; };
       recursion no;

       // prime the server with knowledge of the root servers
       zone "." {
               type hint;
               file "/etc/bind/db.root";
       };

       // be authoritative for the localhost forward and reverse zones, and for
       // broadcast zones as per RFC 1912

       zone "localhost" {
               type master;
               file "/etc/bind/db.local";
       };

       zone "127.in-addr.arpa" {
               type master;
               file "/etc/bind/db.127";
       };

       zone "0.in-addr.arpa" {
               type master;
               file "/etc/bind/db.0";
       };

       zone "255.in-addr.arpa" {
               type master;
               file "/etc/bind/db.255";
       };

       include "/etc/bind/named.conf.external";
};
./named.conf の中で、参照していた設定ファイルを作成OR修正していきます。まずは、./named.conf.options おもに、セキュリティ上の設定で、再帰的利用を無効にしています。
$ sudo vi ./named.conf.options
options {
       directory "/var/cache/bind";

       // forwarders {
       //      0.0.0.0;
       // };

       //auth-nxdomain no;    # conform to RFC1035
       //listen-on-v6 { any; };

       recursion no;
       allow-recursion {
               127.0.0.1;
               ::1;
               192.168.99.0/24;
       };
};
おつぎは、./named.conf.internal という 自分のLAN内からのアクセスに対する設定
sudo vi ./named.conf.internal
zone "felix-labo.org"{
       type master;
       file "/etc/bind/db.felix-labo.org-priv";
};

zone "mylove.webhop.info"{
       type master;
       file "/etc/bind/db.mylove.webhop.info-priv";
};

zone "99.168.192.in-addr.arpa"{
       type master;
       file "/etc/bind/db.99.168.192";
};
zone・・・の1つめ、2つめは、自分のサーバーのURLの設定です。私のばあい、以上の2つのURLを同じWebサーバー内で、アパッチのバーチャルホストの設定で分けているのですが、この2つを記載しておきます。
つづいて、./named.conf.external  という外から入ってきたネームサーバーへの問い合わせへの対応設定ファイルです。
zone "felix-labo.org"{
       type master;
       file "/etc/bind/db.felix-labo.org";
};
まず・・・、どうしてこうも設定ファイルが多いのか? つづいて、外からのアクセス向けの正引きの設定ファイル(これが、Bfitで設定したネームサーバー名ですね。内容は felix-labo.org っていったら、121.2.65.177 だよっておしえているファイルです。つまり、自分のWebページを自分で教えている部分です。そっか自己紹介か・・。
$ sudo vi ./db.felix-labo.org
;BIND data file for felix-labo.org domain
;
$TTL    86400
@       IN      SOA     gw.felix-labo.org        root.gw.felix-labo.org. (
                       20090628        ;Serial   ←ここは変更都度、番号を加える必要有。連番でも可
                       1800    ;Refresh
                       900     ;Retry
                       604800  ;Expire
                       1200 )  ;Negative Cache TTL
       IN      NS      gw
;Slave(If you need)
;       IN      NS      other.net.jp.
;Mail exchange
       IN      MX      10 mail
;Localhost
localhost IN    A       127.0.0.1
;
;Host entry
;
@       IN      A       121.2.65.177
gw      IN      A       121.2.65.177
;Alias
www     IN      CNAME   gw
mail    IN      A       121.2.65.177
もういっちょう! 似てるけど、今度は自分のLAN内からのアクセスの場合の設定ファイル ./db.felix-labo.org-priv
$ sudo vi ./db.felix-labo.org-priv
;BIND data file for felix-labo.org domain
;
$TTL    86400
@       IN      SOA     gw.felix-labo.org        root.gw.felix-labo.org. (
                       20090720        ;Serial      ←ここは変更都度、番号を加える必要有。連番でも可
                       1800    ;Refresh
                       900     ;Retry
                       604800  ;Expire
                       1200 )  ;Negative Cache TTL
       IN      NS      gw
;Slave(If you need)
;       IN      NS      other.net.jp.
;Mail exchange
       IN      MX      10 mail
;Localhost
localhost IN    A       127.0.0.1
;
;Host entry
;
@       IN      A       192.168.99.6
gw      IN      A       192.168.99.6
;Alias
www     IN      CNAME   gw
mail    IN      A       192.168.99.6
以上の2つのファイルを置くのは、自分のLAN内からfelix-labo.org ときたら、192.168.99.6 を教えて、インターネットから問い合わせがきたら、121.2.65.177 を教えるための布石になっているのです。
mylove.webhop.info についても、同様に、./db.mylove.webhop.info-priv を作成して、自LAN内からのアクセスへ対応させます。(なお、外からのネームサーバーは、DynDNSを利用しているので、ここでは不要です。
ようやく最後です。自LAN内用の逆引きの設定ファイル  ./db.99.168.192  です。なお、外部からのアクセス向けの逆引きについては、so-netの固定IPの場合には不要です。
$ sudo vi ./db.99.168.192
; BIND data file for 192.168.99 network
;
$TTL    86400
@       IN      SOA     dns.felix-labo.org       root.dns.felix-labo.org. (
                       3       ;Serial
                       1800    ;Refresh
                       900     ;ReTry
                       604800  ;Expire
                       1200 )  ;Negative Cache TTL
       IN      NS      dns
;Slave(If you need)
;       IN      NS      other.net.jp
;Host entry
;
1       IN      PTR     dns.felix-labo.org
;1      IN      A       192.168.99.6
最後に、bind を再起動
$ sudo /etc/init.d/bind9 restart
ふう・・・・

ルーターの設定が待っている

実は、上記のDNS設定の内、自分のLAN内からの ドメインのリンクは、(要するに内向きの設定)は、ルーター側の設定も直さないと、動作しません。ちょっと自信が無いのですが、ルーターのDNSの設定を変えて、自LANのマシンが、かならず、設置したDNSサーバーに問い合わせるようにします。(セカンダリは、so-net のDNSサーバー
Screenshot-16.png
  • 1週間程使いましたが、プライマリDNSが急に無効になってしまいました。再起動したら回復・・・。 -- felix 2009-08-02 (日) 21:26:09
  • プライマリDNS(要するに自前のDNS)が無効になるのは、停電のせいだった。 -- felix 2009-11-08 (日) 12:00:19