よく分からないタイトルですが...
同一LAN内で、以下の論理構成とした時に、AndroidでアクセスしたときもRaspberry Piからのアクセスに見えるかどうかを試した時のメモです。
Android | (HTTP Proxy、ポート 23000) | Mac + polipo | (ssh -N -D 0.0.0.0:16000) | Raspberry Pi | Windows (Web Server)
物理的な構成は、
Android | (WiFi) | WiFiアクセスポイント | (有線LAN) | スイッチングハブ | (有線LAN) | Raspberry Pi, Windows, Mac
です。
目次
環境
- Android 7.0系
- 192.168.10.100
- Mac OS X 10.11.6
- LUA4-U3-AGTにて有線化
- 192.168.10.99
- Polipo 1.1.1
- Raspberry Pi 2 Model B
- Windows10
polipoを選んだ理由ですが、SOCKSをHTTPに変換できるProxyを探してみたらヒットした、というだけです。
ただ、今はメンテナンスも終了しているため、他に同じようなのがあれば、教えていただけるとありがたいです。
https://github.com/jech/polipo
準備
MacからRaspberry PiへSSH可能にする
以前と同じようにセットアップします。
Raspberry Pi 2 Model B + docker-compose上に、Django + PostgreSQLなアプリをデプロイしてみた - メモ的な思考的な
内容としては
です。
Polipo
Macの場合、Homebrewでインストールします。
$ brew install polipo
Polipoの設定ファイルを作成
今回は
- SOCKS5をHTTPにする、HTTP Proxyを作成
- HTTP Proxyのポートは、 23000
- キャッシュしない
- 設定ファイルは
~/polipo_config/config
として保存
とします。
# IPv4のみ接続可能 proxyAddress = "0.0.0.0" # HTTP Proxyのポート proxyPort = 23000 proxyName = "localhost" # SOCKS Proxyの設定:SOCKSのポートは16000 socksParentProxy = "127.0.0.1:16000" socksProxyType = socks5 # キャッシュをしない maxDiskCacheEntrySize = 0 diskCacheUnlinkTime = 0 # 名前解決にシステムデフォルトのDNSを使う dnsUseGethostbyname = true # リダイレクトキャッシュをしない dontCacheRedirects = true # Cookieキャッシュをしない dontCacheCookies = true
設定ファイルの詳細は、以下が参考になりました。
- Polipo の設定
- Convert Socks Proxy To Http Proxy: Using Polipo - CodeVoila
- [ネットワーク最適化] dolipo(polipo) の設定を更新した。
- missing polipo/config file in /usr/local/etc/ - Stack Overflow
各機器の起動
Windows上のWebサーバ起動
python -m http.server 9000
Webサーバが動作しているか、Macからcurlでアクセスしてみます。
$ curl http://192.168.10.105:9000 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> ...
Windowsのコマンドプロンプト上にも、アクセスした時のMacのIPアドレスが記録されました。
Serving HTTP on 0.0.0.0 port 9000 (http://0.0.0.0:9000/) ... ... 192.168.10.99 - - [12/Jun/2018 21:30:53] "GET / HTTP/1.1" 200 -
Androidもブラウザでアクセスしてみると、Windowsのコマンドプロンプト上にログが残ります。
192.168.10.100 - - [12/Jun/2018 21:32:54] "GET / HTTP/1.1" 200 - 192.168.10.100 - - [12/Jun/2018 21:32:54] code 404, message File not found 192.168.10.100 - - [12/Jun/2018 21:32:54] "GET /favicon.ico HTTP/1.1" 404 -
MacからRaspberry PiへSSH + 動的フォワード(SOCKS)
動的フォワード(SOCKS)となるように、SSHします。念のため v
オプションを付けて進行状況が分かるようにしておきます。
ssh -N -D 0.0.0.0:16000 pi@192.168.10.201 -v
今回はパスワード認証のため、途中でパスワードを入力します。
pi@192.168.10.201's password: debug1: Authentication succeeded (password).
Mac上のPolipoを起動
SOCKSのポートにHTTP Proxyをつなぎ、ポート 23000 でHTTPアクセスを受け付けるようにします。
$ polipo -c ./polipo_config/config Established listening socket on port 23000.
なお、今回はPolipoを起動したときのみ、HTTP Proxyとして動作させるようにしました。停止は Ctrl + C
です。
AndroidのProxy設定を変更
WiFi設定にて、Proxy設定を行います。
なお、手元のAndroidではHTTP Proxyしか存在しなかったので、実験に好都合です。
AndroidのProxy設定は、
とします。
HTTP Proxyに変更後、AndroidのブラウザでWindows上のWebサーバへアクセスします。
コマンドプロンプトのログを見てみると、Raspberry Piのものになっていました。
192.168.10.201 - - [12/Jun/2018 21:49:44] "GET / HTTP/1.1" 200 -
期待通りの環境ができました。