Coherence DNLA/UPnP フレームワークの一部として、外部ポート (ポート 8080 など) のポート マッピングを作成できる「Puncher」(ファイアウォールに「パンチ」穴を開けます! :o) と呼ばれる Python モジュールの良い例を見ることができます。選択した内部ポートに:
http://coherence.beebits.net/browser/trunk/Puncher/puncher/base.py
Coherence モジュールは、Debian でも python-coherence パッケージとして入手できます。ActiveState Python を使用する場合は、Windows でも同様です。
作成中のものの一部としてこれを自動的に/プログラム的に実行したいと考えているので、上記の
Coherence DNLA/UPnP フレームワーク in Python を紹介しました。
これを 1 回限り手動で行いたい場合は、UPnP ポート マッピングを作成するための優れたコマンドラインおよび GUI ツールがいくつかあります。Mac では、手動の GUI ツールがhttp://www.codingmonkeys.de/portmap/index.htmlで SubEtha Edit の作成者から入手できます。Windows では、 http://deusty.blogspot.com/2008/07/tcmportmapper-for-windows.htmlで手動の GUI ツールを使用できます。
Python で Coherence を試してみることを強くお勧めします。これは楽しいプログラミング体験になる可能性があります。または、ネットワークを使用する多くの異なるプログラムには、ポートを開き、それらをローカル マシンに転送/マップする UPnP モジュールがあります。たとえば、µTorrent には、libtorrent/rtorrent と同様に 1 つがあり、他の多くの場合と同様です。
Python が苦手な場合は、UPnP クライアント実装を備えた次のライブラリ、例、およびツールを参照して、ルーターのポートをプログラムで転送/マップします (これらは C および Perl にあります)。
http://miniupnp.tuxfamily.org/
https://trac.transmissionbt.com/browser/trunk/libtransmission/upnp.c
http://www.howtoforge.com/administrating-your-gateway-device-via-upnp
2 番目のリンクhttps://trac.transmissionbt.com/browser/trunk/libtransmission/upnp.cは、miniupnp ライブラリを使用する一般的な BitTorrent クライアント「Transmission」のコードです (最初のリンク)。
これがあなたの質問に答えたことを願っています。あなたが何をしていても、頑張ってください。
編集: @kaneda: あなたのコメントに応えて、私が正しく理解していれば、あなたは 2 つの NAT の背後にいます。1 つは DSL モデムによって、もう 1 つはワイヤレス ルーターによってです。単純な UPnP はここでは役に立ちません。DSL モデムとルーターの両方でポート マッピングを UPnP できるようにする必要があります (ルーターはおそらく UPnP 要求が WAN ポートを離れることを許可しないため、おそらく不可能です)。 NAT ではなく DSL モデムまたはルーターをブリッジして、1 つの NAT だけの背後にいるようにします。
編集 2: @kaneda: 二重 NAT を回避するもう 1 つの方法は、ルーターを Linux ボックスに置き換え (OpenWRT などを使用するなど)、そこで upnp コードを実行して DSL モデム ポートを転送することです。ルーターの背後にあるホストに miniupnp ベースのコードを追加して、ルーターをさらに開きます。ただし、その時点で、ルーターを制御できるので、静的ポート マッピングを作成し、すべての UPNP プロトコル要求を DSL モデムにパススルーさせることもできます (iptables にそれらのパケットを選択的に転送/NAT で戻すように指示することによって)。これは、この回答の範囲を超えています)。