2004.12.28

DNSサーバの構築・・・(FreeBSD)

DNSサーバと言っても家庭内で1つのIPアドレスしかなく全てのサービスを1つのサーバで行うより無く、しかもどこかのプロバーダー経由の接続であるから、プロバーダーの提供しているDNSサーバを頼るだけでも事は足りる。
しかし、一応DNSサーバを立てて動作させることとしたがIPアドレスが一つでの運用であるため、専ら自宅内のローカルエリアの設定であり、外にアクセスするためのDomain Nameの解決が主目的となる。
FreeBSDも5.3になって設定ファイルの置き場のnamedbの場所が/etc/namedbより
/var/named/etc/nameddbに変わたが、/etc/namedbにリンクが貼られているので従来通り/etc/namedで作業ができる。
まず最初に./make-localhostとして設定ファイルのlocalhost.revを作る。
あれー、出来ないと思ってPROTO.localhost.revを使って自分で作ろうなどと思ってはいけない(私はやってしまった)。ちゃんとmasterというフォールダ内に出来ている。
次に正引きと逆引きの記述ファイルをつくる。
ファイルの名前は何でも良いが正引きをmyhome.zone 逆引きをmyhome.revとでもして話を進める。

さて、myhome.zoneの中身の例だが、次のように書き./slave Directoryに入れる。

--------------------------------------------
; /etc/namedb/myhome.zone
; host name --> IP address for fam.cx
;
@       IN SOA uls.fam.cx. root.fam.cx. (
1999120500      ; Serial
3600                  ; Refresh
900                    ; Retry
3600000            ; Expires
3600 )                ; TTL
;
IN NS uls.fam.cx.
IN MX 10 uls.fam.cx.
uls                    IN A 192.168.1.5
uls2                  IN A 192.168.1.6
localhost           IN A 127.0.0.1
luna                  IN A 192.168.1.2
soleil                 IN A 192.168.1.4
satoru               IN A 192.168.1.10
nakamura         IN A 192.168.1.11
uls.flets.cds.ne.jp     IN CNAME uls.fam.cx.
----------------------------------------------

サーバのhostnameはプロバイダーから貰ったものとDynamicDNSに登録したのと2つあるのでどちらでも良いようにCNAMEにもう1つの名前を書いておいた。
逆引きのmyhome.revは次のように書き、./slave Drirctoryに入れる。

----------------------------------------------
; /etc/named/myhome.rev
; IP address --> host name for fam.cx
;
@       IN SOA uls.fam.cx. root.fam.cx. (
1999120500      ; Serial
3600                  ; Refresh
900                    ; Retry
3600000            ; Expires
3600 )                ; TTL
IN NS uls.fam.cx.
2       IN PTR luna.fam.cx.
4       IN PTR soleil.fam.cx.
5       IN PTR uls.fam.cx.
6       IN PTR uls2.fam.cx.
10     IN PTR satoru.fam.cx.
11     IN PTR nakamura.fam.cx.
---------------------------------------

最後にname.confを以下のように書く。

------------------------------------------
options {
directory       "/etc/namedb";
pid-file        "/var/run/named/pid";
dump-file       "/var/dump/named_dump.db";
statistics-file "/var/stats/named.stats";
forwarders {
210.254.64.10;
};
};
zone "." {
type hint;
file "named.root";
};
zone "0.0.127.IN-ADDR.ARPA" {
type master;
file "master/localhost.rev";
};
zone "fam.cx" {
type slave;
file "slave/myhome.zone";
masters {
192.168.1.5;
};
allow-transfer {192.168.1/24;
127.0.0.1;};
allow-query {192.168.1/24;
127.0.0.1;};
};
zone "1.168.192.in-addr.arpa" {
type slave;
file "slave/myhome.rev";
masters {
192.168.1.5;
};
allow-transfer {192.168.1/24;
127.0.0.1;};
allow-query {192.168.1/24;
127.0.0.1;};
};
-------------------------------------------------

ここまで、準備が出来たら/etc/rc/confにnamed_enable=”YES”を追加してサーバを
再起動すればDNSサーバが動くはずである。
nslookup www.yahoo.co.joなどとやって、IPアドレスが表示されるか試してみよう。 
また、IPアドレスから名前が引けるかも同様に確認する。


2004.12.25

mail-entry.cgi(自動化成功)・・・(Movabletype)

手動では成功するが、cronだとメールがどうしても拾えないので別手段を講じることにした。
テキストベースのブラウザのw3mの利用です。
以下はその手順

  • abcblogのhome directory内に .forwardの名前でファイルを作り以下の内容とした。

¥abcblog
"| /usr/local/bin/w3m -dump http://hogehge/blog/mt/abc/mail-entry.cgi"

  • 同様にxyzblogのhome ditrectoryにも作成
  • そしてabcblogとxvzblogにメールを出した。

見事に成功した。
メールを受けると直ちに反映されるのもcronで10分毎に処理するよりサーバに負荷も掛からず好都合。
それに、この方法だと何人分でも簡単に作れる。


mail-entry.cgi(失敗の巻き)・・・(Movabletype)

