自宅のWEBサーバーを立てた時から疑問だった、「自宅のLANから自宅のサーバーにアクセスできない」問題を調べてみました。
ことの発端は…
以前、自宅のラズパイにWEBサーバーを立ててSSLの証明書をとってHTTPSに対応させて、安心して寝たのですが…
えええ、、、アクセスできない!?!?!
それに悪意のあるユーザー!?😱😱😱😱
とそんな感じで、翌日からサーバーを乗っ取られてしまったのかと背筋が凍りました…(冗談抜きで)
原因は?
しかしながら、Apacheのログなどを見ても全然普通だったので、色々試行錯誤してみるとスマホの4Gからならアクセスできることに気がつきました。
その事から、VPNを繋いでPCから見てみると普通に見れた事から、原因は自宅のLAN経由でつながっている事でした…
なので、ホット一安心して今まで自宅ではVPNに繋いでやっていたのですが、そろそろ面倒になって来たのとモヤモヤして夜しか寝れないので調べてみることにしました。
ヘアピン NATという機能
どんな風にググればいいのか分からなかったので「自宅サーバー LAN アクセスできない」みたいに調べると、以下のサイトと出会いました。
このサイトの記事を簡単にまとめと、LAN内から自宅のサーバーのグローバルIPに接続する際にヘアピンNAT非対応のルータだと
PC→ルーター→DNSサーバーまでは出来るようですが、その後のDNSサーバー→ルーターの時に自分で自分の所にアクセスしてるのでルーターちゃんがパニックを起こしてしまうらしいです。
なので、どうやら自宅のルーターではヘアピンNATというものに対応していないのが原因でした。
なんだよヘアピンNATってオシャレな名前しやがって…
対応させる方法
どうやら対応させる方法は大きく4つあるそうで
- VPNなどから外部のプロキシサーバを経由してWAN側からアクセスする方法
- ヘアピンNATに対応するルーターを利用してアクセスできるようにする方法
- プライベート用のDNSサーバーを構築する方法
- hostsファイルを編集して、ドメイン名を直接サーバーのプライベートIPにルーティングする方法
今やっているのは、1番のやつですね。
そして、自分がもう1つ調べて分かったのが、
- IPv6で接続する
結局そのままで行くことに
前述した通り、色々とどうにかする方法はあるみたいで、その中でVPN経由かIPv6でアクセスするのがよさげな感じがしました。
なので、今回はヘアピンNATという言葉の意味と、接続ができない理由と仕組みを勉強することができて良かったです(笑)
プライベートのDNSサーバーは、時間が出来たらやってみたいと思います。