ADSLルータとDynamicDNSによる自宅サーバー

ADSLルータとDynamicDNSでの自宅サーバー

このサーバーの動的IPアドレス情報




-------- 目次 --------

1 はじめに
2 開局前の準備サーバーマシンの構成OS選択LAN構成プロバイダ契約
3 外部公開用サーバールータ設定WWWサーバーメールサーバー、ftpサーバー)
4 内部サーバーファイルサーバーDNSサーバーDHCPサーバー
5 ダイナミックDNS設定ダイナミックDNSとはDNSサイトへの登録サーバーIPアドレスを逐次自動登録クライアントソフトの設定方法
6 関連ページ(英和和英機械翻訳、私のオリジナル運用システム、掲示板)


1 はじめに

目次

1 はじめに

2 開局前の準備
3 外部公開用サーバー
4 内部サーバー
5 ダイナミックDNS設定
6 関連ページ
 このページのアドレスに書かれたドメインを見て下さい。vil-net.dip.jpかvil-net.dyndns.orgとなっていれば、ただ今 あなたはフレッツADSLのPPPoEで接続した私の自宅のサーバーから提供しているウエブページをご覧 になっています。そんなことができるのかと疑問に思われるかもしれませんが、それができるのです。 自宅でサーバーを持てる方法を私自身の備忘録として記載しておきます。 フレッツADSLルータを使いFreeBSDによる自宅WWWサーバーを構築しました。当初、プロバイダーから固定IPアドレスを割り当ててもらうつもりで、平本さんの「FLET'S ADSL / Broadband で固定IPアドレス」のページ等からプロバイダーを探していたのですが、一つの固定IPにつき2千円/月ほど接続料が必要なことと、プロバイダーも新たに切り換えなければならないことが障害になっていました。
 ところがDynamic DNSという技術で開設される自宅サーバーが多くなってきたのを見て、プロバイダーの変更もなく、しかも新しい技術の取得も兼ねられ、IP料金もかからないということで、このDynamic DNSというものを採用しWWWサーバーによりこのページを開設することにしました。

[TOP]

2 開局前の準備


サーバーマシンの構成
OS選択
LAN構成
プロバイダ契約

マシン内部

 サーバーマシンの構成

 サーバーにするマシンはCPUにCelleronプロセッサ800MHZを使用し、20GBITEのハードディスクを 持たせたAT互換の(サーバー用に自作した)ものを使用しました。(制作所用時間半日)

マザーボード AX3S PROA-Open
CPU Celleron 800MHzIntel
HDD ST320410ASeagate
CDROM Drive CRMC-FX322MMITSUI
メモリ 128MB PC100バルク
LANアダプタ CG-EPCITLcorega

OS選定  

10年前に、UNIXを体験して以来、UNIXワークステーションでサーバーを立ち上げたかったのです が、諸般の実状により、UNIXに最も近いと思われ(私の好み)、歴史と実績のあるFreeBSDを用いま した。私も古い人間です。どうもMicroSoftの独占でブラックボックスのOSには抵抗があります。


サーバーマシンの構成
OS選択
LAN構成
プロバイダ契約

 LAN構成

 LAN構成は下の様になっています。

    ADSL(ISP)
       | WAN
       |動的IPアドレス
+------+------+          +-------------+
|   router    |          |  WWW Client |
|  BAR SW-4P  |          |    (Win)    |
+------+------+          +------+------+
       |192.168.1.1             |192.168.1.4
       |            LAN(HUB)    |
-------+------------------------+-------- - -
       |                        |
       |192.168.1.6             |192.168.1.5
+------+------+          +------+------+
|   Server    |          |  Developer  |      
| (FreeBSD)   |          |  (FreeBSD)  |
+-------------+          +-------------+

  プロバイダ契約

 ダイヤルアップ時代からasahi-netを使用しています。フレッツADSLの開通とともにこれまでより 低料金になることは分かっていましたが、何も考えずADSLコースに変更しました。ここは重要では ありません。どこのプロバイダーでもかまいません。ただし、ADSL,ISDN,ケープルテレビ等に接続 をします。

[TOP]
3 外部公開用サーバー


ルータ設定

