LoginSignup
0
0

More than 1 year has passed since last update.

特定ドメインへのコールバックなどをlocalhostでテストしたい

Posted at

やりたいこと

Oauth2認証などリダイレクトが入るAPI関連で申請するURLがlocalhostが許可されないとき、手軽に動きをチェックできない。
※環境はmac前提、コマンドは違えどLinuxでもできると思う。

指針

1. /etc/hostsにドメイン記載して、ローカルApacheやNginxのVirtualHostで実現

  • railsなどポートのこと考えるとちょっと面倒。

2. /etc/hostsにドメイン記載して、localhostの80,443をrailsのポートにフォワード

  • 設定はややこしい、ちょっと知識も必要

VirtualHost

これはある程度調べたら出るので割愛&今回は採用しなかった。

ポートフォワードで実現

まず考えるのは

  • localhostの80,443はrailsの3000とかに飛ばす
  • 実ドメイン=localhostの解決
  • 既存の80,443はすでに使っている可能性があるため他のサービス停止など気にしたくない

80,443は使っている可能性がある

これが実はちょっと面倒、hostsに実ドメイン→localhostだけ入れても他サービスとバッテングするとわざわざ止めないといけなくなる。
手間はできる限りなくしたい。

lo0(localhost, 127.0.0.1)にAliasIPアドレスを追加する

ループバックにアドレスを追加できる。
ループバックアドレスは127.0.0.1だけでなく、〜.2とかも使える。
参考) https://net-skills.net/intro-menu1/loopback/

なので
実ドメイン→追加したループバックアドレス(127.0.0.11とか)
に向ければ既存のlocalhost系は気にしなくて良さそう。

ひとまず追加
sudo ifconfig lo0 127.0.0.11 alias
確認
sudo ifconfig

lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
	options=1203<RXCSUM,TXCSUM,TXSTATUS,SW_TIMESTAMP>
	inet6 ::1 prefixlen 128 
	inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1 
	inet 127.0.0.1 netmask 0xff000000 
	inet 127.0.0.11 netmask 0xff000000   ←←ここ
	nd6 options=201<PERFORMNUD,DAD>

ちゃんとある。

ということで/etc/hostsに追加するエントリは
127.0.0.11 なんたらドメイン
になった。

これで(実ドメイン)へのアクセスは自PCの127.0.0.11に飛ぶことになった。
次はポートフォワード

ポートフォワード追加

調べるとパケットフィルタという機能がありpfctlコマンドで実現できるらしい。
細かい設定内容についてはここでは割愛するとして、ひとまず内容

/etc/pf.conf
 19 #
 20 # com.apple anchor point
 21 #
 22 scrub-anchor "com.apple/*"
 23 nat-anchor "com.apple/*"
 24 rdr-anchor "com.apple/*"
 25 
 26 # localhost forward
 27 rdr pass on lo0 inet proto tcp from any to 127.0.0.11 port 80 -> 127.0.0.1 port 3000
 28 rdr pass on lo0 inet proto tcp from any to 127.0.0.11 port 443 -> 127.0.0.1 port 9292
 29 
 30 dummynet-anchor "com.apple/*"
 31 anchor "com.apple/*"
 32 load anchor "com.apple" from "/etc/pf.anchors/com.apple"

27, 28行が追加したエントリ
ちなみに最初は末尾に追加したが、設定される順番があるらしく、rdr-anchorの後に変更した。
これで
実ドメイン→127.0.0.11への解決→railsのポートフォワード
までできた。
pfctlはデフォルトでは立ち上がってないらしく、sudo pfctl -eで有効化。

ローカル用証明書追加

mkcertあたりが便利

確認して終わり

これでブラウザから実ドメインにアクセスするとrailsのページが出るはず。
(でなければcurlなどでチェック、なおnslookupでは127.0.0.1への解決はでないことあり、だいたいはpfctlの設定ミスなはず)
リダイレクト系のチェックもできるようになった。
コマンドの操作あるので楽な設定ではないが、一度書いとけばOKな設定も多いのでシェルスクリプト化していれば良さそう。

/etc/hostsの指定は不要になったら外すことを忘れないように!

0
0
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
0
0