自宅サーバーをネットに公開する!HGW&Decoによる二重NAT環境のポート転送設定ガイド

未分類

自宅のRaspberry Piをウェブサーバーとして外部公開したいと思ったことはありませんか?
しかし「ホームゲートウェイ(HGW)の内側にさらにWiFiルーターがある」という二重NAT環境だと、ポート転送の設定が2か所必要になり、つまずきやすいポイントが増えます。
本記事では、NTTのホームゲートウェイ(HGW-BL1500HM)とTP-Link Deco XE75の組み合わせによる二重NAT環境で、Raspberry Pi上のウェブサーバーをインターネットに公開するための設定手順を丁寧に解説します。

なぜこの機能を作ったのか?

我が家のスマートホームでは、Raspberry Pi上でGrafanaを使って電力やセンサーデータを可視化したり、NginxでWordPressブログを運用しています。
ローカルLAN内だけでアクセスできる状態では不便なことが多く、外出先からブラウザで確認したり、家族にもURLを共有したりするために、外部公開の仕組みが必要になりました。
また、グローバルIPアドレスは動的に変化するため、DDNSを使って固定のドメイン名でアクセスできるようにする必要がありました。

外出先からでも自宅サーバーにアクセスできるようにしたい!

実現したいこと

  • 自宅のRaspberry Pi上で動くウェブサービス(NginxやGrafanaなど)に外部からHTTP/HTTPSでアクセスできるようにする
  • グローバルIPが変わっても固定のドメイン名でアクセスできるようにする(DDNS)
  • HGWとWiFiルーターの2段階のNAT越えを設定する(二重NAT対応)
  • 標準ポート(80/443)をそのまま使い、ブラウザからURLだけで繋がるようにする

この記事でわかること

  • 二重NAT環境とは何か、なぜ設定が2か所必要なのか
  • HGW-BL1500HMのポートマッピング設定方法(管理画面の操作手順)
  • TP-Link Deco XE75のDDNS設定方法(Decoアプリでの操作手順)
  • TP-Link Deco XE75のポート転送設定方法(http/httpsルールの追加)
  • Raspberry PiのLAN内IPアドレスを固定する方法(アドレス予約)

必要な準備と用意するもの

ハードウェア
  • ホームゲートウェイ(本記事では HGW-BL1500HM を使用)
    • NTTフレッツ光などのONU一体型ルーターであれば基本的に同様の操作で設定可能
  • WiFiルーター(本記事では TP-Link Deco XE75 を使用)
    • HGWのLAN側に接続し、Wi-Fiルーターモードで動作させる
  • Raspberry Pi(ウェブサーバーとして使用)
    • Nginxなどのウェブサーバーソフトウェアをインストールしておく
ソフトウェア/サービス
  • HGW管理画面
    • ブラウザで http://192.168.0.1 にアクセスして設定(IPはHGWのLAN側IPアドレス)
  • TP-Link Decoアプリ(スマートフォン)
    • iOS / Androidどちらも対応。TP-Linkアカウントへのログインが必要
  • TP-Link DDNS(無料)
    • TP-Linkアカウントがあれば無料で xxxx.tplinkdns.com のドメインが取得できる
  • Nginx(Raspberry Pi上のウェブサーバー)

完成イメージ

設定完了後のネットワーク構成は下記のようになります。インターネットからRaspberry Piまで、2段階のNAT越えでアクセスが届きます。

インターネット
    ↓ (ドメイン名アクセス: xxxx.tplinkdns.com)
ホームゲートウェイ (HGW-BL1500HM)
  WAN: グローバルIPアドレス(動的、DDNSで追跡)
  LAN: 192.168.0.1
  ポートマッピング: TCP 80, 443 → 192.168.0.2(Deco)
    ↓
WiFiルーター (TP-Link Deco XE75) ※Wi-Fiルーターモード
  WAN: 192.168.0.2(HGWから割り当て)
  LAN: 192.168.68.1
  DDNS: xxxx.tplinkdns.com
  ポート転送: TCP 80, 443 → 192.168.68.89(Raspberry Pi)
    ↓
