自宅サーバーの公開のために、IPoEとPPPoEを両方実現できるルーター(YAMAHA NVR510)とISPを利用してきました。
が、次代はそろそろ光回線も10Gbps(フレッツ 光クロス)の時代が近づいてきています。IPoEしか利用できない光クロスの制約を考慮すると、PPPoEが10Gbps移行の足かせにもなりかねないため、PPPoEに依存せずにサーバー公開を実現する環境への移行をしました。
PPPoEからの脱却にあたり考慮した要件
PPPoEを廃止し、10Gbpsレディなおうちサーバー環境の構築を実現するにあたり考慮した要件は以下です。
- 費用が掛からないこと(コスト)
- 自宅側の回線のポート開放を廃止できること(セキュリティ)
- HTTP/HTTPSだけでなく、任意のポートを利用できること
1. 費用が掛からないこと
一般的に、PPPoEを利用せずに外部にサーバー公開する場合、インターネット上のVPS(Virtual Private Server:仮想専用サーバー)を出島(踏み台)にし、VPSから自宅サーバーの間をVPN等で接続する手法が採られます。VPSの中には一定の条件内で無料で利用できるVPSがありますが、自分の用途で無料の範囲で利用できるものを見つけることが1つのポイントになりました。
無料期間、踏み台から自宅への通信量制限、これらを考慮すると選択肢は最終的にOracle Cloudの1択でした。
| Oracle Cloud | Google Cloud | AWS | Azure | |
| サービス名 | Always Free | Free Tier | Free Tier | Free Account |
| 無料期間 | 無期限 | 無期限 | 12か月 | 12か月 |
| CPU/メモリ (最大) | 4 vCPU / 24GB | 2 vCPU / 1GB | 1 vCPU / 1GB | 1 vCPU / 1GB |
| ストレージ (最大) | 200 GB | 30 GB | 30 GB | 64 GB x 2 |
| 通信量 | 10 TB | 200GB | 100GB | 100GB |
| 日本リージョンの利用 (低遅延) | ● | ● | × | ● |
| 評価 | 通信速度が40Mbpsの制約ありだが、その他は文句なし! | 米国リージョン限定のため遅延がある。 通信量制限が痛い | 無料期間が1年限定のため対象外 | 無料期間が1年限定のため対象外 |
Google Cloudも魅力的だったのですが、実際に数か月トライアルしてみた結果、わずかではありますが通信量の課金が発生する場合があり、最終的にはOracle Cloudに落ち着きました。
Oracle Cloudでは、私の用途では半年以上課金が発生していません。
2. 自宅側の回線のポート開放を廃止できること
自宅のルーターのログを見ていると、インターネットからのポートアタックは日々絶えることなく行われています。精神衛生的にも、自宅回線のポート開放はゼロにしたいと考えていました。
これは、VPNの接続を自宅側からVPS側に行う形にすることで、実現が可能でした。
3. HTTP/HTTPSだけでなく、任意のポートを利用できること
自宅サーバーは、HTTP/HTTPS以外にもDNS over TLS / DNS over HTTPS、IKEv2 VPNリモートアクセス、その他の用途でいくつかのポートを利用しています。
自宅回線のPPPoEでポート開放するのと同じように、任意のポートを利用できることが必要です。
これは、インターネット上のVPSでファイアーウォールの設定を行い、VPSから自宅サーバーに対してポートフォワードをすることで実現ができました。
実現した環境
最終的に以下のような構成になりました。
Wireguard VPNトンネルはIPv6トンネルとすることで、MAP-Eトンネルの上にさらにトンネルを張るのではなく、IPoE上に直接トンネルを張ることでできるだけオーバーヘッドが少なくなるようにしました。
(1) VPSの役割
- Wireguard VPNのサーバー
- リバースプロキシ(HAProxy)
- インターネットからのアクセスのうち、指定したドメイン(SNI)へのアクセスと日本国内からのアクセスだけを自宅サーバーにプロキシす
- DNS over TLS / DNS over HTTPS (DoT/DoH、プライベートDNS・セキュアDNS) & アドブロック
- DoT/DoHサーバーとすることで、スマホからのDNSを常に暗号化
- Pi-holeを配置し、自宅外からインターネットを利用するときも、広告のブロックも実現
(2) 自宅サーバーの役割
- Wireguardのクライアント
- 自宅サーバー側からVPS上のWireguardサーバーに発呼してトンネルを確立
- リバースプロキシ(HA Proxy)
- 自宅サーバー内のサービスだけでなく、自宅ネットワークの他のサーバーのサービスを公開
- 具体的には、LAN内のWindows Server 2016 Essentials上のリモートWebアクセスやリモートデスクトップゲートウェイ、SSTP VPNへのアクセスをプロキシ
- DNS over TLS / DNS over HTTPS (DoT/DoH、プライベートDNS・セキュアDNS) & アドブロック(ローカルネットワーク用)
- ローカルネットワーク上のクライアントがDoT/DoHを利用する場合は、自宅サーバー上のPi-holeにアクセス(スマホにはxxx.yyy.zzzのDoT/DoHサーバーを指定することで、外部ではVPS、自宅では内部向けDNSで接続先を自宅サーバーに振り向け)
- NextCloud
- NetxCloudを利用し、Windows Server 2016 Essentials上の共有フォルダーをNextCloudを介してスマホからアクセスできるように
- Couch DB
- 自宅サーバーにCoucd DBをホスト。Obsidianの同期用にLAN内/インターネットからのアクセスを可能に
- VPNサーバー(StrongSwan)
- IKEv2(証明書) VPNをホスト。スマホやPCからIKEv2(証明書)でのVPNを可能に。
将来の10Gbps化に備えて
この環境見直しで、PPPoE接続は不要になり、またYAMAHA NVR510のような高度なルーターを必要とせずとも、NTTから提供されるHGWだけで自宅サーバーの公開が可能になりました。
この先、10Gbpsのサービスがもう少し安くなってきたら、切り替えをすることになると思いますが、その際にもPPPoE(というかIPv4アドレスでの自宅へのアクセス)のことを気にせず安心して移行することができそうです。
Oracle VPSやWireguardの具体的な設定内容は、また折を見て記載しようかと思います。