UPnP jest protokołem umożliwiającym połączenie bezpośrednie między dwoma komputerami, lub innymi urządzeniami działającymi w sieci. UPnP jest powszechnie stosowane i używane, to właśnie dzięki niemu różne aplikacje na przykład Skype czy klienci BitTorrent potrafią “same” przekierować potrzebne im porty na routerze.
UPnP jest bardzo przydatny, ponieważ w znaczący sposób minimalizuje on konieczność ręcznej konfiguracji komputera i zainstalowanego na nim oprogramowania do pracy w sieci. Urządzenia i komputery które obsługują UPnP automatycznie konfigurują połączenia sieciowe. Dzięki temu kompatybilne z UPnP aplikacje nie wymagają dodatkowej konfiguracji zapory sieciowej, ręcznego przekierowywania portów na routerze.
Oczywiście Linux bardzo dobrze radzi sobie z obsługą UPnP zarówno po stronie klienta, jak i działając jako serwer-router.
Klient
Jedną z aplikacji klienckich dostępnych na Linuxa jest upnpc który jest częścią pakietu miniupnpc. Sama aplikacja jest bardzo mała i dostępna zapewne w repozytoriach wszystkich dystrybucji, więc jej instalacja w Debianach i Ubuntach jest bardzo prosta i sprowadza się do zwyczajowego odpalonego z roota polecenia:
apt-get install miniupnpc
Po instalacji można już rozpocząć pracę z programem wydając w terminalu polecenie upnpc z odpowiednimi parametrami.
Lista urządzeń UPnP dostępnych w sieci:
$ upnpc -e
List of UPNP devices found on the network :
desc: http://192.168.220.1:1080/desc.xml
st: urn:schemas-upnp-org:device:InternetGatewayDevice:1
Found valid IGD : http://192.168.220.1:1080/upnp/control3
Local LAN ip address : 192.168.220.201
Lista aktualnych przekierowań portów:
$ upnpc -l
List of UPNP devices found on the network :
desc: http://192.168.220.1:1080/desc.xml
st: urn:schemas-upnp-org:device:InternetGatewayDevice:1
Found valid IGD : http://192.168.220.1:1080/upnp/control3
Local LAN ip address : 192.168.220.201
Connection Type : IP_Routed
Status : Connected, uptime=2019873s, LastConnectionError : ERROR_NONE
Time started : Thu Nov 8 09:06:12 2012
MaxBitRateDown : 30514 bps MaxBitRateUp 5000000 bps
ExternalIPAddress = 80.55.41.122
0 UDP 51413->192.168.220.201:51413 'Transmission at 51413' ''
1 TCP 80->192.168.220.50:80 'libminiupnpc' ''
2 UDP 53->192.168.220.50:53 'libminiupnpc' ''
3 TCP 65058->192.168.220.227:65058 'Skype TCP at 192.168.220.227:65058 (2147)' ''
4 UDP 65060->192.168.220.217:65060 'Teredo' ''
5 UDP 61824->192.168.220.217:61824 'Teredo' ''
6 TCP 22->192.168.220.201:22 'libminiupnpc' ''
GetGenericPortMappingEntry() returned 713 (SpecifiedArrayIndexInvalid)
Przekierowanie portu 22 (do wyboru oczywiście TCP lub UDP) na lokalne IP komputera z którego wydawane jest polecenie:
upnpc -r 22 tcp
Wydanie polecenia bez parametrów wyrzuci wszystkie dostępne opcje.
Za pomocą upnpc można również sprawdzić zewnętrzne IP:
upnpc -l | grep ExternalIPAddress | sed 's/^.* = //'
Serwer – router
Jeśli w swojej sieci jako router używasz serwera działającego pod kontrolą Linuxa warto wyposażyć go w usługę zapewniającą UPnP. Instalacja i konfiguracja jest bardzo prosta:
apt-get install linux-igd
Po instalacji należy edytować plik konfiguracyjny, szczególnie te trzy opcje:
nano /etc/default/linux-igd
ALLOW_MULTICAST=yes
# urządzenie LAN
INTERNAL_INTERFACE="XXXX"
# urządzenie WAN
EXTERNAL_INTERFACE="XXX"
Teraz można wystartować już nową usługę:
/etc/init.d/linux-igd
Na koniec należy jeszcze skonfigurować zaporę sieciową wrzucając do niej dwie nowe reguły:
iptables -N UPNP
iptables -A FORWARD -j UPNP