Raspberry Pi (ウェブサーバー)
  IP: 192.168.68.89(固定)
  Nginx: ポート80 (HTTP), 443 (HTTPS)

システムの仕組み

二重NATとは?

一般的な家庭のネットワーク環境では、NTTなどのISPから提供されたホームゲートウェイ(HGW)が1台目のルーターとして機能します。
そこにさらに市販のWiFiルーター(今回はTP-Link Deco XE75)を接続すると、ルーターが2台直列に並ぶ「二重NAT」構成になります。

NATとは?
NAT(Network Address Translation)は、プライベートIPアドレスとグローバルIPアドレスを相互に変換する仕組みです。外部からの通信をLAN内の特定の端末に届けるには、このNAT変換テーブルに転送ルールを追加する「ポート転送(ポートマッピング)」が必要です。

通信の流れ

外部からウェブサーバーへの通信は、以下の順序で届きます。

  1. ブラウザが https://xxxx.tplinkdns.com にアクセス → DNSがグローバルIPアドレスに解決
  2. グローバルIPアドレスにパケットが届く → HGWのポートマッピングが発動し、ポート443を 192.168.0.2(Deco)へ転送
  3. DecoのWAN側(192.168.0.2)でパケットを受信 → Decoのポート転送が発動し、ポート443を 192.168.68.89(Raspberry Pi)へ転送
  4. Raspberry Pi上のNginxがリクエストを処理してレスポンスを返す

実装のポイント

DDNSはDecoに設定するだけでOK
TP-LinkのDDNSはDecoルーターが自動でグローバルIPを取得・更新してくれるため、Raspberry Pi側での設定は不要。HGWのIPが変わっても自動で追従する。

HGWのポートマッピング先はDecoのIPを指定
HGWからみたDeco(の実際のWAN側IP = HGWのLAN側から見た Decoのアドレス)を転送先に指定する。本記事の環境では 192.168.0.2 がDecoのIPとなる。

Raspberry PiのLAN側IPは固定(アドレス予約)が必須
DecoのポートマッピングはRaspberry PiのIPを静的に指定するため、IPが変わるとアクセスできなくなります。Decoの「アドレス予約」機能でMACアドレスに固定IPを割り当てておきましょう。

標準ポート(80/443)の開放について
HTTP/HTTPSの標準ポートを開放することでブラウザからURLだけでアクセスできるようになります。ただしセキュリティリスクも高まるため、SSL/TLSによる暗号化(HTTPS)と適切なNginxのセキュリティ設定を必ず行ってください。

事前準備

Raspberry PiのIPアドレスを固定する

DecoのポートマッピングでRaspberry PiのIPアドレスを指定するため、IPが変わらないよう事前に固定しておく必要があります。
Decoアプリの「アドレス予約」機能を使うと、Raspberry PiのMACアドレスに対して常に同じIPアドレスを割り当てることができます。

Decoアプリで下記のパスを辿って設定してください。

Decoアプリ → もっと → 詳細 → アドレス予約 → +ボタン → Raspberry PiのMACアドレスを選択してIPを割り当て

本記事の環境ではRaspberry Piに 192.168.68.89 を固定で割り当てています。ご自身の環境に合わせて読み替えてください。

実装方法

① HGW のポートマッピング設定

まず、HGWの管理画面にブラウザでアクセスします。

http://192.168.0.1

ログイン後、詳細設定 → ネットワーク設定 → ポートマッピング設定 の順にメニューを辿ります。

「ポートマッピング設定」をクリックすると設定一覧が表示されます。
「追加 +」ボタンからHTTPとHTTPS用のルールをそれぞれ追加します。
下記の画像では、すでにポート80(HTTP)とポート443(HTTPS)のルールが登録済みの状態です。

各ルールの設定値は以下の通りです。

