しかし私は、各受信したパケットのためのfork()
を使用すると、少し奇妙であるので、代わりにsocat
のstone
を使用することを考慮し、socat
が犯人だとは思いません。外部IPアドレスは、おそらく動作しませんなぜ今
stone -n -d -d -d -d 192.168.0.40:37000/udp 1935/udp
:ストーンは、この(と思う)のようなあなたのケースで呼ばれています。悲しいことに、あなたのテキストはあなたの設定についてあまり話していないので、推測する必要があります:
UDPパケットを転送できるかどうかは、ファイアウォール/モデム/ルーターによって異なります。通常、内部からUDP要求を開始すると、ルータはNAT接続を開きます。これは、パケットの送信元IPだけでなく送信元ポートも変更することが多いことを意味します。 UDPはコネクションレスなので、UDP NAT接続は、通常、5分後にデータが転送されないと非常に迅速にタイムアウトします。
逆方向(インターネットからイントラネットへ)でUDPを開く必要がある場合、ルータは通常、どこから転送するのかわからないため、インターネットから入ってくるすべてのUDPパケットを破棄します。ルータは単に任意のマシンを選択することはできませんが、これはセキュリティホールになります。したがって、 "ルータの背後にあるマシンに接続するインターネット"では、ルータのUDPポートを開いて正しいマシンに転送する必要があります。その場合、内部マシンから送信されたパケットは送信元IPを取得し、送信元ポートは書き換えられます。インターネット上のマシンは、ルータからのパケットを常に表示します。ルータの追加ルールを除いて、このケースは送信ケースと同じです。
NAT(対称など)を作る方法と、ルータのポート(Config、UPnPなど)を開く方法に関するいくつかの方法があるので、いくつかの穴を突き刺す方法常にハードウェアの能力に依存します。これはすべてここで答えることはできません。
としてもうまくいかないかもしれないものをいくつかの他のアイデア:
一部のUDPプロトコルは、ペイロード内のIPアドレスを符号化します。その場合、パケットを転送するだけでは十分ではありません。すべてのマシンが一緒に会話できるように交換されたIPアドレスを修正するには、ペイロードも変更する必要があります。このようなUDPプロトコルは、2つの任意のマシンが直接対話することは決してできないので、どちらの場合でもひどく設計されています。
ISPによっては、任意の理由で特定のUDPポートをフィルタリングするものがあります。インターネットからDSLへの通話に問題がある場合は、別のISPに直接接続された2台の外部機器を試してみてください。これらがUDP経由で話すことができる場合は、イントラネットから外部のマシンの1つに話すことができるかどうかを確認します。これはまだ動作していれば、これは逆方向にも話すことができるということを意味します。通常、UDPは有向プロトコルではありませんが、NATが関与する場合は何らかの形で通信ポートが開いたままであることを確認する必要があります。
モバイルインターネットプランでは、P2Pをサポートしていないことがよくあります。これはおそらく、これらの計画はインターネットをまったくサポートしていないことを意味します.IPは定義上、P2Pです。 ISPが「P2Pなし」と本当に言いたいのは(私の推測)、インターネットからモバイルデバイスへの接続はサポートされていないということです。その場合、常にモバイルデバイスから接続を開始する必要があります。プッシュメソッド(インターネットからモバイル)を使用できないため、モバイルデバイスは常にインターネットからデータを取得する必要があります。一部のブロードバンド/ケーブルプロバイダーも同じことをする可能性があります。通常、あなたのISPが10.x.y.zの範囲のIPをあなたに手渡すなら、これを見ることができます。
接続作業を取得するためにどのように別のトリックがあるかもしれません:
いくつかのIPv6を得るためにあなたのISPを確認して下さい。おそらく6to4を使用します。 IPv6を使用するとNATが完全になくなり、ローカルLANはIPv6上でインターネットに直接接続します。 IPv6インターフェイス上のイントラネットホスト上のファイアウォール/ iptablesを有効にしてください。そうしないと、非常に迅速に侵入者が表示されることがあります。
HTH