Temat: [HOWTO] IPTV - przykładowa konfiguracja
Cześć!
Dzięki uprzejmości osób z tego forum - z sukcesem skonfigurowałem router ze wspraciem IPTV.
Z tego powodu postanowiłem zebrać w jednym miejscu istotną wiedzę
i podzielić się z Wami moją konfiguracją.
WAŻNE
Zanim przeczytasz poniższy poradnik przeczytaj:
http://wiki.openwrt.org/doc/uci/network/switch
http://wiki.openwrt.org/doc/howto/udp_multicast
Schemat - moje założenia
Od dostawca mam:
Internet - nietagowany (VLAN5, eth0.5, wan)
IPTV - tagowany VLAN1 (VLAN1, eth0.1, wan_iptv)
Managment - tagowany VLAN6 (VLAN6, eth0.6, wan_adm)
Co chciałem osiągnąć:
internet na portach 2,3 i WIFI - dla komputerów
telewizję na porcie 1 (multicast) - dekoder IPTV (SetTopBox)
telewizję na porcie 2,3 i WIFI (tcp) - dla komputerów
wszystko na porcie 4 - dla sąsiada (by na swoim routerze zrobił to samo co ja)
1. poznać VLANy w swojej sieci
- ja użyłem snifferów z http://networksecuritytoolkit.org
- pod Windows ciężko wywąchać VLAN, bo często sterowniki do kart sieciowych tego nie obsługują
cyt. http://wiki.wireshark.org/CaptureSetup/VLAN#Windows
Windows has no built-in support mechanisms for VLANs. There aren't separate physical and VLAN interfaces you can capture from, unless a specialized driver that adds such support is present.
dlatego najlepiej użyć do tego jakiegoś linux'a
2. skonfigurować VLANy na routerze
U mnie są to wysokie VLANy więc jeśli tak należy pamiętać o tym by ustawić
użyć enable_vlan4k' '1' w pliku /etc/config/network
config 'switch'
option 'name' 'rtl8366rb'
option 'reset' '1'
option 'enable_vlan' '1'
option 'enable_vlan4k' '1'
/etc/config/network
config 'interface' 'loopback'
option 'ifname' 'lo'
option 'proto' 'static'
option 'ipaddr' '127.0.0.1'
option 'netmask' '255.0.0.0'
#VLAN6
config 'interface' 'wan_adm'
option 'ifname' 'eth0.6'
option 'proto' 'dhcp'
option 'metric' '10'
#VLAN1
config 'interface' 'wan_iptv'
option 'ifname' 'eth0.1'
option 'proto' 'dhcp'
option 'metric' '20'
#VLAN5
config 'interface' 'wan'
option 'ifname' 'eth0.5'
option 'proto' 'dhcp'
config 'interface' 'lan'
option 'ifname' 'eth0.2'
option 'type' 'bridge'
option 'proto' 'static'
option 'netmask' '255.255.255.0'
option 'ipaddr' '192.168.1.1'
config 'switch'
option 'name' 'rtl8366rb'
option 'reset' '1'
option 'enable_vlan' '1'
option 'enable_vlan4k' '1'
config 'switch_vlan'
option 'device' 'rtl8366rb'
option 'vlan' '6'
option 'ports' '0t 4t 5t'
#na port 0 (WAN - wan_adm) - wchodzi otagowany VLAN6,
#na porcie 4 - wychodzi otagowany
#na port 5 (procek) - wchodzi otagowany
config 'switch_vlan'
option 'device' 'rtl8366rb'
option 'vlan' '1'
option 'ports' '0t 1 4t 5t'
#na port 0 (WAN - wan_iptv) - wchodzi otagowany VLAN1,
#na porcie 4 - wychodzi otagowany
#na porcie 1 - wychodzi nietagowany (podłączenie dekodera)
#na port 5 (procek) - wchodzi otagowany
config 'switch_vlan'
option 'device' 'rtl8366rb'
option 'vlan' '5'
option 'ports' '0 4 5t'
#na port 0 (WAN - wan) - wchodzi nietagowany,
#na porcie 4 - wychodzi nietagowany
#na port 5 (procek) - wchodzi otagowany
config 'switch_vlan'
option 'device' 'rtl8366rb'
option 'vlan' '2'
option 'ports' '2 3 5t'
#na porcie 2 i 3 - wychodzi nietagowany
#na port 5 (procek) - wchodzi otagowany VLAN2
config 'route'
option 'interface' 'wan_iptv'
option 'target' '224.0.0.0'
option 'netmask' '240.0.0.0'
dopisujemy do domyślnej konfiguracji /etc/config/dhcp
config dhcp wan_iptv
option 'interface' 'wan_iptv'
option 'ignore' '1'
config dhcp wan_adm
option 'interface' 'wan_adm'
option 'ignore' '1'
dopisujemy do domyślnej konfiguracji /etc/config/firewall
#definicja dla wan_iptv z nat
config 'zone'
option 'name' 'wan_iptv'
option 'input' 'REJECT'
option 'output' 'ACCEPT'
option 'forward' 'REJECT'
option 'masq' '1'
option 'mtu_fix' '1'
option 'network' 'wan_iptv'
config 'forwarding'
option 'src' 'lan'
option 'dest' 'wan_iptv'
# ----- pingi do wan_iptv
config 'rule'
option 'name' 'Allow-DHCP-Renew-wan_iptv'
option 'src' 'wan_iptv'
option 'proto' 'udp'
option 'dest_port' '68'
option 'target' 'ACCEPT'
option 'family' 'ipv4'
config 'rule'
option 'name' 'Allow-Ping-wan_iptv'
option 'src' 'wan_iptv'
option 'proto' 'icmp'
option 'icmp_type' 'echo-request'
option 'family' 'ipv4'
option 'target' 'ACCEPT'
# ----- udpxy
config 'rule'
option 'src' 'wan_iptv'
option 'proto' 'igmp'
option 'target' 'ACCEPT'
config 'rule'
option 'src' 'wan_iptv'
option 'proto' 'udp'
option 'dest_ip' '224.0.0.0/4'
option 'target' 'ACCEPT'
3. sprawdzić VLANy w swojej sieci
Po takiej konfiguracji, rezultat
route -n
powinien wyglądać mniej więcej tak
(oczywiście adresy IP i VLANy będą specyficzne dla waszej sieci):
root@OpenWrt:~# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 br-lan
213.154.24.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0.5
172.18.15.0 0.0.0.0 255.255.254.0 U 0 0 0 eth0.1
172.14.18.0 0.0.0.0 255.255.252.0 U 0 0 0 eth0.6
224.0.0.0 0.0.0.0 240.0.0.0 U 0 0 0 eth0.1
0.0.0.0 213.154.24.1 0.0.0.0 UG 0 0 0 eth0.5
Rezultaty z swconfig powinny wyglądać mniej więcej tak:
root@OpenWrt:~# swconfig dev rtl8366rb vlan 1 show
VLAN 1:
info: VLAN 1: Ports: '0t14t5t', members=003d, untag=000c, fid=0
fid: 0
ports: 0t 1 4t 5t
root@OpenWrt:~# swconfig dev rtl8366rb vlan 2 show
VLAN 2:
info: VLAN 2: Ports: '235t', members=0022, untag=0002, fid=0
fid: 0
ports: 2 3 5t
root@OpenWrt:~# swconfig dev rtl8366rb vlan 5 show
VLAN 5:
info: VLAN 5: Ports: '045t', members=0031, untag=0011, fid=0
fid: 0
ports: 0 4 5t
root@OpenWrt:~# swconfig dev rtl8366rb vlan 6 show
VLAN 6:
info: VLAN 6: Ports: '0t4t5t', members=0031, untag=0000, fid=0
fid: 0
ports: 0t 4t 5t
W tym miejscu IPTV powinno już działać.
IPTV przez WIFI
Należy skorzystać z pakietu udpxy (multicast na unicast)
instalacja pakietu
opkg install udpxy
Tworzenie skryptu startowego (jeśli nie ma)
touch /etc/init.d/udpxy
chmod a+x /etc/init.d/udpxy
zawartość skryptu /etc/init.d/udpxy, gdzie 192.168.1.1 jest adresem IP routera w LAN
#!/bin/sh /etc/rc.common
# Copyright (C) 2010 OpenWrt.org
START=99
STOP=10
# 192.168.1.1 - adres IP routera w LAN
# 8080 - port na którym ma działać
IGMP_OPTS="-p 8080 -a 192.168.1.1"
IGMP_BIN="/usr/bin/udpxy"
PID_F="/var/run/udpxy.pid"
start() {
echo "Starting udpxy"
start-stop-daemon -S -x $IGMP_BIN -p $PID_F -b -m -- $IGMP_OPTS
}
stop() {
echo "Stopping udpxy"
start-stop-daemon -K -x $IGMP_BIN -p $PID_F -q
}
włączamy usługę:
/etc/init.d/udpxy enable
uruchamiamy usługę:
/etc/init.d/udpxy start
Po uruchomieniu warto sprawdzić czy w logu
nie pojawiają się następujące problemy, czytamy log:
logread
Na nasze nieszczęście może pojawić się tam:
udpxy[55201]: read_buf: read: Resource temporarily unavailable
Wówczas należy walczyć z konfiguracja
- firewall (np. pozamykane porty)
- network (np. złe VLANy, brak tras)
Ogólnie udpxy działa problemów przez WIFI nawet w standardzie 802.11g.
Jeśli wszystko jest w porządku to pod adresem
http://192.168.1.1:8080/status
pojawi się strona informacyjna.
Jeśli po kablu, możliwe jest odtwarzanie w VLC (gdzie 239.64.64.58:6000 jest adresem transmisji)
udp://@239.64.64.58:6000
Dla WIFI strumień video do VLC uzyskujemy:
http://192.168.1.1:8080/udp/239.64.64.58:6000
Zapisywanie strumieni IPTV
udpxrec -T -c 239.64.64.58:6000 /tmp/streamdump.mpg
Pakiet igmpproxy
Na Attitude Adjustment 12.09 z powodzeniem można używać pakietu igmpproxy
przy właczonej funkcji 'IGMP snooping' (patrz niżej)
instalacja pakietu
opkg install igmpproxy
włączamy usługę:
/etc/init.d/igmpproxy enable
Pzykładowa konfiguracja /etc/config/igmpproxy
config igmpproxy
option quickleave 1
config phyint
option network wan
option direction upstream
list altnet 192.168.65.0/24
config phyint
option network lan
option direction downstream
uruchamiamy usługę:
/etc/init.d/igmpproxy start
W powyższej konfiguracji istotne jest poprawne ustawienie parametru "altnet".
Jeśli nie wiesz jak ustawić parametr "altnet", szukaj w logu czegoś w stylu:
"Warn: The source address 192.168.65.166 for group 233.32.240.222, is not in any valid net for upstream VIF"
W ten oto sposób poznasz adres źródła multicast u twojego dostawcy.
IGMP snooping i multicast forwarding
IGMP snooping nie jest wspierany w starszych wersjach (np. Backfire 10.03.1)
a to może powodować zalewanie pakietami (ang. "IGMP multicast flooding")
W 12.09 AA funkcja jest domyślnie WYŁĄCZONA
(warto śledzić http://wiki.openwrt.org/doc/howto/udp_multicast gdyż wcześniej było inaczej)
Instalacja:
opkg update
opkg install kmod-bridge
Do sprawnego działania IPTV korzystajacego z igmpproxy lub udpxy warto:
- włączyć IGMP snooping w interface lan
config interface lan
option type bridge
option igmp_snooping 1
...
- wyłączyć multicast snooping
echo "0" > /sys/devices/virtual/net/br-lan/bridge/multicast_snooping