WWWサーバー
メールサーバー
ftpサーバー

 ルーター設定

 ルーターを使用すればNTTから支給される接続ソフトをPCにインストールする必要はありません。  私の契約しているISPはPPPoE設定が可能なのでcorega BAR SW-4Pのその設定画面に移りそれぞれの 項目を入力します。

    ユーザー名     xxxx@xxxx
    パスワード     *******
    パスワードの確認  *******
    サービス名
    DNSサーバー     ---------
    DNSサーバー1    xx xx xx xx
    DNSサーバー2    xx xx xx xx

 ここで注意しなければならないのはサービス名でここを空白にしないと繋がりません。私はここで 3日を費やしました。設定がうまくいっても登録に15分ぐらいかかるみたいで、気長にトライしまし ょう。 [TOP]

 WWWサーバー

 WWWサーバーには実績のあるapacheを採用します。インストールの方法はFreeBSDの分野で調べて 下さい。apacheのバージョンは当初1.3.20を使っていましたがSSIの設定で疑問があり、1.2xにしま した。文字や画像の表示はデフォルトでも動きますが、私はSSI(Server Side Include)や CGI(Common Gateway Interface)を行いたいのでその設定法を簡単に記しておきます。 apacheの設定ファイルはhttpd.conf, access.conf, srm.confです。FreeBSDのデフォルトの場合、 /usr/local/etc/apacheディレクトリに置かれていますので、これらを設定することにより、apache の環境設定が可能です。(今後はhttpd.confのみの設定になりつつあります。)設定はサーバーの ルートディレクトリへ行うものとします。
 まずSSIの設定方法について述べます。
  [access.conf]
  ルートディレクトリの設定欄に
  Options Inclide
  AllowOverride All
  を追加します。
  [srm.conf]
  # To use Server-parsed HTML files の後欄に
  AddType text/x-server-prsed-html .html
  AddType application/x-httpd-cgi .cgi
  の2行を追加します。またssiを使用するファイルがあるディレクトリの.htaccessファイルにも 上の2行のみ(Optionsなどの項を書き込みはしない)を記入しておきます。
 次にCGIの設定は
  [access.conf]
  サーバーのルートディレクトリの設定欄に
  Options ExecCGI
  (AllowOverride) これはSSIの設定と重複
  を記入しておきます。
  access.confでExecCGIを設定しない場合はcgiファイルがあるディレクトリの.htaccessファイルに
  Options ExecCGI
  と書き込んでおくだけです。
 最後に、各confファイル設定後の、apacheの再起動はver1.2xの場合は、システムリブートで行って 下さい。ver1.3xの場合は

  % /usr/local/sbin/apachectl restart

 で行います。これでapacheの設定が完了します。
[TOP]



ルータ設定

WWWサーバー
メールサーバー
ftpサーバー

  メールサーバー

 メールサーバーソフトは、SMTPがsendmail、POPがqpopperとなります。
 sendmailコマンドは4.2BSDから登場しました。設定ファイルは/etc/mail/sendmail.cfです。以前は sendmail.cfは/etcにありましたが移動したようです。まずは動いているか
  % mail メールアドレス
で動作を確認しましたが、異常はないようです。
pop3サーバーのインストールを考えたが、ホストが現在バーチャルサーバーとなって固定IPになって いないためDNS設定が行われていません。したがってpop3の設定は、今後の課題として保留しました。
[TOP]

ftpサーバー

[TOP]
4 内部サーバー


ファイルサーバー
DNSサーバー
DHCPサーバー

ファイルサーバー

 ファイルサーバーは、ネットワーク上の複数の利用者に対してファイル共用の機能を提供するもの です。FreeBSDではウンドウズクライアントとのファイル共用を実現するソフトはsambaというもの があります。sambaはFreeBSD上で設定した共有ディレクトリをウインドウズやマッキントッシュの AppleShareクライアントからアクセスできるようにします。
 sambaの設定は/usr/local/etcにあるsmb.confファイルを編集して行います。ここでは大きく分けて [global]、[homes]とそれ以外のエントリからなっています。
[lobal]は全体に関係する設定です。[homes]はFreeBSDにアカウントを持つユーザーのホームディレ クトリをファイル共有を持たせる場合に参照されます。
sambaを自動で立ち上がらせるには次のコマンドを実行します。
  # cd /usr/local/etc/rc.d
  # cp samba.sh.sample samba.sh
