LANからインターネットへのアクセスはルーターが自動的にアドレスをプライベートアドレスからグローバルアドレスに変換してくれるのですが、その逆は手動で設定しないといけません。この機能をヤマハでは「静的NAT」と呼んでいます。メーカーによって呼び名はいろいろとありますが、同様の設定を行う必要がある点は共通です。
RTA54iでは、webの設定から「接続設定→プロバイダ接続管理→登録の修正→NAT」で設定できるので、これにおまかせするのが楽です。同時にフィルタリングも設定してくれるので。
設定ファイルは/etc/postfix/main.cfです。".cf"という拡張子でも、「アレ」とは全く別物なので恐がらなくても大丈夫。 デフォルト以外の値を設定した項目は以下のとおりです。 ちなみに、これは"postconf -n"で表示することができます。
allow_mail_to_commands = alias,forward,include command_directory = /usr/sbin daemon_directory = /usr/lib/postfix header_checks = regexp:/etc/postfix/header_checks mailbox_command = /usr/bin/procmail -a $DOMAIN -d $LOGNAME mydestination = $myhostname, localhost.$mydomain $mydomain mydomain = hodogaya.org myhostname = mail.hodogaya.org myorigin = $mydomain virtual_maps = hash:/etc/postfix/virtualメール送受信に最低限必要な部分はmydestination, myhostname, mydomain, myoriginの4つです。これを正確に設定しないと、第三者リレーが可能な状態になっていたり、逆に送信されるべきメールが送信されなかったりします。
virtual.dom anything yossy@virtual.dom yossyといった感じで書いていきます。1行目がvirtual.domというドメイン宛のメールを受け入れるという宣言("anything"の部分は何を書いても良い)で、2行めが受け入れるアドレスとその転送先になります。
/^X-Mailer: Achi-Kochi Mail/ REJECT /^X-Mailer: Direct Email/ REJECTそして、/etc/postfix/main.cfにheader_checks変数を設定して"postfix reload"。これでOKです。
ところで、Postfixとlinuxconfの相性がどうも良くないようです。Postfixを入れると/usr/sbin/sendmailが互換ラッパープログラムに置き換わるのですが、これにはSUID/GUIDビットは立っていません(オリジナルのsendmailでは立っています)。ところが、linuxconfによって何らかの設定変更をすると、強制的に/usr/sbin/sendmailのSUID/GUIDが立てられてしまい、その結果いちいち手動で直さないといけない羽目になります。これが今ちょっと困っていることです。
ブロードバンドルーター(またはISDNルーター)+NATの環境で一番問題になるのが、サーバーのアドレスが内部と外部で異なるということです。
わが家の環境で言うと、インターネット側からwww.hodogaya.orgを引くとグローバルアドレス(203.141.142.176)を返してほしいのですが、家のLAN側から引いた場合はプライベートアドレス(192.168.0.2)を返してほしいのです。
BIND 8までは、1台のマシンに2つのnamedを起動する必要があった(けど、面倒なのでやっていなかった)のですが、BIND 9では1つのnamedで対応できるようになったのでインストールしてみました。
named.confの内容はこんな感じ。dbファイルの中身は、リンクをたどって下さい。
//
// rndcを使うための設定
//
key "key" {
algorithm "hmac-md5";
secret "*********************"; // パスワードなので伏せ字
};
server 127.0.0.1 { keys {"key"; }; };
controls {
inet 127.0.0.1 allow { 127.0.0.1; } keys { "key"; };
};
//
// オプション
//
options {
directory "/var/named";
allow-query { any ; };
allow-transfer { 205.166.226.38; 209.166.62.198; }; // ns[12].granitecanyon.com
} ;
//
// LAN内への応答設定
//
view "internal" {
match-clients { 192.168.0.0/24; 127.0.0.0/8; }; // 内部アドレス
recursion yes;
//// 正引き設定
zone "." {
type hint;
file "named.ca";
};
zone "localhost" {
type master;
file "in/localhost";
};
zone "hodogaya.org" {
type master;
file "in/hodogaya.org";
};
zone "virtual.domain" { // これは仮名
type master;
file ""in/virtual.domain";
};
//// 逆引き設定
zone "0.0.127.in-addr.arpa." {
type master;
file "in/localhost.rev";
};
zone "0.168.192.in-addr.arpa." {
type master;
file "in/hodogaya.org.rev";
};
};
//
// Internet上への応答設定
//
view "external" {
match-clients { any; };
recursion no;
//// 正引き設定
zone "hodogaya.org" {
type master;
file "ex/hodogaya.org";
};
zone "virtual.domain" { // これは仮名
type master;
file ""ex/virtual.domain";
};
//// 逆引きは委譲されていないので設定なし
};
options {
default-server 127.0.0.1;
default-key "key";
};
server localhost {
key "key";
};
key "key" {
algorithm hmac-md5;
secret "*********************"; // パスワードなので伏せ字
};
apacheの設定は、バーチャルホスト以外は特に変わった設定はしていません。バーチャルホストの設定はこんな感じ。
NameVirtualHost 192.168.0.2
<VirtualHost 192.168.0.2>
ServerAdmin webmaster@hodogaya.org
DocumentRoot /home/httpd/hodogaya/html
ServerName www.hodogaya.org
ErrorLog logs/error_log
CustomLog logs/access_log combined
CustomLog logs/referer_log referer
</VirtualHost>
<VirtualHost 192.168.0.2>
ServerAdmin webmaster@virturl.dom
DocumentRoot /home/httpd/virturl.dom/html
ServerName www.virturl.dom
ScriptAlias /cgi-bin/ "/home/httpd/virtual.dom/cgi-bin/"
ErrorLog logs/virtual.dom/error_log
CustomLog logs/virtual.dom/access_log combined
</VirtualHost>
特に注意しないといけないのは、NAT環境下では、NameVirtualHostなどで設定するIPアドレスはプライベートアドレスだということです。
なお、アクセス解析はwebalizerを利用しています。/etc/webalizer.confは以下のところを変更・追加しています。
OutputDir (解析結果を置く絶対ディレクトリ。apacheのデフォルトのままなら変更不要) Incremental yes HostName www.hodogaya.org HideSite 203.141.142.176 HideSite 192.168.0 HideReferrer www.hodogaya.org HideReferrer 192.168.0.ちなみに、アクセス解析結果は外から見れませんので、あしからず。解析結果のあるディレクトリに、以下のような内容の.htaccessを置いてあります。
order deny,allow deny from all allow from 192.168.0 203.141.142.176
DefaultRoot ~
<Limit LOGIN>
order deny,allow
AllowGroup ftpuser
</Limit>
ちなみに、<VirtualHost>という項目があったので、apacheみたいにホスト名ベースのバーチャルホストの設定ができるのかと思ったんですが、それは無理なようです。IPアドレスベースで挙動を変えることしかできないようです。まあ考えてみれば、HTTPと違ってFTPではプロトコルレベルでホスト名を伝達しないので、できないのは当然なんですが。