項目HTTP用HTTPS用
LAN側ホストDecoのIPアドレス(例: 192.168.0.2DecoのIPアドレス(例: 192.168.0.2
プロトコルTCPTCP
ポート番号80-80443-443

DecoのIPアドレスの確認方法
HGW管理画面の「DHCPサーバー設定」または「接続端末一覧」でDecoのMACアドレスに対応するIPアドレスを確認できます。固定化したい場合はHGW側の「DHCP固定/除外割当設定」でMACアドレスに固定IPを割り当てておくとよいでしょう。

② Deco XE75 の DDNS 設定

次に、TP-Link DecoアプリでDDNSを設定します。DDNSを使うことで、グローバルIPが変わっても常に同じドメイン名でアクセスできるようになります。

Decoアプリを開き、画面下部の「もっと」タブをタップして、「詳細」を選択します。

詳細設定画面で「DDNS」をタップします。

DDNS設定画面で以下を設定します。

  • DDNS:オン(有効化)
  • サービスプロバイダー:TP-Link
  • ドメイン名:任意の名前を入力(例: your-name.tplinkdns.com

設定後、「保存」をタップします。設定が保存されると、Decoが定期的にグローバルIPアドレスを確認し、DDNSレコードを自動更新するようになります。

TP-LinkのDDNSは xxxx.tplinkdns.com 形式のサブドメインを無料で取得できます。独自ドメインを使いたい場合は別途ドメイン取得サービスとDNS設定が必要です。

③ Deco XE75 のポート転送設定

詳細設定画面に戻り、「NAT転送」をタップします。

ポート転送」をタップします。

ポート転送の一覧画面が表示されます。右上の「」ボタンから新しいルールを追加します。
HTTP(ポート80)とHTTPS(ポート443)の2つのルールを追加します。

HTTP(ポート80)のルール設定

項目設定値
サービス名http(任意)
内部IPRaspberry PiのIP(例: 192.168.68.89
内部ポート80
外部ポート80
プロトコルTCP

HTTPS(ポート443)のルール設定

項目設定値
サービス名https(任意)
内部IPRaspberry PiのIP(例: 192.168.68.89
内部ポート443
外部ポート443
プロトコルTCP & UDP

各ルールを入力したら「保存」をタップします。

動作確認

設定が完了したら、外部ネットワーク(スマホのモバイル回線など、自宅WiFiをOFFにした環境)からブラウザでDDNSドメインにアクセスして動作確認します。

# HTTP接続確認(自宅WiFiをOFFにした環境から)
curl -v http://xxxx.tplinkdns.com

# HTTPS接続確認
curl -v https://xxxx.tplinkdns.com

ブラウザからアクセスしてNginxのデフォルトページやWordPressのトップページが表示されれば成功です。

確認できること
・ブラウザでDDNSドメインを開いてウェブページが表示される
・HTTPSのURLで鍵マーク(SSL証明書)が正しく表示される
・スマホのモバイル回線(自宅WiFiオフ)からアクセスできる

つながらない場合のチェックポイント
・HGWのポートマッピングのLAN側ホストIPがDecoのWAN側IPになっているか確認
・DecoのポートマッピングのIPがRaspberry PiのIPと一致しているか確認
・Raspberry Pi上のNginxが起動しているか確認(sudo systemctl status nginx
・Raspberry Piのファイアウォールでポートへのアクセスが許可されているか確認

まとめ

本記事では、HGW-BL1500HMとTP-Link Deco XE75による二重NAT環境で自宅サーバーをインターネットに公開する方法を解説しました。

  • 二重NAT環境ではポート転送が2か所必要:HGW(Deco向け)とDeco(Raspberry Pi向け)の両方に設定する
  • DDNSはDecoに設定するだけ:TP-Link提供の無料DDNSサービスでドメイン名を固定できる
  • Raspberry PiのIPは事前に固定する:Decoのアドレス予約機能を使ってMACアドレスに固定IPを割り当てる
  • セキュリティ対策を忘れずに:外部公開後はSSL/TLS証明書の設定、Nginxのセキュリティヘッダー、不要なポートを閉じるなどの対策を行う

この設定が完了すると、外出先からスマホでGrafanaのダッシュボードを確認したり、自宅で運用するWordPressブログを世界中に公開したりできるようになります。ぜひ試してみてください。

タイトルとURLをコピーしました