対象者 : 中級
  • 想定される前提条件 : Ubuntuの基本知識、ターミナル、基本的なネットワーク概念

  • 技術的な概念 : NAT, ポートフォワーディング, ファイアウォール, リバースプロキシ

  • システムコマンド : ターミナルの使用、ネットワーク構成

  • 高度なセクション : モニタリング, セキュリティ, クラウドの代替案

問題:NATとプライベートアドレス

問題 : Ubuntu マシンでウェブアプリケーションを開発していて、自宅ネットワークの外部からアクセスできるようにしたいですか? ここがまさにぴったりの場所です! この記事では、インターネットボックスのポートフォワーディングを設定して、ローカルサービス(例えばポート 8080)をインターネットに公開する方法を見ていきます。

デフォルトでは、お使いのインターネットボックスは NAT(Network Address Translation)を使用して、ご家庭内ネットワークのすべてのデバイス間で1つのパブリック IP アドレスを共有します。お使いのローカルマシンは、インターネット上ではルーティングできないプライベート IP アドレス(192.168.x.x、10.x.x.x など)を使用します。

Ubuntu マシンでサービスを起動すると(たとえばポート 8080 のウェブサーバーなど)、それはローカルネットワークからしかアクセスできません。インターネットからアクセスできるようにするには、ポートフォワーディングを設定する必要があります。

ステップ 1: あなたのパブリック IP アドレスを特定する

まず、インターネット接続のパブリックIPアドレスを取得しましょう:

# Plusieurs méthodes au choix
curl ifconfig.me
curl ipecho.net/plain
wget -qO- http://ipecho.net/plain

# Ou encore
curl -s checkip.amazonaws.com

このIPアドレスは、インターネットユーザーがあなたのサービスにアクセスするために使用するものです。

ステップ2:UbuntuマシンのローカルIPアドレスを確認する

Ubuntuマシンはローカルネットワーク上のプライベートIPアドレスを持っています。確認するには:

# Afficher toutes les interfaces réseau
ip addr show

# Ou plus spécifiquement pour l'interface principale
ip route get 1.1.1.1 | awk '{print $7; exit}'

# Alternative avec hostname
hostname -I | awk '{print $1}'

このアドレスをメモしてください(例えば`192.168.1.100`), 設定のためにそれが必要になります。

ステップ3: ルーターでポートフォワーディングを設定する

構成はお使いのボックスのモデルによって異なりますが、原理は同じです:

管理インターフェースへのアクセス

ブラウザを開き、ボックスのウェブインターフェイスにアクセスしてください:

  • フリーボックス</think>`192.168.1.1` ou mafreebox.freebox.fr

  • Livebox Orange:`192.168.1.1`

  • SFRボックス</think>`192.168.1.1`

  • Bbox Bouygues : 192.168.1.254

リダイレクトの設定

ポートフォワーディング専用のセクションを探してください(名前は変わります):

  • ポート転送

  • NAT/PAT

  • ポートフォワーディング

  • ゲームサーバー

これらの設定で新しいルールを作成:

フィールド 値

名前/説明

Ubuntuウェブサービス"(または他の明示的な名前)

外部ポート(またはパブリックポート)

8080

内部IPアドレス

UbuntuマシンのIPアドレス (例: 192.168.1.100)

内部ポート (または プライベートポート)

8080

プロトコル

TCP

状態

有効

ステップ 4 :Ubuntu 上のサービスの設定

サービスが localhost だけではなく、すべてのインターフェイスでリッスンしていることを確認してください:

# ✅ Correct : écoute sur toutes les interfaces
python3 -m http.server 8080 --bind 0.0.0.0

# ❌ Incorrect : écoute seulement en local
python3 -m http.server 8080 --bind 127.0.0.1

サービスが正しくリスンしていることを確認する:

# Vérifier les ports en écoute
sudo netstat -tlnp | grep :8080
# ou avec ss (plus moderne)
sudo ss -tlnp | grep :8080

