まめ畑

ゆるゆると書いていきます

CNAMEとProxyの不思議な関係

昨日はWindows XP SP3のせいで大変でしたがそれだけにもかまってられないので研究室のメールサーバ関係の移行作業の続きをやってみた。
続きといっても不具合の原因追求と修正がメイン。
これが終わらないと通常運用に移行出来ないので早急な作業。
しかし、作業中にはまってしまったのでメモと考察を書いてみる。

やるべき事

研究室内部で運用していたメールサーバを外部サーバに移行すべくゾーン情報を書き換える。
ついでにWEBベースでメールを管理出来るようにするため、そこへのCNAMEレコードも追加。


これだけのはずだったのです。。。
ただこれだけ。

今回の前提条件と起こった不具合

大学内のネットワークから外部のネットワークに出るにはProxyを通らなくてはいけない。
そのProxyは自動構成スクリプトによって提供されている。
スクリプトの内容は大学のドメインが含まれているならDIRECT、ちがうならProxyサーバへご案内。
こんな感じ。
今回は外部ネットワークのメールサーバへ移行といった感じです。


問題はプライマリDNSのレコードを書き換えた後に起こりました。
研究室の外部ネットワークからのアクセスで、アクセスするタイミングで旧MXレコード情報を返信してくるのと、WEBメールサーバ名が解決出来ない事態が発生しました。
研究室内部からは問題なく名前解決できていたので何事かと思いましたが問題は単純でした。
なぜか、セカンダリDNSの外部向けゾーンの設定がMasterに設定されていてプライマリDNSと同期しないようになっていました。
なぜこいつだけ?
逆引きに関しては全てがSlave設定で即時同期するようになっていたのに・・・。
とりあえず2台が同期するように変更する事でここまでの問題は解決しました。


しかし、ここからが本題。

動作の認識

問題はWEBメールを提供するサーバへアクセスするURLを変更するための設定で起こりました。
そのサーバは信頼性確保のため外部業者にホスティングをしてもらう関係など大人な事情で、Wアドレスは研究室とは違うドメインで運用される事になりました。
覚えにくいので、研究室のドメインからサブドメインを切って業者から指定されたアドレスへCNAMEを設定しました。

で、研究室内部からは問題なくリダイレクトされ正常動作を確認しました。
そこで学外のネットワークからを実行したところ、こちらも問題なし。
同じ学科のネットワークからもOK。
問題は、学内のネットワークからアクセスするとDNSが応答しないとエラーorz


digで確認してみると、ちゃんと転送先の情報が返ってくる。
アドレスも間違っていない。


なぜ!?


学内の色んな場所で確認しても症状は同じ。

原因究明?

色々と試していたのですが、どんづまり・・・。

そこで、アクセス出来る場所と出来ない場所の違いを考えてみました。
違いはProxyがあるか無いか。
学科のネットワークも学内のネットワークの扱いなのですが、管理ポリシーの違いでProxyを使用せずに外部にアクセス可能なのとアドレス体系も外部扱いになっています。

しかし、Proxyを切ると繋がらないのは当たり前なので、自動構成スクリプトを使用しないでダイレクトにProxyサーバへ接続するように設定変更。
これで学内外問わずとりあえずProxyを通過します。

結果。


成功!!


なぜ??


そこで考えて1つの仮説を立ててみました。
違ってる可能性大ですが。

仮説

とりあえず研究室のアドレスにアクセスする時は、ドメインが大学のものなので構成スクリプトの設定はダイレクト接続が選択される。
DNSに問い合わせが行われ返ってくるレコードは外部サーバのURL。
そちらのアドレス解決を実行。
もちろん、学外のアドレスが返ってくる。

ここからが問題の予感。

ブラウザは問い合わせたURLのIPアドレスが返ってきたためアクセスを行おうとするが、Proxyの構成はダイレクトのまま。
当然アクセスは出来ない。
ブラウザでエラー。


こんな流れでしょうか?


今までの認識では、CNAMEで変換されている先のURLが返ってきた時点で再度アクセスを試みるためProxyの設定もProxyサーバを使用するように変更されるかと思っていたのですが、ブラウザからの視点で考えると上記の一連の流れは途切れなく行われているため再度アクセスしなおすといった概念ではなく、最初に問い合わせたURLに対するIPアドレスが返ってきただけにすぎないのではないかと思いました。
つまり、ブラウザは学内にアクセスしてるつもりだけど返ってきたIPアドレスは学外のもの。

多分こんな感じかな?

結論

CNAMEはリダイレクトではなく、矢印。