Postfix+postgreSQL+courier-imapによるバーチャル運用(その1)

qmail+vpopmailにて運用したことがある人であれば、「Unixの実アカウントを使わずにメールの運用ができれば…」と考えている方もたくさんいると思います。
そこで、PostfixとPostgreSQLとcourier-imapを使い、qmail+vpopmailのような環境を構成してみたいと思います。
(まとめになかなか時間がかかりました。。。)
“Postfix+postgreSQL+courier-imapによるバーチャル運用(その1)” の続きを読む

ロードバランサーいらずの冗長化構成を考える。

先日、サービス無停止のプロバイダ切り替え方法について書いてみましたが、あれは固定IP1での話でした。

今回は、固定IP8などの複数IPを使用している際の無停止切り替えや、冗長化構成にする方法を書いてみます。

[ルータを別にした、マルチホーミング的なネットワーク構成]

RT1とRT2では、特に複雑なことはしていません。いわゆるunnumbered接続で、複数固定IP運用を行うPPPoE接続、専用線接続などによる運用をしていると仮定します。

肝心なのは、その先をL2SWで接続し、結果1台のサーバへ接続してしまいます。

サーバ(FreeBSD6.0R)の設定例

kenti.jp > ifconfig
vge0: flags=8843<up,broadcast,running,simplex,multicast> mtu 1500
        options=1b<rxcsum,txcsum,vlan_mtu,vlan_hwtagging>
        inet6 fe80::202:----:f---:e--%vge0 prefixlen 64 scopeid 0x1
        inet 20x.112.8.66 netmask 0xfffffff8 broadcast 20x.112.8.71
        inet 6x.11.12.114 netmask 0xfffffff8 broadcast 6x.11.12.119
        ether 00:--:--:--:--:--
        media: Ethernet autoselect (1000baseTX )
        status: active
vge1: flags=8843<up,broadcast,running,simplex,multicast> mtu 1500
        options=1b<rxcsum,txcsum,vlan_mtu,vlan_hwtagging>
        inet6 fe80::202:----:f---:---%vge1 prefixlen 64 scopeid 0x1
        inet 192.168.11.1 netmask 0xffffff00 broadcast 192.168.11.255
        ether 00:--:--:--:--:--
        media: Ethernet autoselect (1000baseTX )
        status: active
lo0: flags=8049<up,loopback,running,multicast> mtu 16384
        inet6 ::1 prefixlen 128
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3
        inet 127.0.0.1 netmask 0xff000000
</up,loopback,running,multicast></rxcsum,txcsum,vlan_mtu,vlan_hwtagging></up,broadcast,running,simplex,multicast></rxcsum,txcsum,vlan_mtu,vlan_hwtagging></up,broadcast,running,simplex,multicast>

※20x.112.8.66を実IP、6x.11.12.114をaliasとして割り当てます。  デフォルトゲートウェイは、RT1の20x.112.64.65に向けますが、設定に関わらずRT2(6x.11.12.112/29)からのパケットも返事できます。

本来であれば「NICをグローバルIP毎に分けたほうがいいのではないか?」等ありますが、それだとルーティングについてそれぞれのNIC毎に設定が必要なことと、フィルタ等の設定が必要になります。ですので、グローバルIP2つを敢えて1つのNICにぶら下げます。

また、この方法は私自身が過去に経験した手法の中で、プロバイダ切り替えの際などには重宝しました。
実際には、このサーバでサービスを提供するのではなく、あくまでこのサーバをクラスタサーバに見立てて、NATなどで下位サーバ(192.168.11.2)にwebなどのサービス処理をやらせるとセキュリティ上いいのかもしれません。(もちろん、このサーバ自身でサービスを運用しても十分に回線冗長化を考慮したサービスサーバになります。)

また、これはサーバでなくともルータで代用ができる…かもしれませんが、そんな感じです。

IP電話とPBX。

つい最近、我が家に050番号のIP電話を導入してみました。

会社の人と通話して…それで今のところ終わっていますが、なかなか便利な時代になったものです。

それと、OpenSource PBXというもので、Asteriskというものがありますが、まだ遊んでません…。
(SIPも立ててみたいので、partySIPも入れてみるものの、時間がなさげ…。)

PostgreSQLのDBバックアップ&復旧方法

PostgresのDBをバックアップし、その後復旧する方法です。
(._.) φ メモメモ

バックアップ方法
(postgresqlは起動した状態にしておく)

% pgdumpall > backup.db

復旧方法
(postgresqlを起動し、initdbだけしておく)

% psql -e template1 < backup.db

復旧時の注意点は、やっぱり -e をつけないとだめなようです。

BIND8

昔の記事をblog側に持ってきて編集してみました。
書いた当初からずいぶん時間が経っているので、ちょっとおかしなところがあるかもしれません。

ドメインを取得・申請したので、ネームサーバを立ててみます。

今回はよく使われている(と思われる)bind8を、FreeBSDに入れてみましょう。
bind8のソースプログラムは、Internet Software Consortium (ISC)から持ってきます。

まずは、ダウンロードをして、展開、コンパイルまでしましょう。

> fetch ftp://ftp.isc.org/isc/bind/src/8.4.1/bind-src.tar.gz Receiving bind-src.tar.gz (1432277 bytes): 100%
> tar xzf bind-src.tar.gz
(カレントにsrcというディレクトリができます。)

