Kategorie | Linux, Serwer

  

UPnP na Linuxie

Opublikowano 01 grudnia 2012 przez Franek

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

  

4 Comments For This Post

  1. glewik Says:

    Hej.

    Mam prośbę a zarazem pomysł na nowy wpis do bloga.

    Jakiś czas temu musiałem na szybko przerzucić bardzo dużo danych z jednego kompa na drugi. Na dwóch komputerach zainstalowane były systemy z rodziny GNU/Linux.

    Z szafki wygrzebałem stary dobry krosowany kabel. Ładnych kilka lat temu na systemach M$ nie raz korzystałem z tego typu kabli i wszystko odbywało się szybko i bez komplikacji (działo się to min. 6 lat temu wiec już nawet nie pamiętam jak to się robiło, z tego co mnie pamięć nie myli wystarczyło gdzieś w konfiguracji wpisać taką sama nazwę sieci lokalnej i tyle).

    Jak już wcześniej pisałem miało to być na szybko, wujek Google co prawda wypluł mi niejeden wynik który powinien rozwiązać moje problemy ale żaden z podanych sposobów nie działał. Nawet jeśli komputery się widziały to nie dało się kopiować plików, z różnych powodów. Braku czasu i już zszargane nerwy zmusiły mnie do obdzwonienia znajomych, pożyczyłem dysk na USB i sprawę załatwiłem inaczej. Jednak nadal nie wiem jak skutecznie i łatwo połączyć komputery na którym są zainstalowane Linux y kablem krosowanym.

    Więc może tak by napisać artykuł o takich połączeniach?

  2. eRIZ Says:

    No nie przesadzaj, kabel skrosowany, to tylko kabel fizyczny. Logicznie wszystko działa tak, jakbyś podłączał komputery do zwykłego switcha.

    Jedynie DHCP rzadko kiedy będzie dostępne, to wtedy trzeba ręcznie adresy podać, ale różnic w komunikacji między magistralą a kablem skrosowanym w zasadzie nie ma.

  3. Franek Says:

    Wszystko ogranicza się do skonfigurowania adresów IP i maski, jest to łatwe bo można nawet wyklikać sobie w NM. Nie należy też zapomnieć o jakiejś usłudze zapewniającej możliwość kopiowania plików, SSH, Samba, FTP. Wszystko jedno.

    Kabel zwykły służy do połączenia komp <> router, kabel skrosowany do łączenia komp <> komp. Przy czym należy pamiętać, że nowoczesne karty sieciowe radzą sobie z każdym kablem i wykrywają czy jest zwykły czy krosowany.

  4. gość Says:

    u mnie upnpc niedziała wywala bląd " No IGD UPnP Device found on the network ! "

Leave a Reply

Polityka komentarzy

     
     
Green Dog Says

MiniBlog