iPad proxy 例外設定について

moodleを使ってiPadを活用したいと思い、学内のサーバー(CentOS7)を立ち上げ、moodleをインストールしました。

moodle自体は問題なくインストールできたのですが、moodleに接続するにはproxy設定を無効にしなければなりません。

インターネットと同時に使用したいので、proxyの例外設定をしたいのですが、上手く稼働できません。


CentOS7(192.168.254.10)の/var/www/html以下にproxy.pacを置きました。

proxyサーバーは192.168.254.1:8080です。


proxy.pacの内容


function FindProxyForURL(url,host) {

if( isInNet(host, "192.168.254.10" ,"255.255.255.0)

|| isInNet(host, "127.0.0.0" ,"255.0.0.0"))

return "DIRECT";

}


iPadのWi-Fi設定のHTTPプロクシに192.168.254.10/proxy.pacと入れ、

iPadのsafariで192.168.254.10/proxy.pacにアクセスすると、proxy.pacの内容を見ることができます。moodleにもアクセス可能です。

しかし、インターネットには接続できません。


ちなみに

function FindProxyForURL(url, host)

{

if (isPlainHostName(host)) {

return "DIRECT";

}

return "PROXY 192.168.254.1:8080";

}

と書き換えても、proxy.pacが見えてインターネットには接続できませんでした。

どこが問題なのかわからず困っています。よろしくお願いします。

iPad (4th gen) Wi-Fi, iOS 8.4.1

投稿日 2015/10/07 00:50

返信
返信: 33

2015/10/15 05:44 ToMi への返信

少し光が見えてきました。


ToMiさんの助言に従い、切り分けてテストしてみました。


まず、proxy1.pacの環境にしてみたところ、やはりインターネットには接続されず、moodleなどのサーバーには接続できることが確認できました。スクリプト通りです。


次に、proxy2.pacの環境にしてみたところ、インターネットに接続することができました。プロクシサーバーを認識できたのです。しかし、この状態でmoodleなどサーバーにもアクセスできることが確認できました。求めているのは、この環境なんですけど、スクリプト通りではないですよね。ちょっと納得できません。


ここでタイムアウトになってしまったので、明日は三毛猫大好きさんのおっしゃる、キャッシュの確認をしてみたいと思います。

2015/10/13 03:18 ch25 への返信

また、proxy.pacを教えていただいた通りに書き換え、rebootさせてみましたが、現状は変わりませんでした。

もし、はにさんのスクリプト(最初の投稿のものもそうですが)を全文コピー&ペーストで作成された場合、

2行目のisInNet関数において、マスク値がダブルクォーテーションで閉じられていないため、

スクリプトとして不整合を起こしますので、結果としてPACが機能せず、直接通信となります。


以下の通り、正しくスクリプトを記述し直して、もう一度試してください。

なお、PACファイルの修正にあたってWebサーバの再起動は不要です。


  • 誤)if( isInNet(host, "192.168.254.10" ,"255.255.255.0)
  • 正)if( isInNet(host, "192.168.254.10" ,"255.255.255.0")

2015/10/15 11:08 三毛猫大好き への返信

お疲れ様です。


問題の切り分けができたのは一歩前進ですが、前提が変わってきてしまいましたね。

最初の書き込みで「moodleに接続するにはproxy設定を無効にしなければなりません。」とあったでの機能的に不可能の意味でとっていたのですが、少なくとも実態は違うようですね。

そうなると単純に見れた見れないではproxy.pacが狙い通りに動いているかわからなくなりました。

proxy経由かどうか調べるとしたら、moodleのアクセスログを見るぐらいしかなさそうですが、どうなんでしょう。

Macであれば、ターミナルから tcpdumpを使ってmoodleのホストとの通信が行われているか確認することも可能ですが...


その他、参考になるかもしれない情報:


dnsResolve()は大丈夫かなとか考えていたら、iOSのDNSキャッシュを簡単にリセットする方法がありました。

  1. 機内モードをオンにする。
  2. 5〜10秒ほど待つ。
  3. 機内モードをオフに戻す。


proxy.pacの書き方

http://web.archive.org/web/20060424005037/wp.netscape.com/eng/mozilla/2.0/relnotes/demo/proxy-live.html#dnsResolve

先に挙げたWikiのリファレンスにあるリンク(Netscapeのページのアーカイブ)ですが私にはこれが一番見やすいです。


# すみません。一度、書き込み途中で書き込んでしまいました。

2015/10/07 14:37 ch25 への返信

 今頃の返信で申しわけございません。


 下記リンク先の記事の、「isInNet関数(サブネットによる切り分け)」の項が参考になりそうです。

  社内SEの徒然なる日記 proxy.pac(プロキシパック)対応 No.10 pac作成(DNS)

  http://harikofu.blog.fc2.com/blog-entry-519.html


 なお、iOSではうまく機能しない命令もあるかもしれませんが、スクリプトの書き方について、Microsoftのページの解説がわかりやすいと思いました。

  参考

   付録 B : 自動プロキシ構成スクリプトの例(Microsoft TechNet)

   https://technet.microsoft.com/ja-jp/library/cc985335.aspx


 また、下記リンクによると、hostをIPアドレスに変換してからisInNet()に渡すほうが良いようです。

  Proxy 自動設定の isInNet() - むらかみの雑記帳

  http://tmurakam.hatenablog.com/entry/20080319/1205898329

2015/10/07 17:34 ch25 への返信

スクリプト自体については三毛猫大好きさんのリンクを参照してもらうとして、それとは別に確認しておきたいことが...

ch25 による書き込み:


moodleを使ってiPadを活用したいと思い、学内のサーバー(CentOS7)を立ち上げ、moodleをインストールしました。

moodle自体は問題なくインストールできたのですが、moodleに接続するにはproxy設定を無効にしなければなりません。

インターネットと同時に使用したいので、proxyの例外設定をしたいのですが、上手く稼働できません。


CentOS7(192.168.254.10)の/var/www/html以下にproxy.pacを置きました。

スクリプトを置いたサーバは自分で設定されたということだと思いますが、MIME Typeは正しい値(

application/x-javascript-config
)が送られるよう設定されていますでしょうか。


参考リンク:

Proxy auto-config - Wikipedia, the free encyclopedia( 英語版 Wikipedia、「The PAC File」のところ)

http://ash.jp/freebsd/proxy_auto.htm - プロキシの自動設定方法 ( 10年以上前に保存したブックマークですが、まだ生きてました^^;)

2015/10/08 00:05 三毛猫大好き への返信

三毛猫大好きさん、ToMiさん

ありがとうございます。


リンク先を見ながら次のようなproxy.pacを作ってみました。


function FindProxyForURL(url, host) {


if (!isResolvable(host)){

retrun "DIRECT";

}


var myIp = dnsResolve(host);


if (isInNet(myIp, "192.168.254.0", "255.255.255.0")) {

return "DIRECT";

}


return "PROXY 192.168.254.1:8080";

}


そして、mime-typeですが、/etc/httpd/conf/httpd.conf の最終行に AddType application/x-javascript-config pac を追加しました。

しかし、現状は変わりません・・・


何だか、proxy.pac自体を読み込めていないような気がするのですが。パーミッションとか関係ないですか?

申し訳ないほどの素人でご迷惑をかけますが、よろしくお願いします。

2015/10/08 08:48 ch25 への返信

 ch25さん、こんばんは。


 ToMiさんのご返信を拝見して、恥ずかしながら初めて知ったmime-typeについて(ToMiさん、ありがとうございました)。

 ch25さんは、私などよりお詳しいのに大変失礼を申し上げますが、ToMiさんのご返信の内容を反映させてから、設定変更を反映させるためにhttpdは再起動なさいましたですよね。

 だとすると… 設定するファイルが違うだけで、結果は同じなのかもしれませんが、下記リンク先の「12 mime.typesにphp設定を追加します」によると、/etc/mime.types に mime-typeを設定しているようです。

  CentOS7.0にMoodleインストール - Open Source Software Forum

  http://www.totsusangyo.com/netcommons/?page_id=56

2015/10/10 17:15 ch25 への返信

 ch25さん、こんばんは。


 何かの文字が原因なのか投稿時にエラーになるので、リンクなどのご紹介を省いて投稿いたします。


 もしかすると、iPadにて「HTTPプロクシ」>「自動」>「URL」欄に入力するときには、

http://192.168.254.10/proxy.pac

のように入力すると良いのかも(経験がなく、環境もないので試しておりません。すみません)。


なお、最初のご投稿で、

|| isInNet(host, "127.0.0.0" ,"255.0.0.0")

との記述がございましたが、同様の記述を新しいスクリプトにも追加なさったほうが良いのかなと思いました。

2015/10/10 18:13 ch25 への返信

> function FindProxyForURL(url,host) {

> if( isInNet(host, "192.168.254.10" ,"255.255.255.0)

> || isInNet(host, "127.0.0.0" ,"255.0.0.0"))

> return "DIRECT";

> }


return "DIRECT"; の後に

else

return "PROXY 192.168.254.1:8080";

}

とするとどうですか?


それからmime.typeはこのproxy.pacを置いてるweb server のapacheのconfig ファイルで設定します。

AddType application/x-ns-proxy-autoconfig .pac

そうしておけば、safariでアクセスした時、proxy.pacそのものが表示されるようなことは起こりません。

2015/10/10 18:13 ch25 への返信

iPadのWi-Fi設定のHTTPプロクシに192.168.254.10/proxy.pacと入れ、

すでに三毛猫大好きさんが指摘されている通り、

HTTPプロキシをPACファイルで指定する場合は、「URL」欄にPACファイルのURLを正しく入力する必要があります。

ここでの入力を誤ると、ご推察の通りiPadは直接通信を試みますので、まずは、正しくhttpから入力してみてください。


次に、Webサーバ側の設定に関しては、

iPadのsafariで192.168.254.10/proxy.pacにアクセスすると、proxy.pacの内容を見ることができます。

とのことですので、MIME設定そのほかについては、現状のままで問題ありません。


最後に、スクリプトに関しては、

はにさんの書かれているように、一番最初の投稿のものにプロキシサーバを追記することで、期待する動作になるでしょう。

2015/10/12 16:56 はに への返信

はにさん


ありがとうございます。

連休明け、早速修正してみました。


まず、mime-typeの件ですが、/etc/httpd/conf/httpd.confの一番下に、application/x-ns-proxy-autoconfig .pac と追加しました。

その時点で、MacBook AirのSafariからproxy.padにアクセスすると、スクリプトがダンロードされます。今までは、ブラウザー上でスクリプトの内容が見れていたのですが、その状態でよろしいのでしょうか?


また、proxy.pacを教えていただいた通りに書き換え、rebootさせてみましたが、現状は変わりませんでした。URL欄にはhttpからアドレスを入れてみましたが、やはりネットにはつながりませんでした。


あと、考えられる問題点はどこでしょうか。情報不足で申し訳ありませんが、よろしくお願いします。

2015/10/12 19:00 ch25 への返信

> proxy.pacを教えていただいた通りに書き換え


書き換えたものはその通りダウンロードできてるのですよね?

あと、webサーバはCentOSということですが、書き換えはCentOSのエディターでやってますか?

マックでやると、行末コードがCRになってしまい、Linux サーバなどでは正しく動作しません。(マックのエディターでも、行末コードをWindows用(CRLF)や Unix 用(LF)に変更できるものもありますけど)。Linux のサーバでやる以上、行末コードは LF か CRLF でないと正しく動作しません(LFが一番確実と思う)。

2015/10/13 07:30 ch25 への返信

 ch25さん、こんばんは。


 遊びもかねて、VirtualBoxにCentOS7をインストールしてみました。

 CentOS7でのMoodleインストールの解説サイトの手順の途中までと、プロクシサーバをインストールし、iPadのIPアドレスからインターネットへ繋がらないようにルータを設定して、インターネットへはプロクシサーバを通して、LANにはダイレクトで通信できることを確認(phpinfo()のREMOTE_ADDRで確認)しました。


 mime.typeについては、はに さんの、2015/10/11 10:13 のご回答のとおり、

 「URL」欄への指定につては、30ice さんの、2015/10/11 10:13 のご回答のとおり、

 proxy.pacのスクリプトについては、はに さんの、2015/10/11 10:17 のご回答に、30ice さんの、2015/10/13 19:18 のご回答の訂正を加えた形にして、うまく行きました。

 

 iPadの「URL」欄への指定では、「http:」の後に、「//」も必要みたいですので、再度ご確認ください。



 30iceさんのご回答を見て、 ” が抜けていることにやっと気がつきました。

 30ice さんの、2015/10/13 19:18 のご回答を受けて、明日こそはうまく行きそうですね。

2015/10/14 09:33 ch25 への返信

 ch25さん、おはようございます。


 一つ気がついたことがあるので念のためご報告です。


 iPadにて「HTTPプロクシ」>「自動」>「URL」欄に、次のようにご入力かと思います。

http://192.168.254.10/proxy.pac


 私の環境は iOS 8.4.1 なのですが、この環境では、上記「URL」欄の内容を変更しないと、最新の proxy.pac がサーバから再読み込みされず、ローカルのキャッシュを読み込んで動作しているようでした。


 たとえば、いったん、「HTTPプロクシ」>「オフ」に切り替えて、ホーム画面に戻り、

再度、「HTTPプロクシ」>「自動」に切り替えると、「URL」欄が空欄になっているので、入れ直すと再読み込みされました。


 もしくは、「URL」欄で、いったん末尾を1文字削って、

http://192.168.254.10/proxy.pa

のようにしてから、ホーム画面に戻り、

再度、「URL」欄を、

http://192.168.254.10/proxy.pac

に戻すと再読み込みされました。


 ※もしかすると、上記に加えて、Safariのキャッシュをクリアする必要もあるかもしれません



 あとは… proxy.pac に構文エラーがあると記述内容が無視されるみたいですが、そういうことも無いでしょうしね… 

このスレッドはシステム、またはAppleコミュニティチームによってロックされました。 問題解決の参考になる情報であれば、どの投稿にでも投票いただけます。またコミュニティで他の回答を検索することもできます。

iPad proxy 例外設定について

Apple サポートコミュニティへようこそ
Apple ユーザ同士でお使いの製品について助け合うフォーラムです。Apple Account を使ってご参加ください。