LoginSignup
9
10

More than 5 years have passed since last update.

スマホからプライベートなサーバに接続したい

Last updated at Posted at 2015-11-28

前提

  • APIのテスト用サーバがEC2に立っている
    • テスト用サーバなので一般公開したくない
    • 固定IPがない
    • DNSも設定してない
    • とりあえずSSHは可能

固定IPがあるのであれば,そのIPからのHTTP/HTTPSアクセスを許可すれば用は足りるので終了.
PC(Mac)からのアクセスであれば,SSHのポートフォワードで何とかなります1.が,スマホ(とりあえずiPhone)からだと難しそうです.

というわけで,iPhoneからPC経由でテスト用サーバにアクセスする方法を探してみました.

方針

  • Mac経由でアクセスするんだからリバースプロキシ立てられれば良い気がする
  • IPでのアクセスだとダルいし適当な名前でアクセスしたい

設定

hosts

127.0.0.1  api-test.hoge.com

SSH

ローカルポートフォワードして,localhost:8080でAPIサーバへアクセスできるようにしておきます.

ssh -L8080:localhost:80 ec2-user@xxx.xxx.xxx.xxx

リバースプロキシ

/etc/apache2/other/以下に設定を作成すると勝手に読んでくれます.

/etc/apache2/other/dev.conf
ProxyPass / http://api-test.hoge.com:8080/
ProxyPassReverse / http://api-test.hoge.com:8080/

あとは

sudo apachectl restart

この時点で,同一ネットワークに存在する他のマシンから http://<<MacのIP>> でアクセスできるようになります.

名前解決

MacのIPを10.0.1.116とします.

リバースプロキシが動いているMac上では api-test.hoge.com -> 127.0.0.1 に解決されれば良いですが,他のマシンにおいては api-test.hoge.com -> 10.0.1.116 と解決されてほしいです.

そこで,dnsmasqを使います.(homebrewでインストールされたものとする)

/usr/local/etc/dnsmasq.conf
address=/hoge.com/10.0.1.116
no-hosts

no-hostsの設定を入れないと/etc/hostsを見てしまうようです.

Mac上で確認

uraura@L-03-001$ dig @localhost api-test.hoge.com
; <<>> DiG 9.8.3-P1 <<>> @localhost api-test.hoge.com
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 28564
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;api-test.hoge.com.             IN      A

;; ANSWER SECTION:
api-test.hoge.com.      0       IN      A       10.0.1.116

;; Query time: 0 msec
;; SERVER: ::1#53(::1)
;; WHEN: Sat Nov 28 10:18:24 2015
;; MSG SIZE  rcvd: 51

別のマシンから確認

uraura@rosemary$ dig @10.0.1.116 api-test.hoge.com
; <<>> DiG 9.8.3-P1 <<>> @10.0.1.116 api-test.hoge.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22754
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;api-test.hoge.com.             IN      A

;; ANSWER SECTION:
api-test.hoge.com.      0       IN      A       10.0.1.116

;; Query time: 24 msec
;; SERVER: 10.0.1.116#53(10.0.1.116)
;; WHEN: Sat Nov 28 10:21:10 2015
;; MSG SIZE  rcvd: 51

これで同一ネットワーク上のiPhoneからでもapi-test.hoge.comでアクセス可能になってるはずです.

iPhoneから接続

iPhoneのブラウザから http://api-test.hoge.com へアクセスしてみます.

IMG_0179_2.png

(´・ω・`)

ネームサーバの指定を忘れてました.というわけで,Wifiの設定からDNSの設定を追加

IMG_0180_2.png

キタ━━゚+.ヽ(≧▽≦)ノ.+゚━━ ッ !!!
IMG_0181_2.png



  1. ただし,以下の追加設定が必要 

    • ローカルポートフォワードの場合はポート番号が余計に必要になる
    • ダイナミックポートフォワードの場合はsocksプロキシの設定が必要になる
9
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
10