2026年6月6日

2026年6月6日

NAT越えの手順|自宅や社内のサーバーに外から接続する方法と選び方(ポート開放・SSHトンネル・WireGuard)

NAT(ルーターのアドレス変換)の内側にあるサーバーへ外から接続したいときは、まず自分の回線でポート開放が使えるかを確かめ、使えなければ「内側から外へ接続を張っておき、その経路を逆向きに使う」方法に切り替えます。この記事では、回線の状態の見分け方から、ポート開放、SSH のリバーストンネル、VPS を中継にした WireGuard、トンネルサービスの利用までを手順として説明します。読み終えると、自宅や社内に置いた WordPress の検証環境や小さなサーバーを、自分の条件に合った方法で外部から開けるようになります。

なお、ビデオ通話やゲームのように端末同士を直接つなぐ P2P 型の NAT 越え(STUN/TURN を使うもの)は目的が異なるため、ここでは扱いません。

ステップ1:自分の回線でポート開放が使えるかを確かめる

外部から内側のサーバーに届くかどうかは、ルーターの WAN 側に本物のグローバル IP が付いているかで決まります。次の2つを比べてください。

  1. ルーターの管理画面で、WAN 側(インターネット側)の IP アドレスを確認する
  2. 内側の端末から、外部から見えている IP アドレスを確認する
curl -4 https://ifconfig.me

ifconfig.me は外部のサービスなので、同様のサービスや、プロバイダーの会員ページで確認しても構いません。

2つが一致していれば、ルーターがグローバル IP を直接持っているので、ポート開放(ステップ2)が使えます。一致しない場合や、ルーターの WAN 側が 100.64.0.0/10 の範囲(キャリアグレード NAT 用に予約された範囲)や 10. 192.168. で始まるプライベート IP の場合は、プロバイダー側でも NAT が行われています。この状態ではルーターでポートを開けても外から届かないため、ステップ3以降の方法を使います。

IPv4 の固定 IP オプションや、IPv6 で接続を受ける方法もありますが、提供の有無や条件はプロバイダーごとに異なります。IPv6 の場合はルーターの IPv6 ファイアウォールで受信を許可する必要があり、接続する側も IPv6 を使える環境である必要があります。

ステップ2:ポート開放(グローバル IP がある場合)

ルーターにグローバル IP がある場合、もっとも単純なのはポートフォワーディング(ポート開放)です。

  1. サーバーの内側の IP アドレスを固定する。DHCP で変わると転送先がずれるため、ルーターの DHCP 予約か、サーバー側の静的 IP 設定を使う
  2. ルーターの設定で、外部の特定ポート(例:443)を、サーバーの内側 IP の同じポートへ転送する。設定画面の名称はメーカーにより「ポート転送」「静的 IP マスカレード」「仮想サーバー」などと異なる
  3. サーバー自身のファイアウォールでも、そのポートの受信を許可する
  4. 外部の回線(スマートフォンのモバイル回線など)から接続して確認する

確認を同じ LAN の内側から行うと、ルーターがヘアピン NAT(内側から自分のグローバル IP 宛てに送った通信を内側に折り返す機能)に対応していない場合に失敗し、設定が誤っていると勘違いしやすくなります。外部の回線から試すのが確実な切り分けです。

UPnP でアプリにポートを自動で開けさせる方法もありますが、意図しないポートが開く原因になるため、サーバー用途では手動で必要なポートだけを開けるほうが管理しやすくなります。また、グローバル IP が変わる契約では、ダイナミック DNS でドメイン名を追従させます。

ステップ3:SSH のリバーストンネル(手早く試したい場合)

グローバル IP を持つ VPS が1台あれば、内側のサーバーから VPS へ SSH 接続を張り、その接続の中を逆向きに通信させられます。外部からは VPS に接続し、VPS がトンネル経由で内側のサーバーに届けます。

内側のサーバーで次を実行すると、VPS の 127.0.0.1:8080 に届いた通信が、内側のサーバーの 80 番に転送されます。

ssh -N \
  -o ServerAliveInterval=30 \
  -o ExitOnForwardFailure=yes \
  -R 127.0.0.1:8080:localhost:80 \
  tunnel@vps.example.com

