いつも自宅サーバで困った時に、おやじさんのサイトに助けて頂いています。
tcp wrapper について、お知恵をお借りしたいのですが、
qpopper からメールを受信しようとすると2回に1回程度失敗してしますます。
outlook express のエラー番号 : 0x800CCC0F
/var/log/messages の出力
warning: /etc/hosts.allow, line 25: host name/address mismatch: xxx.xxx.xxx.xxx != abc.hoge.jp
refused connection
tcp wrapper の PARANOID 設定で引っかかっているようです。
IPアドレスを逆引きすると、自宅サーバのドメインにも変換されますが、
プロバイダで付与している(?)ドメインにも変換されます。
こんな感じのです。ixxx-xxx-xxx-xxx.sxx.axxx.ap.hoge.or.jp
上記のような状態となったので、PARANOID の判定前に、
下のように設定しました。
ALL : .hoge.or.jp .hoge.jp : allow
ALL : PARANOID : RFC931 20 : deny
ですが、相変らず host name/address mismatch となってしまいます。
プライベートIPを指定すれば問題ないので困ってはいませんが、
上記の挙動が良くわからないでいます。
お知恵をお借りできたら幸いです。
宜しくお願いします。
> tcp wrapper について、お知恵をお借りしたいのですが、
> qpopper からメールを受信しようとすると2回に1回程度失敗してしますます。
>
> outlook express のエラー番号 : 0x800CCC0F
>
> /var/log/messages の出力
> warning: /etc/hosts.allow, line 25: host name/address mismatch: xxx.xxx.xxx.xxx != abc.hoge.jp
> refused connection
>
> tcp wrapper の PARANOID 設定で引っかかっているようです。
> IPアドレスを逆引きすると、自宅サーバのドメインにも変換されますが、
> プロバイダで付与している(?)ドメインにも変換されます。
> こんな感じのです。ixxx-xxx-xxx-xxx.sxx.axxx.ap.hoge.or.jp
ここで「IPアドレスを逆引きすると」といっているIPアドレスとはどういうIPアドレスですか?
「ixxx-xxx-xxx-xxx.sxx.axxx.ap.hoge.or.jp」は、グローバルアドレスを逆引きした結果のはずですが、このホスト名はプロバイダのDNSしか分からないので、このときはプロバイダのDNSを牽いたはず。しかし、同じIPアドレスが、「自宅サーバのドメインにも変換されます」というのであれば、通常、IPアドレスの逆引きの権限委譲がされていない限り有り得ない(グローバルアドレスを逆引きに対応できるのは、プロバイダのDNSしかないので、自宅サーバのドメインにも変換されることは有り得ない)ので、結論からすると、サーバ機の名前解決がチャントできていないというのが結論と思います。
DNSサーバを動かしているならその設定、/etc/hosts、resolv.conf、(/etc/hosts.conf あれば?)が整合性が取れていないのでは?
ご回答ありがとうございます。
> ここで「IPアドレスを逆引きすると」といっているIPアドレスとは
⇒これはプロバイダからPPPoEで取得したグローバルIPです。
プロバイダ(ぷらら)のDDNSサービスを利用しておりまして、
取得したIPアドレスを指定したドメインにプロバイダが
自動的に割り当てています。
これが原因なんでしょうか。
ちなみにDNSサーバは動かしておりません。
hosts は、プライベートIPにホスト名を割り当てているのみです。
127.0.0.1 localhost
192.168.11.3 host.hoge.jp
resolv.conf は、ルータのIP(192.168.11.1)を指定しています。
それにしても、hosts.allow は上から順にマッチしていくはずなのに、
なぜ、ALL : .hoge.jp .hoge.or.jp : allow をスルーして、
PARANOIDでひっかるのかも疑問です。。。
何か基本的にhostsとかの設定間違っているのでしょうか。
> ちなみにDNSサーバは動かしておりません。
> hosts は、プライベートIPにホスト名を割り当てているのみです。
> 127.0.0.1 localhost
> 192.168.11.3 host.hoge.jp
>
> resolv.conf は、ルータのIP(192.168.11.1)を指定しています。
>
> それにしても、hosts.allow は上から順にマッチしていくはずなのに、
> なぜ、ALL : .hoge.jp .hoge.or.jp : allow をスルーして、
> PARANOIDでひっかるのかも疑問です。。。
いろいろ判断に重要な部分が隠されてしまっている(全てを隠す意味がないと思うのですが、下記のxxx.xxx.xxx.xxxはグローバルなのかプライベートなのか?プライベートならクライアントのアドレスなのか?。 abc.hoge.jpとは、上記のhost.hoge.jpではないのでクライアントのことか? 等。)ので、正直、実態がつかめません。
warning: /etc/hosts.allow, line 25: host name/address mismatch: xxx.xxx.xxx.xxx != abc.hoge.jp
が、状況からすると、クライアントのDNS設定がルータのIPになっており、サーバのホスト名はグローバルアドレスに変換されているのではないか?ということです。おやじが使用しているルータならこの時点でサーバにはつながりませんが、恐らく使用しているルータはLAN側から自分のグローバルにアクセスしてくるとLAN側に戻してくれる(NAT?)してくれているのではないでしょうか? これだと、上記のような動きになりそう。
因みに、tcp wrapper は/etc/hosts.allowの評価以前に、IPアドレスを逆引きしたホスト名で正引きしたIPアドレスが元のIPアドレスと一致しているか見ていて、不一致ならその時点でアウトにしている(PARANOIDなクライアントは接続拒否)ので、上記エラーはそれのことと思います。
クライアントのhostsにサーバ機を登録する以外対処はできないと思います。つまり、家庭内通信にルータを介在させたら(そもそもこの通信形態が異常と思いますが・・・)、tcp wrapperは使えないのでは?
ご回答ありがとうございます。
こんな無茶な使用方法している質問にご回答頂き恐縮です。
> 下記のxxx.xxx.xxx.xxxはグローバルなのかプライベートなのか?プライベートならクライアントのアドレスなのか?
⇒これはグローバルIPです。
> クライアントのDNS設定がルータのIPになっており、サーバのホスト名はグローバルアドレスに変換されているのではないか?
⇒はい。おそらく私もそう思っております。
> ルータはLAN側から自分のグローバルにアクセスしてくるとLAN側に戻してくれる(NAT?)してくれているのではないでしょうか?
⇒使っているルータはBBR-4HGで、俗に言うヘアピンNATが有効のようです。
いろいろ情報をマスクしてしまって、内容をうまく伝えられておりませんでお手数をお掛けしております。
整理致しますと、
クライアント : 192.168.11.2
サーバ : 192.168.11.3
※ クライアントとサーバは同じセグメントです。
プロバイダのDDNSドメイン : hoge.plala.jp
nslookupでグローバルIPを逆引きした時に得られるドメイン : hoge.plala.jp または i<グローバルIP>.sxx.axxx.ap.plala.or.jp
上記の事から hosts.allow に .plala.or.jp と .plala.jp を PARANOID の前に記述する。
それで新たな発見がありました。PARANOID の部分を削除すると、うまく動作するようです。
ですので、PARANOID の記載はどこかにあると一番最初にチェックするのかなと思っています。
それか、おやじさんが仰るようにプライベートIPで接続する(これが本来の使用方法ですが)か、クライアントのhostsにサーバのドメインを追加してルータの内側で処理しちゃうかしかないんですかね。
言い忘れておりましたが、OS は FreeBSD 6.2 です。
でも、TCP Wrapper は SUSE も RedHat も動作は同じですよね。
> > ルータはLAN側から自分のグローバルにアクセスしてくるとLAN側に戻してくれる(NAT?)してくれているのではないでしょうか?
> ⇒使っているルータはBBR-4HGで、俗に言うヘアピンNATが有効のようです。
BBR-4HGはそうです。webだけかと思いましたが、これだと全てのポートが戻ってくるのでしょうね。
> いろいろ情報をマスクしてしまって、内容をうまく伝えられておりませんでお手数をお掛けしております。
> 整理致しますと、
>
> クライアント : 192.168.11.2
> サーバ : 192.168.11.3
> ※ クライアントとサーバは同じセグメントです。
>
> プロバイダのDDNSドメイン : hoge.plala.jp
> nslookupでグローバルIPを逆引きした時に得られるドメイン : hoge.plala.jp または i<グローバルIP>.sxx.axxx.ap.plala.or.jp
これが、明らかにおかしいですね。
ここでnslookupしているのは、サーバ機ですよね。クライアントも同じでしょうか?
plalaのDDNSサービスは権限委譲していないので、グローバルIPを逆引きした時は、i<グローバルIP>.sxx.axxx.ap.plala.or.jp以外に成ることはありえません。
ということは、グローバルIPを逆引きした時に「 hoge.plala.jp」を返しているのは誰かを調べればいいことです。
warning: /etc/hosts.allow, line 25: host name/address mismatch: xxx.xxx.xxx.xxx != abc.hoge.jp
ここで、「abc.hoge.jp」というのは、「 hoge.plala.jp」のことですよね? BBSの場合、書かれていない情報を行間を読まなければならないのですが、変えてしまうと意味がわからなくなってしまうことが多いので、なるべく変えないでいただきたいと思います。
IPもグローバルかプライベートかがほとんどのケースで重要なので、上位の2つは消さないで欲しいですね。
上記エラーは、恐らくグローバルIPを逆引きした時に「 hoge.plala.jp」を返していることがあるからです。
グローバルIPを逆引きした時に「 hoge.plala.jp」が帰ってくる。 この「hoge.plala.jp」を牽くと、hostsの「192.168.11.3 host.hoge.jp」(これもhost.hoge.jp = hoge.plala.jp のことですよね)から、192.168.11.3が帰ってくるので不一致になっているのでは?
感覚的には、グローバルアドレスを明示的に知っているのはルータですから、ルータのDNSリレーを使うのをやめて、plalaのDNSを使うようにすれば治る気もしますが? でも、ルータは「 hoge.plala.jp」とグローバルの関係を知らないはず? もしかして、権限委譲していないといいながら、plalaのDDNSが時々、返してくる???
いずれにしても、誰が、「 hoge.plala.jp」を返してくるかを見つけないことには始まらないのは事実です。
> それか、おやじさんが仰るようにプライベートIPで接続する(これが本来の使用方法ですが)か、クライアントのhostsにサーバのドメインを追加してルータの内側で処理しちゃうかしかないんですかね。
「しかない」ではなく、そうしなければまともに動かなくて当然です。そのために、内向きDNSを建てるのですから・・・
> 言い忘れておりましたが、OS は FreeBSD 6.2 です。
> でも、TCP Wrapper は SUSE も RedHat も動作は同じですよね。
本件は、TCP Wrapperの問題ではなく、chaltierさんのLAN側(家庭内)の名前解決の異常(グローバルIPを逆引きした時に「 hoge.plala.jp」が帰ってくる)が原因です。
ご回答ありがとうございます。
> ここでnslookupしているのは、サーバ機ですよね。クライアントも同じでしょうか?
はい。サーバおよびクライアント両方で同じ結果になります。
nslookup した最初が hoge.plala.jp で返されて、10回目くらいから、i<グローバルIP>.sxx.axxx.ap.plala.or.jp が返ってくる感じです。
さらに hoge.plala.jp を正引きした後は、またしばらく hoge.plala.jp が逆引きの結果で返ってきます。
> この「hoge.plala.jp」を牽くと、hostsの「192.168.11.3 host.hoge.jp」(これもhost.hoge.jp = hoge.plala.jp のことですよね)から、192.168.11.3が帰ってくるので不一致になっているのでは?
はい。host.hoge.jp = hoge.plala.jp です。
nslookup hoge.plala.jp とやるとグローバルIPが返ってきますが、
ping hoge.plala.jp とやると PING hoge.plala.jp (192.168.11.3): 56 data bytes となっているので hosts の結果が返ってきています。tcp wrapper の、逆引きと正引きは hosts を利用するのでしょうか。
> chaltierさんのLAN側(家庭内)の名前解決の異常(グローバルIPを逆引きした時に「 hoge.plala.jp」が帰ってくる)が原因です。
なるほど、今までずっと正常だと思ってました。
nslookup で server を plala の DNS サーバを指定してグローバルIPを逆引きしたら i<グローバルIP>.sxx.axxx.ap.plala.or.jp 以外は返ってきませんでした。
うちのルータに変更したら、i<グローバルIP>.sxx.axxx.ap.plala.or.jp が返ってきてたのですが、hoge.plala.jp を正引きした後に逆引きしたら hoge.plala.jp が返ってきてしまいました。
おそらくおやじさんが仰るとおり、plala の DNS を直接指定すれば問題なさそうですね。なんかキャッシュみたいなのが残っててそれが原因なんですかね?
でもそう考えると、メール受信する初回から PARANOID に引っ掛かるから、違いますね。
ルータの設定を疑ってみます。
ありがとうございます。
> > ここでnslookupしているのは、サーバ機ですよね。クライアントも同じでしょうか?
>
> はい。サーバおよびクライアント両方で同じ結果になります。
> nslookup した最初が hoge.plala.jp で返されて、10回目くらいから、i<グローバルIP>.sxx.axxx.ap.plala.or.jp が返ってくる感じです。
> さらに hoge.plala.jp を正引きした後は、またしばらく hoge.plala.jp が逆引きの結果で返ってきます。
>
> > この「hoge.plala.jp」を牽くと、hostsの「192.168.11.3 host.hoge.jp」(これもhost.hoge.jp = hoge.plala.jp のことですよね)から、192.168.11.3が帰ってくるので不一致になっているのでは?
> はい。host.hoge.jp = hoge.plala.jp です。
> nslookup hoge.plala.jp とやるとグローバルIPが返ってきますが、
> ping hoge.plala.jp とやると PING hoge.plala.jp (192.168.11.3): 56 data bytes となっているので hosts の結果が返ってきています。tcp wrapper の、逆引きと正引きは hosts を利用するのでしょうか。
>
> > chaltierさんのLAN側(家庭内)の名前解決の異常(グローバルIPを逆引きした時に「 hoge.plala.jp」が帰ってくる)が原因です。
> なるほど、今までずっと正常だと思ってました。
> nslookup で server を plala の DNS サーバを指定してグローバルIPを逆引きしたら i<グローバルIP>.sxx.axxx.ap.plala.or.jp 以外は返ってきませんでした。
> うちのルータに変更したら、i<グローバルIP>.sxx.axxx.ap.plala.or.jp が返ってきてたのですが、hoge.plala.jp を正引きした後に逆引きしたら hoge.plala.jp が返ってきてしまいました。
> おそらくおやじさんが仰るとおり、plala の DNS を直接指定すれば問題なさそうですね。なんかキャッシュみたいなのが残っててそれが原因なんですかね?
> でもそう考えると、メール受信する初回から PARANOID に引っ掛かるから、違いますね。
>
> ルータの設定を疑ってみます。
これだけ情報があれば、原因がはっきりしますね。
ルータの設定ではないです。やはり、ルータのヘアピンNAT(誰が名づけたのでしょうか?)が原因なので、この機能に頼らず素直に家庭内(LAN内)は内向きDNSなりhostsなりでプライベートアドレスでアクセスするようにすれば、解決するはずです。あと、ルータのDNSリレー機能を使用していることも、一要因になっています。内部は内部で解決し、外部は素直にプロバイダのDNSを使用すれば問題は出ないはずです。
今回の挙動は、以下のとおりで説明がつくはずです。
1. クライアントが、hoge.plala.jpでアクセスする。
2. ルータはDNSリレーでplalaのDNSに問い合わせ、xxx.xxx.xxx.xxxをクライアントに返すと同時に、hoge.plala.jp = xxx.xxx.xxx.xxxとしてキャッシュする。plalaのDDNSはTTLが10秒と短いので、このデータはすぐに消えてしまうので、「10回目くらいから、i<グローバルIP>.sxx.axxx.ap.plala.or.jp が返ってくる感じです。」というのは当然です。
3. ここで、TCP Wrapperがxxx.xxx.xxx.xxxを逆牽きすると、2項でルータはキャッシュしている、hoge.plala.jpを返してくるが、TCP Wrapperがhoge.plala.jpを牽くとhostsの192.168.11.3が帰ってくるので不一致となる。
ご回答ありがとうございます。
なるほど、TTLが原因なんですね。(正確に言うと原因は私の使い方なんですが...)
TTLについての知識が無いので、ちょっとそれについては調べてみます。
ルータ(plalaのDNS?)が10秒間キャッシュしている間は、NGなんですね。
そのキャッシュが開放され、逆引きした際に i<グローバルIP>.sxx.axxx.ap.plala.or.jp が返ってくれば、
hosts を利用しない為、成功するという仕組みですね。
要は plala の DNS が hoge.plala.jp = xxx.xxx.xxx.xxx をキャッシュしている期間(10秒)は、
逆引きした際に、hoge.plala.jp が帰ってきて、正引きした際には hosts を利用してプライベートIPが
返ってきてしまいNG。
キャッシュが開放されれば、i<グローバルIP>.sxx.axxx.ap.plala.or.jp で名前解決する為、
問題なしとなるんですね。
ですが、何回かメールを受信するとうまくいくのは、どうしてなんでしょうか。
メールを受信する時は、hoge.plala.jp でアクセスする為、毎回 TTL が 10秒にリセットされ
NGになってしまう気がするのですが、それか、キャッシュクリアされても再度キャッシュしてしまわないんでしょうか。
ご教授頂けたら幸いです。
宜しくお願い致します。
> ルータ(plalaのDNS?)が10秒間キャッシュしている間は、NGなんですね。
ルータのDNSリレー機能です。
> そのキャッシュが開放され、逆引きした際に i<グローバルIP>.sxx.axxx.ap.plala.or.jp が返ってくれば、
> hosts を利用しない為、成功するという仕組みですね。
>
> 要は plala の DNS が hoge.plala.jp = xxx.xxx.xxx.xxx をキャッシュしている期間(10秒)は、
> 逆引きした際に、hoge.plala.jp が帰ってきて、正引きした際には hosts を利用してプライベートIPが
> 返ってきてしまいNG。
キャッシュしているのは、ルータのDNSリレー機能です。
> キャッシュが開放されれば、i<グローバルIP>.sxx.axxx.ap.plala.or.jp で名前解決する為、
> 問題なしとなるんですね。
そうです。
> ですが、何回かメールを受信するとうまくいくのは、どうしてなんでしょうか。
> メールを受信する時は、hoge.plala.jp でアクセスする為、毎回 TTL が 10秒にリセットされ
> NGになってしまう気がするのですが、それか、キャッシュクリアされても再度キャッシュしてしまわないんでしょうか。
現象面から論理的な推理をしているだけであり、それぞれのデバイスの設計者でなければ内部の作りがわからないので、確実にこうだとは誰もいえないのでは?
因みに、10秒といっても、設計によってはキッチリ10秒で消えるわけではないですし、そんな短いTTLを想定していない可能性も十分考えられます。
タイムチャートを書けばすぐ分かると思いますが、ハッキリしているのはクライアントのキャッシュが消えるのが一番遅くなっていないと、上記の動作(うまくいくことがある)になることはありません。
本件の本質的な問題は、逆引きでタイミングにより複数のホスト名が帰ってくること(一意であるはずであり、それはi<グローバルIP>.sxx.axxx.ap.plala.or.jpでなければならない)、もう少し言うなら、グローバルの逆引きでhoge.plala.jp が帰ってくるchaltieさんの名前解決の環境環境がおかしいということです。
前にも言いましたが、キャッシュ兼内向きDNSを建ててそれを利用するか? hostsを書くか?、ルータのDNSリレーを使わずISPのDNSを使えば、自分が考えているように動作しますので、自分がこれだと思う方法で対処すればいいだけです。自分の見える範囲で確実に動かすなら、DNSを建てるのが一番と思います。
装置固有のわけの分からない機能に振り回されても意味が無いと思いますが・・・。
ご回答ありがとうございます。
おやじさんの言うとおりルータがキャッシュしている間に限り失敗する事を確認しました。
逆引きのキャッシュと正引きのキャッシュって別々なのかな...?
そもそもIPアドレス1つに対し2つのドメインが返ってくる変な状態の事ですし深く考えても仕方無いですよね。
お手数をお掛けしました。
おやじさんの仰る通り本件は解決しましたし、
これ以上の事は推測の話になってしまいますので、この辺にしたいと思います。
おやじさんのご回答は明快で、ちょっと甘えちゃいましたね。
大変勉強になりました。ありがとうございます。