やりたいこと
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な設定も多いのでシェルスクリプト化していれば良さそう。