設定が終わったら、sambaを起動させるために、システムをリブートして完了です。
[TOP]

DNSサーバー

 インターネット上ではIPアドレスとホスト名の変換に、DNS(Domain Name System)が使われています。
 この要求に答えるサーバーをDNSサーバーと呼んでいます。まずはコンソールから

  % named -v(return)

 とキーをたたいてみて下さい。返された表示は次のようになるはずです。

  named 8.2.3-.............

 これがDNSサーバーであるBINDのバージョンです。BINDはFreeBSDをインストールした段階で標準で装備されていますから、ソフトウエアをインストールする必要はありません。

環境設定
 設定ファイルは/etc/namedbディレクトリの中にサンプルファイルがあります。この中にあるmake-localhostというシェルスクリプトを実行する(# sh make-localhost)ことでlocalhost.revという環境ファイルが作成されます。次に正引きファイルと、逆引きファイル、そして自分で名前解決できない時にアクセスする別のネームサーバを設定しておくキャッシュファイルを作成します。
 正引きファイルと、逆引きファイルの内容はネームサーバーの文献等を参照して下さい。記入にエラーがあると起動しませんので、注意して下さい。最後にmamed.confをサンプルを参照して作成します。

zone "sample.com" {
  type master;
  file "named.hosts";
};
zone "168.192.IN-ADDR.ARPA" {
  type master;
  file "named.rev;
};
 これらを追加して下さい。これらのファイルを変更したときはこれらの中にあるSerial番号を変更して下さい。namedの起動は

  # named.reload(return)

で行います。

動作確認
動作の確認にはクライアント側から行いますので、サーバーにアクセスできるよう/etc/resolv.confの設定をします。サーバーと同じマシンでもクライアント設定が必要です。

domain sample.com <-- 取得したドメイン
nameserver 192.168.1.6 <-- ネームサーバーのIPアドレス

/var/log/messagesを見て、エラーが起きていないことを確認します。いよいよDNSの動作確認にはnslookupコマンドを使います。

% nslookup(return) <-- 対話方式
Default Server: ns.sample.com <-- ns:machine sample.com:domain
Address: 192.168.1.6 <-- サーバーIPアドレス

> myname(return)
Default Server: ns.sample.com
Address: 192.168.1.6

Name: myname.sample.com
Address: 192.168.1.5

> 192.168.1.1(return)
Default Server: ns.sample.com
  Address: 192.168.1.6

Name: router.sample.com
Address: 192.168.1.1

> exit(return)

% nslookup myname(return) <-- 非対話
Default Server: ns.sample.com
Address: 192.168.1.6

Name: myname.sample.com
Address: 192.168.1.5

%

 このような表示が返ってくれば、正常に動いていると思われます。


ファイルサーバー
DNSサーバー
DHCPサーバー

DHCPサーバー

 TCP/IPネットワーク管理の手間を減らすという点で、最も普及している手段はDHCP(Dynamic Host Configuration Protocol)でしょう。DHCPを使うと、ホストがネットワークに接続されると、自動的に空いているIPアドレスが付与され、ネットマスクやデフォルトゲートウェイなども設定されます。
 DNSを見てみると、設定ファイルによる変更が主たる手段でした。恒常的に接続されるホストが増えるのならこれで十分なのですが、近頃のようにノートPCを持ち歩くようになると変更が追いつきません。それにファイルの変更にも手間がかかります。これを解決する方法がDHCP(Dynamic Host Configuration Protocol)で、動的にホストの設定をするものです。クライアントはネットワークにブロードキャストアドレスで自分がどのネットワーク属し、どのようなIPを付けるべきかを尋ねます。
 DHCPサーバーは、割り付けるIPアドレス・DNSサーバ・ゲートウェイの設定・NETMASK等であります。

インストール
 私はFreeBSD4.4に付属のパッケージから行いました。

  % pkg_add isc-dhcp3-3.0.r11.tgz

 これだけです。

DynamicDNSへの拡張

 BINDとDHCPを連携させるとDynamicDNSを実現できる。

BINDの設定
 まずBINDの追加設定を行います。/etc/namedb/named.confの一部

acl sample {
  127.0.0.1; # ローカルのDHCPが書き換える場合
  192.168.1.0/24;
};

zone "sample.com" {
  type master;
  file "named.hosts";
  allow-update{ # DNSレコードの書き換えを行えるホストを指定する
   sample;
  };
};

zone "168.192.IN-ADDR.ARPA" {
  type master;
  file "named.rev;
  allow-update{
   sample;
  };
};

DHCPの設定
 DHCPの設定は/usr/local/etc/dhcpd.confで行います。その内容の一例を示します。

ddns-update-style interim; <-- DNSに向けてDynamicDNSの更新を要求する(重要)

option domain-name "sample.com"; <-- ドメイン名
option domain-name-servers dns.sample.com; <-- ネームサーバー名

subnet 192.168.1.0 netmask 255.255.255.0 {
  option routers 192.168.1.1; <-- GATEWAYの設定
  range 192.168.1.64 192.168.1.126; <-- 割り当てる領域
  option broadcast-address 192.168.1.255; <-- ブロードキャストアドレス
}

/var/db/dhcpd.leasesを作っておきます。

DHCPの起動
 /usr/local/etc/rc.dのディレクトリにisc-dhcp.shにより自動立ち上げを行います。
dhcpdにわたすアーギュメントは次の2つです。
-cf /usr/local/etc/dhcpd.conf
ed0
すぐに起動したいときは

  # /usr/local/sbin/dhcpd ed0(return)

で起動します。(ed0はマシンのether-net interface)

動作確認
DynamicDNSを確認するには、nsupdateというプログラムを使って行う。

レコードを追加する。

% nsupdate
> update add hogehoge.sample.com. 3600 A 192.168.1.4
> (return)
> (Ctrl-D)
%

登録されているか確認する。

% host hogehoge
hogehoge.sample.com. has address 192.168.1.4

続いて、レコードを削除する。

% nsupdate
> update delete hogehoge.sample.com.
> (return)
> (ctrl-D)
%

削除されているか確認する。

% host hogehoge
Host not found.

となれば削除は成功である。

[TOP]
5 ダイナミックDNS設定


ダイナミックDNSとは

DNSサイトへの登録
サーバーIPアドレスを逐次自動登録
クライアントソフトの設定方法

 ダイナミックDNSとは

 Dynamic DNSはRFC2136で「Dynamic Updates in the Domain Name System(DNS UPDATE)」として 規定されています。DNSの設定の多くが、ゾーンファイルを変更してからnamedをリロードしていた のに対し、DDNSの設定を有効にした場合は、クライアントからの要求により、動的・リアルタイム にゾーンファイル内のRR(Resource Record)の更新(登録・削除・更新)が行われるようになります。
 近頃では、DNSの保持管理を行う専門の業者が現れ、そこにDHCPのIPアドレスの情報を持って もらうことがことができるようになってきました。
 サービス的にはIPアドレスとホスト名を登録するもの、スレーブDNSを持ってくれるものなどが ありますが、nsupdateコマンドで動的に業者のDNSサーバのゾーンファイルを更新するものでは ないようです。多くの業者の場合、はじめに業者にユーザ登録し、そのアカウントによりWebサーバ にアクセスして、サブドメインを借りて、そこに自分のDHCPで取得したIPアドレスを登録する、 などという手法が取られているようです。これらはRFC2136とは違った意味でDynamicDNSと呼ばれて います。
 また、これとはちょっと違い、DHIS(Dynamic Host Information System)というサービスも Sun Microsystemsにより提唱されています(http://www.dhis.org/)。現在DHISを利用したサービス は急速に拡大しつつあります。手法としては、業者に用意されたDHISサーバとDNSサーバに対し クライアント側から専用のプログラムを実行することにより、動的にDNSを更新させるものです。 独自ドメイン(マイドメイン)が利用できる場合があるので、夢はぐっと広がります。
                            (FreeBSD Expert技術評論社より抜粋)
[TOP]

 DynamicDNSサイトへの登録

 私は家サーバープロジェクトとDynDNSに登録させてもらっています。特に理由はありませんが、 無料という点がメリットでしょうか。他の無料のサイト一覧を見たい方は http://www.hi-ho.ne.jp/yoshihiro_e/dice/#LIST をご覧ください。 サイトへアクセスし、ドメインを取得します。使い方は簡単なので省きます。ドメインが有効に なるのに10分ぐらいでした。



ダイナミックDNSとは

DNSサイトへの登録
サーバーIPアドレスを逐次自動登録
クライアントソフトの設定方法

 サーバーIPアドレスを逐次自動登録

 インターネット上にサーバーを常時登録するためには、プロバイダーから随時与えられる動的IP アドレスをDynamicDNSに更新しなければなりません。それには次の2つの方法があります。
   1)DynamicDNSを提供しているサイトにアクセスし、手作業で更新する。
   2)動的IPアドレスに変化があった時、クライアントソフトで自動更新する。
 動的IPアドレスでも定期的にデータを外部に出し、ルータWAN側のIPアドレスを変化させないように することは可能かもしれません。しかし、無駄なデータをインターネット資源に出すことは、社会的 、倫理的に好ましくありません。それに、突然の停電があるかもしれません。私はそのような理由に よりサーバーの自動化の趣旨からperlスクリプトでDynamicDNSに更新するようにしています。その ルーチンは次のようなものとなっています。番号順
   1)cronが定期時間を検知
   2)ルータからWAN側のIP取得
   3)繋がっていなければ回線に接続
   4)ルータのWAN側IPが以前のものと変化しているか確認
   5)DynamicDNSを自動更新するためのソフトの起動
 以上
 私はルータにcoregaBAR SW-4Pを使用しているためこのルータに対してtelnetで設定することが できません。したがってIPアドレスの取得はHTTPで行うようにしました。この時、IPアドレスが 0.0.0.0となっているとWAN側が切断しているので、pingコマンドで外部に接続します。 IPアドレスが得られたら、前のIPアドレスと比較し、変化があればClientソフトを起動します。 clientソフトはgdipc.pl(ftp://ftp.cheapnet.net/pub/gnudip/gdipc.pl)やDDUPを使用しています。 (前者の使い方はhttp://ai-line.com/linux/ddns.htmlに、後者のリストはブラックボックスです が使い方はhttp://larc-en-ciel.ath.cx/dns/ddup.htmlにあります)
[TOP]



ダイナミックDNSとは

DNSサイトへの登録
サーバーIPアドレスを逐次自動登録
クライアントソフトの設定方法

 クライアントソフトの設定方法

 私は家サーバープロジェクトとDynDNS.orgの2カ所に登録しています。それぞれに対して設定方法が 異なりますのでそれを記載しておきます。

 初期設定について

 1 家サーバープロジェクト(サイト)に対しては、gdipc.plという公開されたソフトを使います。  初期設定は手作業で行わねばなりません。

  % ./bin/gdipc.pl -c -f /usr/local/DDNS/.GnuDIP2

  それぞれの項目を聞いてきますのでDynamicDNSに登録したデータを入力します。
   New Username: 登録したユーザ名(サーバー名)
   New Password: 登録したパスワード
   New Password Again: パスワード再入力
   Domain: 選択したドメイン名(dip.jp)
   New GnuDIP Server: 登録したダイナミックDNSサーバー(ieserver.net)
  以上でデータが/usr/local/DDNSディレクトリの.GnuDIP2ファイルに保存されます。

 2 DynDNS.org(サイト)に対しては、専用ソフトDDUPを使い、やはり手作業で次のコマンドを実行 します。

  % ./ddup --makeconf

   Please enter your user name: 登録したユーザー名
   Please enter ypur Password: 登録したパスワード
   OK..now you need to enter the users who can use ddup:
   Separate the users with a , ie.,root,test,this,that
   とりあえずrootかloginユーザ名を入れる。
 以上で各項目はddup.confというファイルにuudpと同じディレクトリに保存されます。

 定期設定について

 上記プログラムの5)にあたる場所に下の記述をそれぞれを挿入します。

 1 家サーバーブロジェクトの場合

  system("/usr/local/DDNS/bin/gdipc.pl -f /usr/local/DDNS/.GnuDIP2");

  というスクリプトを入れます。

 2 DynDNS.orgの場合

  system("/usr/home/***/bin/ddup --host xxx.dyndns.org");

というスクリプトを挿入します。

 あとは15分間隔でcronでプログラムを駆動させます。当サーバーで駆動しているIPアドレス逐次登録 ソフトについては、私宛までメールでお問い合わせ下さい。
[TOP]

[TOP]

6 関連ページ

[TOP]