何かのように見えるはずです`0.0.0.0:8080`そして いいえ`127.0.0.1:8080`。

ステップ 5 : Ubuntuファイアウォールの設定

UbuntuはデフォルトでUFW(Uncomplicated Firewall)を使用します。必要に応じて、その状態を確認し、ポートを許可してください:

# Vérifier le statut du pare-feu
sudo ufw status

# Si le pare-feu est actif, autoriser le port 8080
sudo ufw allow 8080/tcp

# Ou plus spécifiquement pour un service web
sudo ufw allow 'Apache'  # si vous utilisez Apache
sudo ufw allow 'Nginx Full'  # si vous utilisez Nginx

ステップ 6 : テストと検証

ローカルネットワークからのテスト

最初に、ローカルネットワークの別のマシンからアクセスをテストしてください:

# Remplacez par l'IP locale de votre machine Ubuntu
curl http://192.168.1.100:8080

外部からのテスト

今、インターネットから公開 IP アドレスを使用してテストしてください:

# Remplacez par votre IP publique
curl http://VOTRE_IP_PUBLIQUE:8080

また、オンラインツールを使用することもできます:

ベストプラクティスとセキュリティ

基本的なセキュリティ

# Configurer fail2ban pour protéger contre les attaques par force brute
sudo apt update && sudo apt install fail2ban

# Limiter l'accès avec UFW (exemple : autoriser seulement certaines IP)
sudo ufw allow from 203.0.113.0/24 to any port 8080

接続の監視

# Surveiller les connexions en temps réel
sudo netstat -an | grep :8080

# Logs des connexions (selon votre application)
sudo tail -f /var/log/nginx/access.log  # pour Nginx
sudo journalctl -f -u your-service      # pour un service systemd

リバースプロキシの使用

セキュリティと柔軟性を向上させるため、Nginxなどのリバースプロキシの使用を検討してください:

server {
    listen 80;
    server_name votre-domaine.com;

    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

ポートフォワーディングの代替案

クラウドソリューション

  • ngrok一時的なセキュアトンネル

  • Cloudflareトンネル: 無料で安全なソリューション

  • serveo.net: シンプルなSSHトンネル

# Exemple avec ngrok
ngrok http 8080

# Exemple avec serveo
ssh -R 80:localhost:8080 serveo.net

VPSとリバースプロキシ

プロフェッショナルな使用の場合、VPN経由でローカルインフラストラクチャへ向けるリバースプロキシを備えたVPSの使用を検討してください。

トラブルシューティング

よくある問題

問題 解決策

外部からアクセスできないサービス

ポートフォワーディングの設定を確認し、サービスが 0.0.0.0 でリッスンしていることを確認してください。

接続が拒否されました

サービスが起動していないか、127.0.0.1のみでリッスンしています

接続タイムアウト

ファイアウォール(ボックスまたはUbuntu)の問題またはポート転送の設定ミス

パブリックIPアドレスは定期的に変更されます

動的なDNS(DynDNS、No-IPなど)を設定してください

ネットワークデバッグ

# Tester la connectivité locale
telnet localhost 8080

# Tester depuis une autre machine du réseau
telnet 192.168.1.100 8080

# Vérifier les routes réseau
ip route show

# Analyser le trafic réseau
sudo tcpdump -i any port 8080

結論

ローカルサービスをインターネットに公開するには、ポートフォワーディング、セキュリティ、監視の注意深い設定が必要です。このアプローチは開発や個人プロジェクトに最適ですが、本番環境ではより堅牢な代替手段(VPS、CDN、クラウドサービス)を検討してください。

重要なことは常に安全を心に留めておくことです:強力なパスワードを使用し、定期的にシステムを更新し、公開されているサービスへのアクセスを監視してください。

お気軽に、コメントでご経験やご質問を共有してください!

関連記事