VPS 側では、Nginx などのリバースプロキシで公開用のドメインと HTTPS を受け、proxy_pass http://127.0.0.1:8080; でトンネルに渡します。トンネルの受け口を VPS の 127.0.0.1 に限定しているため、VPS の 8080 番がインターネットに直接さらされることはありません。受け口を外部向けに開くには VPS の sshd で GatewayPorts の設定が必要になりますが、リバースプロキシを挟む構成ならその必要はありません。

SSH 接続は回線の瞬断などで切れるため、常用するなら systemd のサービスにして自動で再接続させるか、autossh を使います。トンネル用には権限を絞った専用ユーザーと専用の鍵を用意し、パスワード認証は使わないでください。

ステップ4:VPS を中継にした WireGuard(常用する場合)

継続して使うなら、内側のサーバーと VPS を WireGuard で結ぶ方法が安定しています。WireGuard は UDP を使う VPN で、内側から VPS へ接続を張っておけば、NAT の内側からでもトンネルを維持できます。

まず両方のマシンで鍵ペアを作ります。秘密鍵は外部に出さず、ファイルの権限を絞ってください。

umask 077
wg genkey | tee privatekey | wg pubkey > publickey

VPS 側の /etc/wireguard/wg0.conf の例です。

[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = <VPSの秘密鍵>

[Peer]
PublicKey = <内側サーバーの公開鍵>
AllowedIPs = 10.8.0.2/32

内側のサーバー側の例です。

[Interface]
Address = 10.8.0.2/24
PrivateKey = <内側サーバーの秘密鍵>

[Peer]
PublicKey = <VPSの公開鍵>
Endpoint = vps.example.com:51820
AllowedIPs = 10.8.0.1/32
PersistentKeepalive = 25

ポイントは内側のサーバーに書く PersistentKeepalive です。通信がない時間が続くとルーターの NAT が対応表を消してしまうため、定期的にパケットを送って経路を保ちます。VPS 側では UDP 51820 番の受信をファイアウォールで許可します。

sudo wg-quick up wg0
sudo systemctl enable wg-quick@wg0
sudo wg show

wg show で相手の latest handshake が表示されていれば、トンネルは確立しています。あとは VPS のリバースプロキシで proxy_pass http://10.8.0.2:80; のように内側サーバーの WireGuard 上のアドレスへ渡します。SSH トンネルより再接続の扱いが簡単で、複数のポートやサービスをまとめて通せるのが利点です。

ステップ5:トンネルサービスやメッシュ VPN を使う

VPS を用意せずに済ませたい場合は、Cloudflare Tunnel(cloudflared)のように、内側から事業者のネットワークへ接続を張って公開するサービスや、Tailscale のように、直接つながらない場合は中継サーバーを経由する仕組みを持つメッシュ VPN もあります。設定の手間は小さくなりますが、通信が事業者のネットワークを通ること、利用条件や無料で使える範囲、機能が変わりうることを理解したうえで選んでください(2026年10月現在)。最新の手順と条件は各サービスの公式ドキュメントで確認します。

公開するときの安全対策

NAT の内側にあったサーバーは、外部に公開した時点で攻撃の対象になります。

  • 公開するのは必要なサービスとポートだけにする。管理画面や SSH を外部に出す場合は、送信元 IP の制限や VPN 経由に限定する
  • WordPress の検証環境を公開するなら、Basic 認証などで関係者以外のアクセスを止め、検索エンジンにも登録されないようにする
  • OS、Web サーバー、WordPress 本体とプラグインを最新に保ち、ログイン試行の制限を入れる
  • アクセスログを確認できる状態にし、想定外の接続が増えていないかを見る
  • 社内ネットワークの場合は、勝手にトンネルを張ると規程違反になることがあるため、管理者の許可を得てから行う

まとめ

  • まずルーターの WAN 側 IP と外から見える IP を比べ、プロバイダー側で NAT されていないかを確かめる
  • グローバル IP があればポート開放が単純。確認は LAN の外から行う
  • グローバル IP がなければ、内側から VPS へ接続を張って逆向きに使う
  • 手早く試すなら SSH リバーストンネル、常用するなら WireGuard と PersistentKeepalive
  • トンネルサービスは手軽だが、通信経路と利用条件を理解して選ぶ
  • 公開範囲を絞り、認証と更新で守ってから外部に開く

お気軽にご相談ください

お見積りへ お問い合わせへ
▲