ポート開放ができない場所でサーバーを構築する方法
動機と構想
筆者は引っ越しに伴って戸建てプランからマンションタイプ(住棟内LAN方式)に切り替わってしまい、
自宅でマイクラサーバー、ssh、webサイト…などなどたくさんのサーバーが動いており、そこにVPSからリバースプロキシしていました。
またプロバイダの固定IPプランよりVPSを契約したほうが安いこともあり、固定IPを契約していなかったため、ポートがランダムに割り当てられるタイプでした。
そのため、何かしら良い方法はないかなと考えていた時に、固定IP by VPN的なのを思い出し、自分の家でもできないかと考え、VPN方式を採用しました。
他にも似たものとしてCloudflare Tunnelというサービスがありますが有料なので今回は採用しませんでした。
VPNの選定

この辺の記事を参考に選定した結果WireGuardが選ばれました。
候補としてはIpSec,OpenVPN,Wireguardなどがあります。Wireguardはほかの二つと比べて機能は少ないですが、WireGuardには、個人としては扱いやすくオーバーヘッドが少ないという特徴があります。
WireGuardとは
2020年にリリースされた、OpenVPN約70000行に対して約4000行というコードの短さを誇る。カーネルレベルで動作するため性能が良い。
VPNとはという記事はこちら
完成予想図
一応作ったのですがかなり見づらいのでスルーしても大丈夫です。
VPN を使うと、こんなイメージになります:
- 従来(左図)
- データを一度 VPS(外部サーバー)に送信し、そこから自宅へ受け取る
- インターネット上でデータが一度“丸見え”になる
- VPN 利用後(右図)
- VPS と自宅を暗号化された“トンネル”で直結
- トンネル内をデータが安全に通過し、外部からは中身が見えない
- 自宅側でポートを開放する必要もなくなる
つまり、VPN を使うことで「データを外にさらすことなく、安全なトンネル経由でやり取りできる」ようになり、セキュリティが大幅に向上します。
いざ実装
実装します。詳しいことは割愛しますが、DNS設定は必ず書きましょう。まあいいやと思って抜かしたらまったく接続できなくて数時間が消えました。悲しい。あとUDPです。TCP開けても思いは届きませんご注意!
下が参考サイトです。コマンドで困ったらAIに聞いてみるのも解決の手段としてよいかもしれません。
起動さえできれば接続をすることができます。VPS上でルーター設定はできないため、仮想ルーターとしてrinetdを使用しました。そうするとGlobalIP:8080ポートに来た通信をWireGuardCliant:80に飛ばすこともできちゃいます。
ちなみに…
自宅サーバーにsshしたい時にVPSを踏み台にして、自宅にsshするというリバースSSHトンネルも可能だったりします..