Blogに携帯電話からのメールでも投稿できるMoblogというのが流行っているそうだ。
そこで我が家のサーバにもmail-entry.cgiというのを入れてMoblogを行うことにした。
我が家のサーバではMovabletype関連ファイルを$Documentroot/blog/mtに置いている。
以下はその手順です。
(1) Blog専用にabcblogとxyzblogのアカウントを作りメールを受けられるようにする。
(2) 2人でBlogのページを設けているので、mtディレクトリー内でmkdir abcとmkdir xyzとして2つのディレクトリーを作りこの中にそれぞれmail-entry.cgi関連のファイルを入れた。
(3) そして、それぞれのmail-entry-config.cgiをBrowserから起動して環境設定を行った。
(4) メールをabcblog宛てに出し/hogehoge/blog/mt/abc/mail-entry.cgiを呼び出す。
Blogにうまく反映できた。 画像添付もちゃんと処理されて現れる。

(5) 次にmail-entry.cgiはcurrent directoryが自分自身のディレクリーでないとうまく起動しないとネットの解説記事に書かれていたので、suしてrootになりメールをabc宛てに出した後にabcディレクトリーに移りmail-entry.cgiを起動してBlogに反映されることを確認した。

ここまではうまく行ったので、いよいよcrontabに登録して自動化する。

0,10,20,30,40,50  * * * *  cd /$Documentroot/blog/mt/abc ;
/$Documentroot/blog/mt/abc/mail-entry.cgi 1>/dev/null 2>/dev/null
5,15,25,35,45,55  * * * *  cd /$Documentroot/blog/mt/xyz ;
/$Documentroot/blog/mt/xyz/mail-entry.cgi 1>/dev/null 2>/dev/null

あれー、メールを出してcronが動いても「メールがありません。」といわれる。
何度やっても同じだ。
調べたら、どうもmail-entry.cgiがメールを拾えていないようだ。
悪戦苦闘したが、手動なら動くがcronで動かない理由が分からない。


2004.12.15

Sendmail・・・(mail)

FreeBSDはDefaultでsendmailがインストールされる。
もう今時はsendmailより新しいpostfixとかqmailなどを使うべきなのかもしれにが、体に染み付いた習慣から抜けられなくて、sendmailをそのまま使うことになっている。
以前はsendmailの設定ファイルであるsendmail.cfを作るのにxxxxx.defなどという設定ファイルの予備ファイルのようなものを作って、sendmail.cf作成用専用コンパイラーでsendmail.cfを作っていた。 が、最近はfreebsd2.mc等と名付けられたmc fileのサンプルがあるので、これをコピーして適当な名前で例えばmycomputer.mcなどと変えて、編集の後makeすればmycomuter.cfが出来上がるのでsendmail.cfに名前を変えて出来あがりとなる。
しかし、大概は最初からあるsendmai.cfで十分で、次に述べるaccessとlocal-host-namesのファイルと他のサーバからの中継を許す場合のみrelay-domainsのファイルを作る。

1.access

    cyberspammer.com         550 We don't accept mail from spammers
another.source.of.spam   REJECT
okay.cyberspammer.com    OK
myhome.mydomain.com   RELAY
10.77.14.                RELAY

  のように記述しrootになって

 su-2.05b# makemap hash /etc/mail/access < /etc/mail/access

 とすると、access.dbが出来上がる。

2. local-host-names

  本来のホスト名と別名でも受けたい場合は次のように2つ書いて置く。

  myhome.mydomai.com
  another.name.co.jp

3. relay-domains

リレーを許してあげるドメインがあれば、relay-domainsの名前のファイルを
作り許可するドメイン名を列記しておけばよい。
最後に忘れてならないのは/etc/rc.confに
sendmail_enable=”YES”
の一行を追加し、rebootすれば立ち上がる。


PerlとTool・・・(Movabletype)

1. perlについて

perlはFreeBSDをインストールすると勝手にperl-5.6.1が入ってしまうが、後にGraphic関係のライブラリーやperlのtoolkitなどを入れるとperl-5.8.3などが入って2つのperlが共存することになり、煩わしい。
以前は呼び出し位置を変えて、/usr/bin/perlと/usr/local/binで使い分けていたが、今回はperl-5.6.1をpackage deleteして全てperl-5.8.5で行くことにした。 portsで入れた。
対応するツール類もperl-5.8.5になってきているので不充は無い。

2.追加ソフト、ライブラリー

(1) ImageMagick
   これはあっさりpackageで入れておいた。
(2) GD module
   仲間内で使っている写真アルバムでのサムネイル作成ソフトが
   使っているのでportsでp5-GDを入れた。
(3) 携帯からもBlogを書き込める便利なmail-entry.cgiには必要
   なのでp5-MIME-Toolsもportsで入れる。
(4) p5-Image-Size
   packageのgraphicsから入れる。
(5) ja-p5-Jcode, ja-nkf, ja-p5-jcode.pl
   packageのjapaneseから入れる。
(6) HTML::Entities
  /usr/ports/www/p5-HTML-Parserから入れる。
(7) Crypt::DSA
  /usr/ports/security/p5-Crypt-DSAから入れる。
(8) XML::Atom
  /usr/ports/textproc/p5-XML-Atomから入れる。


« Previous | Next »