저는 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을 열 필요도 없습니다.