Modemi, ki jih dobite pri nekaterih ponudnikih interneta niso samo modemi, pač pa imajo kar precej dodatnih funkcij, v nekaterih primerih celo več kot nizkocenovni domači usmerjevalniki. Iz tega razloga je v večini primerov kupovanje dodatnega usmerjevalnika povsem odveč.
Če pa ste se iz določenih razlogov vendarle odločili, da želite uporabljati svoj usmerjevalnik, boste kmalu ugotovili, da naprave, ki so nanj priključene, lahko uporabljajo samo internet ali pa samo video signal. Na usmerjevalnik sicer lahko z dodatnim kablom povežete tudi VIDEO port (VLAN), vendar v večini primerov modem "ugotovi", da je prišlo do zanke in "zamrzne". Če pa že deluje, ste s tem obšli požarni zid ter spustili video signal v multicast obliki tudi na brezžični del omrežja. Iz več različnih razlogov je video signal v multicast obliki neprimeren za brezžični prenos, kar se kaže kot kockanje slike ali pa celo prekinjanje brezžične povezave.
Če ste naleteli na zgoraj opisane težave, potem je ena od rešitev namestitev OpenWrt.
Prednosti namestitve OpenWrt na usmerjevalnik:
Poleg zgoraj opisanega, lahko na OpenWrt usmerjevalnik namestite celo vrsto dodatnih programov. Če imate nanj povezan tudi trdi disk, je zelo uporaben program miniDLNA, s katerim lahko delite multimedijske datoteke napravam kot je npr. SiolBox. Namestite lahko tudi http, ftp, samba strežnike. Video signal lahko s programom udpxy spremenite v unicast obliko in tako na računalniku uporabljate internet in gledate IPTV tudi preko brezžičnega omrežja (samo z 1 brezžično kartico). Konfigurirate lahko tudi QOS (Quality Of Service), ki pa zaradi preglednosti v tem vodiču ni opisan, je pa zelo pomembno da to uredite, če znotraj lokalnega omrežja uporabljate tudi ip telefonijo.
Predstavil bom vse nastavitve, ki so potrebne, da naprave priklopljene na usmerjevalnik lahko dostopajo do interneta in TV signala istočasno. Pri tem se bom držal načela, da bom v primerih kjer je možno za dosego istega cilja uporabiti tako 2. kot tudi 3. stopnjo po OSI modelu, uporabil slednjo. Za zaščito omrežja bo zato dovolj uporaba požarnega zidu iptables brez uporabe ebtables.
Če na brezžičnem omrežju uporabljamo samo http kliente, lahko za prenos signala v http obliki uporabimo udpxy posrednik.Ker je za združenje IPTV omrežja in Interneta uporabljeno multicast usmerjanje, lahko notranje omrežje popolnoma zaščitimo pred morebitnimi vdori iz IPTV omrežja.
Novejša linux jedra (>2.6.34) podpirajo IGMP Snooping, zato pri novejših OpenWrt različicah brezžičnega omrežja ni več potrebno ločevati. Paziti pa moramo, da brezžični klienti uporabljajo samo udpxy posrednik.
config 'interface' 'loopback' option 'ifname' 'lo' option 'proto' 'static' option 'ipaddr' '127.0.0.1' option 'netmask' '255.0.0.0' config 'interface' 'lan' option 'ifname' 'eth0.1' option 'type' 'bridge' option 'proto' 'static' option 'ipaddr' '192.168.2.1' option 'netmask' '255.255.255.0' config 'interface' 'tv' option 'ifname' 'eth0.3' option 'proto' 'static' option 'ipaddr' '10.XX.XX.XX' option 'netmask' '255.255.255.0' option 'macaddr' 'XX:XX:XX:XX:XX:YY' config 'interface' 'wireless' option 'ifname' 'wlan0' option 'proto' 'static' option 'ipaddr' '192.168.4.1' option 'netmask' '255.255.255.0' config 'interface' 'wana' option 'auto' '1' option 'ifname' 'eth0.2' option 'proto' 'pppoe' option 'username' 'username' option 'password' 'xxxxx' option 'peerdns' '0' option 'keepalive' '12' option 'persist' '1' option 'defaultroute' '1' option 'dns' '193.189.160.13 193.189.160.23' config 'interface' 'modemn' option 'ifname' 'eth0.2' option 'proto' 'static' option 'ipaddr' '192.168.1.2' option 'netmask' '255.255.255.0' config 'switch' option 'name' 'rtl8366rb' option 'reset' '1' option 'enable_vlan' '1' # Če uporabljate "vlan trunking", dodajte še port 4 config 'switch_vlan' option 'device' 'rtl8366rb' option 'vlan' '1' option 'ports' '1 2 3 5t' config 'switch_vlan' option 'device' 'rtl8366rb' option 'vlan' '2' option 'ports' '0 5t' # Če uporabljate "vlan trunking" odstranite to nastavitev, trunking pa nastavite z init skriptom (glej vlan_reconf skript) config 'switch_vlan' option 'device' 'rtl8366rb' option 'vlan' '3' option 'ports' '4 5t' config 'interface' 'wan' option 'ifname' ' ' option 'proto' 'none'
Stikalo (eth0) je razdeljeno na 3 VLANe, kar si lahko predstavljamo kot računalnik s 3 (navideznimi) mrežnimi karticami. Wana je PPPoE seja vzpostavljeni preko eth0.2, tej mrežni kartici je dodeljen tudi statični ip 192.168.1.2 z namenom, da lahko iz vseh računalnikov znotraj omrežja dostopamo do nastavitev modema IPTV ponudnika (192.168.1.1). Za TV VLAN je potrebno spremeniti MAC naslov, saj drugače lahko pride do zanke !
config 'wifi-device' 'radio0' option 'type' 'mac80211' option 'macaddr' 'XX:XX:XX:XX:XX:XX' option 'hwmode' '11ng' option 'htmode' 'HT20' list 'ht_capab' 'SHORT-GI-40' list 'ht_capab' 'DSSS_CCK-40' option 'channel' '9' option 'txpower' '20' option 'disabled' '0' config 'wifi-iface' option 'device' 'radio0' option 'network' 'wireless' option 'mode' 'ap' option 'ssid' 'MOJSSID' option 'encryption' 'psk2' option 'key' 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' option 'hidden' '1'
quickleave ##------------------------------------------------------ ## Configuration for eth0 (Upstream Interface) ##------------------------------------------------------ phyint eth0.3 upstream ratelimit 0 threshold 1 # altnet 192.168.1.0/24 altnet 89.143.0.0/16 altnet 95.176.246.0/24 ##------------------------------------------------------ ## Configuration for lan (Downstream Interface) ##------------------------------------------------------ phyint br-lan downstream ratelimit 0 threshold 1 #phyint wlan0 downstream ratelimit 0 threshold 1 ##------------------------------------------------------ ## Configuration for eth2 (Disabled Interface) ##------------------------------------------------------ phyint eth0.2 disabled phyint wlan0 disabled phyint ppp0 disabled
Kot je bilo omenjeno, je v tem vodiču brezžično omrežje postavljeno v drug ip rang z namenom, da multicast promet, namenjenem ožičenim napravam, ne poplavlja brezžičnega omrežja. Novejše Openwrt različice podpirajo IGMP snooping, zato to ni več potrebno. IGMP snooping funkcija omogoča, da se multicast promet kopira samo na porte usmerjevalnika od koder je prišla IGMP zahteva (preklop na določen TV kanal). Če pa IGMP zahteva pride iz brezžičnega dela omrežja, seveda funkcija IGMP snoopinga ne reši ničesar in pojavijo se enaki problemi kot so opisani v uvodu.
Ker imajo računalniki statične ip naslove jih lahko poimenujemo. To nam bo tudi omogočilo lažji dostop do datotek med računalniki v 192.168.2.0/24 in 192.168.4.0/24 omrežju.
/etc/hosts :127.0.0.1 localhost. 192.168.2.2 jalovec 192.168.2.4 triglav 192.168.2.8 mangart 192.168.4.10 laptop
Ker bomo vsem računalnikom vpisali DNS naslov OpenWrt usmerjevalnika, moramo urediti še
/etc/resolv.conf :search lan nameserver 127.0.0.1Računalnik z naslovom 192.168.2.4 bo tako dostopen na naslovu triglav.lan. Npr. ping triglav.lan ali pa v Windows raziskovalcu: \\triglav.lan\.
/etc/init.d/firewall disablePri pisanju pravil si pomagajte s to shemo.
#!/bin/sh /etc/rc.common START=39 # nastavitve IPTABLES="/usr/sbin/iptables" LO_IFACE="lo" LO_IP="127.0.0.1" LAN_IFACE="br-lan" LAN_IP="192.168.2.1" LAN_RANGE="192.168.2.0/24" WIRELESS_IFACE="wlan0" WIRELESS_IP="192.168.4.1" WIRELESS_RANGE="192.168.4.0/24" MODEMN_IFACE="eth0.2" MODEMN_IP="192.168.1.2" MODEMN_STATUS="192.168.1.1" TV_IFACE="eth0.3" PPPOE_IFACE0="ppp0" fw_start(){ # dodatne nastavitve # vklopimo forwarding /bin/echo 1 > /proc/sys/net/ipv4/ip_forward # onemogocimo ICMP preusmeritve echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects # dinamicen ip echo 1 > /proc/sys/net/ipv4/ip_dynaddr # Onemogocimo rp filter, da udpxy lahko sprejme multicast pakete #echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter # 1. FILTER # Nastavitev pravil # glavna pravila $IPTABLES -P INPUT DROP $IPTABLES -P OUTPUT DROP $IPTABLES -P FORWARD DROP # verige $IPTABLES -N bad_tcp_packets $IPTABLES -N allowed $IPTABLES -N tcp_packets_tv $IPTABLES -N tcp_packets_internet $IPTABLES -N tcp_packets_modemn $IPTABLES -N udp_packets_tv $IPTABLES -N udp_packets_internet $IPTABLES -N icmp_packets $IPTABLES -N igmp_packets # nepravilni tcp paketi $IPTABLES -A bad_tcp_packets -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j REJECT --reject-with tcp-reset $IPTABLES -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j DROP # dovoljeni paketi $IPTABLES -A allowed -p TCP --syn -j ACCEPT $IPTABLES -A allowed -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT $IPTABLES -A allowed -p TCP -j DROP ########### # tcp pravila ########### $IPTABLES -A tcp_packets_modemn -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT # Tukaj lahko dodate pravila se za tcp_packets_internet ########### # udp pravila ########### # če uporabljate udpxy posrednik, odkomentirajte naslednjo vrstico: #$IPTABLES -A udp_packets_tv -p UDP -s 0/0 -d 224.0.0.0/4 -j ACCEPT $IPTABLES -A udp_packets_tv -p UDP -d 255.255.255.255 --destination-port 67:68 -j DROP ############ # icmp pravila ############ #$IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j ACCEPT $IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT ############ # igmp pravila ############ $IPTABLES -A igmp_packets -p IGMP -j ACCEPT # INPUT VERIGA $IPTABLES -A INPUT -p tcp -j bad_tcp_packets #localhost in lan/wireless $IPTABLES -A INPUT -p ALL -i $LO_IFACE -j ACCEPT $IPTABLES -A INPUT -p ALL -i $LAN_IFACE -s $LAN_RANGE -j ACCEPT $IPTABLES -A INPUT -p ALL -i $WIRELESS_IFACE -s $WIRELESS_RANGE -j ACCEPT $IPTABLES -A INPUT -p UDP -i $LAN_IFACE --dport 67:69 -j ACCEPT $IPTABLES -A INPUT -p UDP -i $WIRELESS_IFACE --dport 67:69 -j ACCEPT #tv $IPTABLES -A INPUT -p TCP -i $TV_IFACE -j tcp_packets_tv $IPTABLES -A INPUT -p UDP -i $TV_IFACE -j udp_packets_tv $IPTABLES -A INPUT -p ICMP -i $TV_IFACE -j icmp_packets $IPTABLES -A INPUT -p IGMP -i $TV_IFACE -j igmp_packets $IPTABLES -A INPUT -p UDP -i $TV_IFACE --dport 67:69 -j ACCEPT #modem network $IPTABLES -A INPUT -p TCP -i $MODEMN_IFACE -j tcp_packets_modemn #internet (pppoe) wana $IPTABLES -A INPUT -p ALL -i $PPPOE_IFACE0 -m state --state ESTABLISHED,RELATED -j ACCEPT $IPTABLES -A INPUT -p TCP -i $PPPOE_IFACE0 -j tcp_packets_internet $IPTABLES -A INPUT -p UDP -i $PPPOE_IFACE0 -j udp_packets_internet $IPTABLES -A INPUT -p ICMP -i $PPPOE_IFACE0 -j icmp_packets # FORWARD VERIGA $IPTABLES -A FORWARD -p TCP -j bad_tcp_packets # samo ce so iz LANa $IPTABLES -A FORWARD -i $LAN_IFACE -j ACCEPT $IPTABLES -A FORWARD -i $WIRELESS_IFACE -j ACCEPT # multicast usmerjanje !!! $IPTABLES -A FORWARD -i $TV_IFACE -p UDP -s 0/0 -d 224.0.0.0/4 -j ACCEPT # tukaj vpišite še dovoljenja za pakete iz pppoe za katere je bil izvršen DNAT (port forwarding) $IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT # OUTPUT VERIGA $IPTABLES -A OUTPUT -p TCP -j bad_tcp_packets $IPTABLES -A OUTPUT -p ALL -s $LO_IP -j ACCEPT $IPTABLES -A OUTPUT -p ALL -s $LAN_IP -j ACCEPT $IPTABLES -A OUTPUT -p ALL -s $WIRELESS_IP -j ACCEPT $IPTABLES -A OUTPUT -p igmp -o $TV_IFACE -j ACCEPT $IPTABLES -A OUTPUT -p ALL -o $TV_IFACE -j DROP $IPTABLES -A OUTPUT -p ALL -o $MODEMN_IFACE -d $MODEMN_STATUS -j ACCEPT $IPTABLES -A OUTPUT -p ALL -o $PPPOE_IFACE0 -j ACCEPT # 2. NAT # PREROUTING VERIGA # tukaj vpišite "port forwarding" # POSTROUTING VERIGA # Poskrbimo, da dobimo pakete iz http strežnika (192.168.1.1:80) Iskratelovega modema. $IPTABLES -t nat -A POSTROUTING -o $MODEMN_IFACE -s $LAN_RANGE -j SNAT --to-source $MODEMN_IP #masquerading $IPTABLES -t nat -A POSTROUTING -o $PPPOE_IFACE0 -j MASQUERADE # 3. MANGLE # PREROUTING VERIGA # # POSTROUTING VERIGA # Poskrbimo za večje pakete... $IPTABLES -t mangle -A POSTROUTING -p tcp --tcp-flags SYN,RST SYN -o $PPPOE_IFACE0 -j TCPMSS --clamp-mss-to-pmtu # OUTPUT VERIGA # } fw_stop () { $IPTABLES -F $IPTABLES -t nat -F $IPTABLES -t mangle -F $IPTABLES -X $IPTABLES -t nat -X $IPTABLES -t mangle -X $IPTABLES -P INPUT DROP $IPTABLES -P FORWARD DROP $IPTABLES -P OUTPUT DROP } fw_clear () { $IPTABLES -F $IPTABLES -t nat -F $IPTABLES -t mangle -F $IPTABLES -X $IPTABLES -t nat -X $IPTABLES -t mangle -X $IPTABLES -P INPUT ACCEPT $IPTABLES -P FORWARD ACCEPT $IPTABLES -P OUTPUT ACCEPT } start(){ echo -n "Zaganjam pozarni zid..." fw_stop fw_start echo "Pozarni zid je zagnan..." } stop(){ echo -n "Ustavljam pozarni zid (prehod paketov popolnoma onemogocen)..." fw_stop echo "Pozarni zid je ustavljen..." } restart(){ fw_stop fw_start }Šele ko ste prepričani, da vse deluje tako kot mora, omogočite ta skript:
/etc/init.d/firewall.manual enable
#!/bin/sh /etc/rc.common # Copyright (C) 2008 OpenWrt.org START=98 start() { swconfig dev rtl8366rb vlan 3999 set ports '0t 5t' swconfig dev rtl8366rb vlan 2 set ports '0 5t' }Potrebno pa je omogočiti tudi podporo za 4k VLAN-e.
config 'switch' option 'name' 'rtl8366rb' option 'reset' '1' option 'enable_vlan' '1' option 'enable_vlan4k' '1'
Če ste brezžične kliente postavili v drugo omrežje, je potrebno za deljenje tiskalnikov in datotek med brezžičnim (192.168.4.0/24) in žičnim delom omrežja(192.168.2.0/24) ustrezno konfigurirati požarni zid operacijskega sistema Windows.
Le-ta namreč dovoljuje dostop do datotek in tiskalnikov le klientom znotraj istega omrežja.
Če hočemo, da laptop(192.168.4.10) na 1. sliki dostopa do datotek v skupni rabi računalnika triglav(192.168.2.4), moramo požarni zid računalnika triglav nastaviti takole (Windows 7) :
Video na zahtevo in posnetki oddaj niso dostopni preko javnega dela interneta, pač pa le iz IPTV omrežja, ki je dostopen samo naročnikom.
Pri povezavi kot na sliki 2 mora biti na servisnih straneh obkljukan "posredni priklop".
a) Kako pridobiti informacije o omenjenem omrežju je opisano že v navodilih za Sagem vmesnik, ki jih lahko najdete na teh straneh.
Če ste potrpežljivi, lahko do podatkov o omrežju pridete tudi s pomočjo programa DHCPDiscoverer, ki bo morda v kakšni uri ujel DHCP Offer Broadcast paket ali dva.
Poleg parametrov omenjenih v navodilih za Sagem, si moramo zapisati še ip naslov privatnega DNS strežnika. NetBox se namreč ob poizkusu predvajanja posnete oddaje hoče povezati na naslednje naslove: epg.siol.tv, dms.siol.tv, stream.siol.tv ali cup-stream.siol.tv ali cup-split.siol.tv. Vse omenjene poddomene domene siol.tv, razen xxxstream.siol.tv oz. cup-split.siol.tv, so vpisane tudi v javni DNS strežnik, kar nam pove, da za razliko od epg podatkov, video pakete dobimo lahko le iz privatnega omrežja. Ko imamo ip naslov DNS strežnika, ga lahko dodamo k obema javnima v config/network skriptu (meni to iz nekega razloga ni delovalo, čeprav je tcpdump pokazal, da privatni DNS strežnik odgovori z ustreznim ip naslovom) ali pa ip in ime domene dodamo kar v /etc/hosts in upamo, da se ip ne bo prepogosto spreminjal:
10.253.7.XXX stream.siol.tv 10.253.7.XXX cup-stream.siol.tv 10.253.7.XXX cup-split.siol.tv
Omenjeni ip naslov nam že nakazuje, v katerem ip rangu se nahajajo rtp/rtsp strežniki, zato lahko usmerjanje nastavimo tako, da bodo šel ves promet za 10.253.0.0/16 (maska je zgolj predpostavka) preko privzetega prehoda privatnega omrežja.
Najprej preverimo, da ip naslov in maska (navidezne) mrežne kartice ustrezata parametrom, ki jih dodeli Siolov strežnik. Če nimate Sagema, začasno nastavite MAC naslov mrežne kartice enakemu NetBoxu in z Wiresharkom prisluškujte DHCP paketom po postopku opisanem v navodilih za Sagem.
b) Popravimo filtriranje v OUTPUT verigi npr.:
$IPTABLES -A OUTPUT -p tcp -o $TV_IFACE --dport 554 -d 10.253.0.0/16 -j ACCEPT
c) Ne pozabimo še na SNAT, saj bo drugače RTSP strežnik prejel pakete z izvornimi ip-ji 192.168.2.0/24 in ne bo "vedel" kam poslati odgovore.
$IPTABLES -t nat -A POSTROUTING -o $TV_IFACE -j MASQUERADE
d) SNAT pa nam povzroči težavo, da usmerjevalnik ne bo vedel kam naj posreduje prejete video pakete iz VOD strežnika, ki ni nujno enak rtsp strežniku. Ta problem naj bi rešil moduli:
$IPTABLES -A PREROUTING -t nat -p udp -i $TV_IFACE --sport 10000 --dport 8254 -j DNAT --to 192.168.2.60 $IPTABLES -A PREROUTING -t nat -p udp -i $TV_IFACE --sport 10000 --dport 10110:10120 -j DNAT --to 192.168.2.70 $IPTABLES -A PREROUTING -t nat -p udp -i $TV_IFACE --sport 10000 --dport 10210:10220 -j DNAT --to 192.168.2.40192.168.2.60 je naslov NetBoxa, ostala dva sta naslova dveh računalnikov.
e) Omogočimo posredovanje rtp paketov. Port 10000 je izvorni port VOD(video on demand) strežnika.
$IPTABLES -A FORWARD -i $TV_IFACE -p UDP -s 10.253.0.0/16 --sport 10000 -j ACCEPT
f) Sedaj ostane samo še nastavitev usmerjanja.
*
ip route add 10.253.0.0/16 via 10.XX.XX.1 dev $TV_IFACE$TV_IFACE = mrežna kartica za TV npr.: eth0.3999 , 10.XX.XX.1 = privzeti prehod privatnega omrežja.
*Tukaj je predpostavljeno, da za usmerjanje uporabljate ip2 paket.
Namesto main tabele, lahko uporabite novo tabelo(gw2) z nižjo prio številko.
ip route add 10.253.0.0/16 via 10.XX.XX.1 dev eth0.3999 table gw2
/usr/sbin/ip rule add prio 46 table gw2
Še prej moramo seveda v rt_tables dodati še gw2. Isto se da doseči tudi s klasičnim route ukazom.
Ogled oddaj za nazaj na NetBoxu bi sedaj moral delovati. Na računalniku pa v primeru uporabe vlc predvajalnika izberite ustrezen rtsp port klienta ter uporabite Generator rtsp linkov, ki ga lahko najdete tukaj.
Predpogoj za to nastavitev je pravilna konfiguracija usmerjanja za IPTV omrežje ( Siol: 10.X.X.0/22). Postopek je opisan v zgornjem okvirju pod točko f !
V /etc/dnsmasq.conf najprej dodamo id in ip razpon:
dhcp-range=sagem-int,192.168.2.50,192.168.2.60
config vendorclass option vendorclass 'sagem' option networkid 'sagem-int' list dhcp_option '3,192.168.2.1' # Privzeti prehod ( Ip OpenWrt usmerjevalnika. ) list dhcp_option '6,10.253.7.11' # Dns strežnik ( Za pravilno delovanje moramo vpisati dns strežnik IPTV omrežja ) list dhcp_option '72,10.253.3.133' # Web strežnik - Siolov JavaScript vmesnik list dhcp_option '42,193.2.1.87' # Arnesov ntp serverIdentifikator sagem-int lahko spremenite v poljuben id. Ne smete pa spremeniti vendorclass 'sagem' saj se Sagem strežniku identificira z opcijo "Vendor Class:'sagem'". V omenjeni konfiguraciji namreč strežnik dodeli opisane parametre le napravam, ki se identificirajo kot "sagem". Lahko se zgodi (različica backfire), da dhcp strežnik (dhcpmasq) Sagemu, kljub pravilni nastavitvi, ne bo dodelil pravilnega DNS strežnika ali pa jih bo dodelil prav vsem klientom v omrežju. Rešitev zato je vpis statičnih naslovov v /etc/hosts (10.253.3.129 matrix.siol.tv).
Če želite namestiti kakšen drug vmesnik, npr. Simplicity, potem samo spremenite ip web strežnika. Priporočljivo je spremeniti tudi ip dns strežnika !