プロキシの自動設定スクリプトの動作ではまったこと

会社のインターネット接続環境は、プロキシ経由になっている。大小の様々なグループ会社が複雑に絡み合い今日も廻ってる*1感じのネットワークになっているので、イントラネットサイトとインターネットサイトへの接続時、どのプロキシを経由するのかは、会社公開の自動設定スクリプト(proxy.pac)によって判断されている。

自動設定スクリプトがどのようなものかは、以下参照。
https://technet.microsoft.com/ja-jp/library/cc985335.aspx

ある日、IE11で仕事上必要なwebサイトに接続しようとしたところ、プロキシに拒否された。理由はアップローダーだからとのこと。まあ、拒否された理由もわかるけど、閲覧が必要だったため、情報システム部に閲覧申請を行って、そのページが見られるようにプロキシを設定してもらった。

しかし、閲覧設定したにも関わらず、閲覧できるPCと閲覧できないPCが発生したのだった。PCの設定を見比べてみるも、IPアドレス以外に違いはない。ソースIPアドレスで制限をかけているのかと思ったが、ソースIPアドレスで制限かけているとのことで、それは比較したPCで同一だった。

ということで、自動設定スクリプトを読んでみることにした。スクリプトによれば、接続先がイントラネットなら、プロキシを通さずダイレクト接続*2イントラネットでなければ、接続元のIPアドレスによって、プロキシサーバを変える*3という作りになっており、特に問題無さそうであった。

スクリプトが正しく動作しているのか確認するため、netstatコマンドで接続先のプロキシを確認したところ*4、明らかに「ソースIPアドレスから期待されるプロキシ」とは異なるプロキシに接続されている。つまり、この自動設定スクリプトは、接続元のIPアドレスとして、想定と異なるIPアドレスを使用しているということだろう。
ipconfigコマンドでIPアドレスを確認したところ、イントラネット接続のIPアドレスはネットワークの優先度が2番目であった。よって、優先度を1番目に変更した*5ところ、無事正しいプロキシに接続されるようになった。

つまり、自動設定スクリプトのmyIpAdress関数は、実際にインターネット接続に使用しているIPアドレスではなく、ネットワーク優先度最上位のIPアドレスをソースアドレスと見なすということだろう。

いや、大変だった。