Raspberry Pi 2で遊ぶ:UPnPでポート開け

この記事は「Raspberry Pi記事まとめ」に集約しています。

サーバとして外部公開するとき、通常だとルータのポートマッピングとポートフォワードの設定をする必要がありました。 設定する度にルータが再起動しないといけないので、QNAPを触っていたときに見つけたUPnPをLinuxで使えるか調べたところ、どうやらいけそうなことがわかりました。

UPnP(Universal Plug and Play)は、開けたいポートをルータに通知し、そのデバイスに対してのみポートを開けてくれる機能です。 QNAPのNASでルータ設定なしでWeb管理画面の外部アクセスをするときや、Skypeなどでも使用されています。

参考サイト

miniupnpcのインストール

Linux用のUPnPには、miniupnpcというパッケージがあります。

$ sudo apt-get install miniupnpc 

UPnP一覧

とにかくポートが空いている一覧ではなく、UPnPを用いて空いているポート一覧が表示されます。

$ sudo upnpc -l 

ポート空け(ポートマッピング)の追加

試しに8082ポートを空けてみます。

$ sudo upnpc -a 192.168.24.199 8082 8082 tcp

(省略) 
Found valid IGD : http://192.168.24.1:2869/UD/?1 
Local LAN ip address : 192.168.24.199 
ExternalIPAddress = グローバルIP 
InternalIP:Port = 192.168.24.199:8082 
external グローバルIP:8082 TCP is redirected to internal 
192.168.24.199:8082 (duration=0) 

競合しているポートがあるとちゃんと警告してくれます。

AddPortMapping(8081, 8081, 192.168.24.199) failed with code 718 (ConflictInMappingEntry) 
InternalIP:Port = 使用しているPCのIPアドレス:8081 

UPnPは2869ポートを使用してるみたいですね。

本当に空いてるか確認

ポートチェック【外部からポート開放確認】」のサイトから外部ポートチェックができます。 しかし、ポートを使用するアプリケーションが起動していないと「アクセスできませんでした」で終わるので、仮にmjpg-streamerを8082ポートで起動しておきます。

Pi NoIRを用いたmjpg-streamerはこちらから:Raspberry Pi 2で遊ぶ:Pi NoIR実験

$ ./mjpg_streamer -i "./input_raspicam.so" -o "./output_http.so -w ./www -p 8082” 

ポートチェックのサイトに行き、以下の項目を入力。

  1. ホスト名(FQDN) または グローバルIPアドレス:グローバルIPアドレス
  2. チェックポート番号:8082
  3. 「無料でご利用いただけますが「ご注意・制約事項」を確認下さい」にチェック
  4. 「Portチェック実行」をクリック

問題がなければ「アクセスできました」とメッセージが出ます。同時にケータイなどのブラウザから「http://グローバルIP:8082」でアクセスすればmjpg-streamerの画面が出るはずです。ローカル内では表示できません。

ポートマッピングの削除

実験は成功したので、空けたポートを閉じておきます。

$ sudo upnpc -d 8082 tcp 

(省略) Found valid IGD : http://192.168.24.1:2869/UD/?1 
Local LAN ip address : 192.168.24.199 
UPNP_DeletePortMapping() returned : 0 

「sudo upnpc -l」でちゃんと消えてるか確認しておきましょう。

うまく行ったので、ルータ側でサーバ用に残してたポートフォワードとポートマッピングは消してしまおうと思います。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中