私はFedora 15とTransmission BTクライアントを使用しています。ファイアウォールが無効になっていないと、トランスポートでポートを開くことはできません。
信頼できるポートに1900を追加するか、iptableルールで追加するための投稿を検索しました-A INPUT -m state --state NEW -m udp -p udp --sport 1900 -j ACCEPT"
。ただし、転送はとにかくポートを開くことができません。
また、Transmissionでテストしましたupnp-inspector
が、信頼できるポートに1900を追加した後、私のupnpルータを検出できますが、検出速度はファイアウォールを無効にするよりも遅いです。
Transmission UPnPをファイアウォールで動作させる方法についてのアイデアはありますか?
答え1
最初に知っておくべきことは、UPnP IGDプロトコルの仕組みです。任意のローカルUDPポートを選択し、ここでよく知られているマルチキャストアドレス239.255.255.250およびUDPポート1900に検索要求を送信します。ルータで実行されているUPnP IGDサーバーは、これらのマルチキャストクエリを受信し、IPアドレスを選択するポートと検索要求が送信されるポートからランダムなユニキャストUDP応答を送信します。ただし、そのような応答はconntrack iptablesモジュールによって送信された要求に関連付けられていないため、受信した応答はiptablesによって削除されます。これがすべてのUDPポートを有効にするか、ファイアウォールを無効にするのが役に立つ理由です。 UDP 応答で UPnP IGD サーバーが見つかると、クライアントは UPnP IGD サーバーとのデフォルト TCP 接続を確立します。したがって、唯一の問題は、このマルチキャスト検索要求に対するUDP応答を受信するためのルールを作成する方法です。
ipsetを介して可能です。私はそれを私の答えに説明しました。https://serverfault.com/a/911286:
$ ipset create upnp hash:ip,port timeout 3
$ iptables -A OUTPUT -d 239.255.255.250/32 -p udp -m udp --dport 1900 -j SET --add-set upnp src,src --exist
$ iptables -A INPUT -p udp -m set --match-set upnp dst,dst -j ACCEPT
IPv6では、UPnPパケットはマルチキャストアドレスff02 :: cまたはff05 :: cに送信されます。したがって、ルールは次のようになります。
$ ipset create upnp6 hash:ip,port timeout 3 family inet6
$ ip6tables -A OUTPUT -d ff02::c/128 -p udp -m udp --dport 1900 -j SET --add-set upnp6 src,src --exist
$ ip6tables -A OUTPUT -d ff05::c/128 -p udp -m udp --dport 1900 -j SET --add-set upnp6 src,src --exist
$ ip6tables -A INPUT -p udp -m set --match-set upnp6 dst,dst -j ACCEPT
一部のUPnPサーバー(すべてではない)は、マルチキャストUDPパケットを介して周知のアドレス/ポートに定期的に(例えば30秒ごとに)自分自身を通知します。これらのマルチキャストパケットを受信するサーバーとクライアントがある場合、iptablesルールは非常に簡単です。
$ iptables -A INPUT -d 239.255.255.250/32 -p udp -m udp --dport 1900 -j ACCEPT
IPv6に対応:
$ ip6tables -A INPUT -d ff02::c/128 -p udp -m udp --dport 1900 -j ACCEPT
$ ip6tables -A INPUT -d ff05::c/128 -p udp -m udp --dport 1900 -j ACCEPT
あなたの質問で上記のiptablesルールに似た内容を説明しましたが、大きな間違いを犯しました。源泉代わりにポート目的地:。 UPnP UDPパケットは、任意の送信元ポートから固定の宛先ポート1900に送信されます。--sport 1900
また、信頼できるポート(おそらく送信元と宛先)にポート1900を追加した後、upnp-inspectorはUPnP IGDルータを検出できますが、ファイアウォールが無効になって速度が遅くなることも説明します。これは、ルータが次の広告パケットを送信している間にupnp-inspectorが待機しているため、定期的な広告について上記したものとまったく同じように機能します。
答え2
ポート範囲を10000から59999まで許可するファイアウォールを無効にするよりも少し安全な方法を見つけました。そして1900を開く必要もありません。