> cd src
> make
Making /usr/home/kentaro/src/.systype
Making .settings
/usr/home/kentaro/src/include
…あとは気長に待ちましょう(^^;

コンパイルが無事完了したら、インストールします。この場合では、/etc/namedb以下にインストールされます。
(Linuxはどうなのでしょう…?/var/namedとか?)

>su Password:(rootになりましょう)
# make install
mkdir -p /usr/local/bind/include/arpa
set -x; for x in inet.h nameser.h nameser_compat.h; do install -c -m 444 $x /usr/local/bind/include/arpa/$x; done
+ install -c -m 444 inet.h /usr/local/bind/include/arpa/inet.h
……………

インストールが終わりましたら、設定ファイルを書きます。

[ /etc/namedb/named.conf ]options {
directory “/etc/namedb”;
};

zone “.” {
type hint;
file “named.root”;
};

zone “localhost” {
type master;
file “localhost”;
allow-query { any; };
};

zone “0.0.127.IN-ADDR.ARPA” {
type master;
file “localhost.rev”;
};

//
// kenti.jp
zone “kenti.jp” {
type master;
file “db/kenti.jp.zone”;
allow-update { none; };
};

設定で注意するのは、赤字にしたところです。/etc/namedbをホームとして、それぞれのファイルを参照する形になります。今回、kenti.jpはそこにディレクトリを作成し、kenti.jp.zoneというゾーンファイルを作成する形となりますので、さらに以下のファイルを作成しました。
(名前→IPを表す正引きファイル)

[ /etc/namedb/db/kenti.jp.zone ]$ORIGIN kenti.jp.
$TTL 3600
@ IN SOA ns.kenti.jp. postmaster.kenti.jp. (
2002120801 ;serial
10800 ;refresh
3600 ;retry
604800 ;expiry
86400 ) ;minimum
;
IN NS ns.kenti.jp.

;
IN MX 10 mx.kenti.jp.
* IN MX 10 mx.kenti.jp.
;
;
; KENTI ZONE
;
ns IN A 61.206.126.90
www IN A 61.206.126.90
mx IN A 61.206.126.90

なにやら不可思議な記述が書いてありますが、順に説明すると以下のようになります。

$ORIGIN
ゾーンセクション。この場合kenti.jp.となる。
$TTL
有効時間。秒単位で指定するので、この場合3600秒=1時間。
@
$ORIGINで指定されたもの(ここでは、kenti.jp.)を指す言葉になります。
SOA
SOAの後ろの@は、ns.kenti.jpのようにホスト名で書き換えます。次にあるpostmasterは、自分のメールアドレス(ユーザ名+ドメイン名)を指定します。何かあった場合、このアドレスに対して問い合わせがくるようになります。注意点は、メールアドレスの@を、「.」(ピリオド)に直して書くことです。
;
セミコロンの後は、コメントになります。
;serial
シリアルナンバー。内容を更新したら、かならずこの数値を変化させて、変更があったことを他DNSサーバへ知らせます。シリアルは、1,2,3…と適当な数字で増やしていってもいいのですが、上記のように日付+2桁の数字、で入れておくと管理しやすいです。
;refresh
リフレッシュ時間。このゾーンを確認する間隔を指定。この場合10800秒=180分=3時間。
;retry
上のリフレッシュ時間において、ゾーン確認に失敗した場合の再試行までの待ち時間。この場合3600秒=1時間。
;expiry
このファイルで定義されている内容の有効期限。この場合604800秒で7日(1週間)。
;minimum
ファイル自体の有効期限。この場合86400秒=24時間。
NS
NSレコード(ネームサーバ)の指定。
ここでは、一般的にこのDNSサーバの名前を指定しています。
MX
MXレコード(メールサーバ)の指定。
メールサーバの名前を指定します。なお、サーバ名の前にある「10」はメールサーバの優先度を指定しています。複数メールサーバがあれば、20,30といったように記述することも出来ます。
A
Aレコードの指定。
この場合、ns.kenti.jp.のIPアドレスはいくつか、を指定しています。これが設定できてないと、www.kenti.jpはどのIPなのか、といった参照が出来ません。
ほかに、mailにもAレコードが指定してあります。これがないと、MXで指定した名前のIPがわからなくなってしまうからです。
CNAME
今回は出てきませんが、別名という意味で使われます。
ftp IN CNAME www
とすれば、ftp.kenti.jpはwww.kenti.jpの別名だよ、と指定することが出来ます。
※トラブルの原因になるので、なるだけAレコードで書いた方が良いと思われます。特に、MXはCNAMEで書きますとトラブルの元になります。
PTR
これも今回は出てきません。IPから名前を表す、逆引きに使用するレコードです。
61.206.126.90 IN PTR ns.kenti.jp.
という具合で書きます。
kenti.jpで使用しているIPは、プロバイダから既に逆引きの名前が割り当てられており、変更することが出来ないので逆引きのゾーンは作成しませんでした。

設定ファイルが出来たので、namedを起動します。

# /usr/sbin/ndc start
new pid is 708

起動後、/var/log/messageなどを見て、エラーが出てないことを確認しましょう。(^_^)v
動いているようであれば、以下のように名前が解決できるようになります。

# nslookup www.kenti.jp Server: localhost Address: 127.0.0.1Name: www.kenti.jp
Address: 61.206.126.90

また、OS起動時(この場合は、FreeBSD)にnamedを起動させるようにするには、以下の方法があります。

[ /etc/rc.conf ] 以下の2行を追加するnamed_enable=”YES”
named_program=”/usr/sbin/named”

Linuxのような起動方法として、FreeBSDでは以下のスクリプトを書いてあげれば自動起動してくれます。
(パーミッションの設定は755としておくといいのかな…。)

[ /usr/local/etc/rc.d/named ] 新規に作成します#!/bin/sh

case “$1” in

start)
if [ -x /usr/sbin/named ]; then
echo named
/usr/sbin/ndc start
fi
;;
stop)
/usr/sbin/ndc stop
;;
*)
echo “$0 start|stop”
;;
esac

とりあえず、そんなこんなで一段落といったところでしょうか。(^^;