Wednesday, July 20, 2016

Xem IPTV với Router Openwrt sử dụng UDPXY



I. Giới thiệu
Các bạn đang sử dụng Internet và IPTV, mình hướng dẫn các bạn cài đặt Router chạy FW Openwrt để xem IPTV trên các thiết bị thông minh (KODI, IOS, Android, SmartTV, PC…)
Vì IPTV sử dụng giao thức UDP/RTP (multicast) để truyền dữ liệu, xem trực tiếp link UDP/RTP trên KODI, VLC… thường có tình trạng vỡ hình, lag mạng và đơ Wifi, nên config Router Openwrt để chỉ lấy tín hiệu UDP/RTP đầu vào và convert thanh tín hiệu TCP(HTTP) để sử dụng trong mạng Lan như bình thường. Nhờ đó không cần Settopbox mà vẫn xem được IPTV trên điện thoại, máy tính, AndroidBox...
Yêu cầu:
- Đã đăng ký IPTV và xem được qua VLC
- Router Wifi đang sử dụng đã cài đặt OpenWrt (hướng dẫn cài FW Openwrt trên các loại Router)
- PC cài sẵn Putty để kết nối SSH vào Router và WinSCP quản lý và chỉnh sửa file trên Router
* Thành quả sẽ thế này, trên KODI:
II. Các bước thực hiện:
(nhiều chữ do mình viết chi tiết cho tránh nhầm lẫn, nhưng làm nhanh lắm, 5 phút là xong thôi)
Phần Modem:
- Đối với nhà mạng VNPT: thường nhà mạng config modem cho IPTV và Internet theo 2 đường Lan riêng biệt, Port 1,2,3 cho Internet, Port 4 cho IPTV (thường thế), các bác cắm LAN thử cổng IPTV (port4) với Laptop, dùng VLC xem thử list IPTV_VNPT, xem được là ok tiến hành config theo cách IPTV và Internet trên 2 đường LAN riêng biệt.

- Đối với FPT: thường IPTV và Internet chung 1 đường LAN, test tín hiệu IPTV bằng cách nối dây Lan từ Modem vào Laptop dùng VLC xem thử list IPTV_FPT, xem được TV và dùng net bình thường là ok, config Router theo cách: IPTV và Internet cùng 1 đường LAN

Phần Router Wifi:
Các model của tplink như wr740/741, wr940/941, wr841/842... chỉ có 4MB flash rom, nên chỉ dùng bản Openwrt 17.01 trở xuống, ko nên dùng bản mới hơn (trừ khi Router của bạn ko có FW bản cũ) vì có khả năng ko đủ bộ nhớ để cài igmpproxy/udpxy
1. Dành cho Internet và IPTV trên 2 đường LAN riêng:
Ta sẽ config trộn lẫn cả IPTV và Internet trên Router Openwrt để vừa xem IPTV vừa có Internet.
Video hướng dẫn cho dễ hiểu và làm theo chi tiết bài viết
- Router rút hết các cổng ra, chỉ để mình Internet cắm vào Wan của Router và sử dụng Wifi để config (để lát config Port đỡ nhầm).
- Nếu IP của Modem và Router trùng nhau thì đổi IP của Router nhé (vd: Modem: 192.168.0.1 thì Router: 192.168.10.1)
- Sử dụng Putty để login SSH vào IP của router gõ lệnh
opkg update && opkg install igmpproxy udpxy kmod-bridge
# thiết lập tự động khởi động cùng openwrt
/etc/init.d/igmpproxy enable
/etc/init.d/udpxy enable
echo "sleep 60 && /etc/init.d/udpxy start > /dev/null 2>&1&
$(cat /etc/rc.local)" > /etc/rc.local
#Xóa IPV6 (giảm vỡ hình cho udpxy)
uci delete dhcp.lan.ra
uci delete dhcp.lan.dhcpv6
uci delete network.wan6
uci set firewall.@defaults[0].disable_ipv6=1
sed -i '/net.ipv6.conf.all.forwarding=1/a net.ipv6.conf.all.disable_ipv6=1' /etc/sysctl.conf
echo "net.ipv4.conf.all.force_igmp_version=2" >> /etc/sysctl.conf
uci commit dhcp
uci commit firewall
uci commit network
tool UDPXY vừa cài chịu trách nhiệm convert luồng dữ liệu của IPTV (rtp, udp) sang (http) xem mượt mà và không ảnh hưởng đến Internet.
- Truy cập Router qua WEB UI, vào Network / Switch:
Đối với các loại Router TP-LINK 740/741/840/841/845/847N ... (chạy bản Openwrt chip ar71xx):
Mặc định Vlan1 có sẵn, Nhấn Add để thêm Vlan 2: CPU để (tagged), Port 4 (untagged), tại Vlan1: CPU để (tagged), Port4 (off) như hình, rồi Save (các bước dưới cũng chỉ Save chứ không Save&Apply nhé)
Port 4 lát nữa sử dụng để cắm dây IPTV (bước này chia thêm 1 Vlan nữa để lát nữa tín hiệu IPTV, không ảnh hưởng đến Internet ở cổng Lan 1,2,3 và Wifi)
Chú ý: Nhiều loại Router, tên số Port ghi trên Router và phần Switch của OpenWrt nhận lệch nhau, có thể Port 4 trên Router mà phần Switch như hình lại nhận Port khác, nên bạn test trước cho cẩn thận tránh cắm nhầm, bằng cách cắm thử dây IPTV vào Port 4 của Router, rồi xem lại phần Switch như ở trên xem đúng Port 4 ko nhé, nếu đúng thì Port 4 (có biểu tượng dây cắm vào), nếu xác định đúng thì rút ra để lát config xong cắm IPTV vào đó, ở hình trên mình dùng Wifi để config nên 4 cổng ko cắm gì cả.
- Qua Network / Interface / cick Add new Interface, tạo Interface tên IPTV (để ý IPTV đều viết hoa ở toàn bài tránh gõ nhầm lại lỗi nhé )để sử dụng cho Vlan02 mới tạo, rồi Save, rồi Edit Interface IPTV, thiết lập như hình.
Phần Advanced Settings, bỏ tích "Use default gateway” và "Use DNS servers advertised by peer", Save lại
 
Phần Physical Setting chọn Vlan 02 (eth0.2) vừa tạo để sử dụng cho IPTVSave lại
Phần Firewall Setting create thêm 1 zone nữa tên IPTV như hìnhSave lại

XongSave lại
Chuyển qua Edit Interface LAN, phần Physical Setting, bỏ tích ở eth0, tích vào Vlan1 (eth0.1).
Các phần General Setup của Interface LAN vẫn để mặc định (IP Lan của Openwrt và IP của Modem phải ko trùng dài IP nhé, vd: IP MODEM: 192.168.0.1 thì Lan Router: 192.168.1.1 hoặc 192.168.10.1)
riêng DHCP Server của Lan Interface, tại tab Advanced Settings, có thể chỉnh mục  là 6,8.8.8.8,8.8.4.4 để sau này các thiết bị kết nối vào Router đều đc set DNS của google (tùy chọn), xong Save
 
Click nút Unsave Changes ở góc và click Save&APPLY để lưu mọi thiết lập.
 
  
- Dùng WinSCP truy cập Openwrt (chọn kết nối SCP nhé), tìm các file sau chỉnh sửa
sửa file /etc/config/firewall
1. Sửa phần zone IPTV như sau
config zone
option name 'IPTV'
option input 'REJECT'
option forward 'REJECT'
option output 'ACCEPT'
option network 'IPTV'
option family 'ipv4'
2. thêm vào cuối file /etc/config/firewall đoạn sau
config rule
option src 'IPTV'
option proto 'igmp'
option target 'ACCEPT'
option family 'ipv4'

config rule
option src 'IPTV'
option proto 'udp'
option dest 'lan'
option dest_ip '224.0.0.0/4'
option family 'ipv4'
option target 'ACCEPT'

config rule
option src 'IPTV'
option proto 'udp'
option dest_ip '224.0.0.0/4'
option family 'ipv4'
option target 'ACCEPT'

config rule
option target 'ACCEPT'
option src 'wan'
option proto 'tcp'
option name 'iptv'
option family 'ipv4'
option dest_port '8889'
Xong Save lại
- Sửa tiếp file /etc/config/network
tìm đến dòng config interface 'lan'
thêm vào dòng  option igmp_snooping 1 như dưới
config interface lan
        option type bridge
        option igmp_snooping 1
        ...
Save lại, chuyển qua edit /etc/config/igmpproxy, xóa hết thêm đoạn sau:
config igmpproxy
        option quickleave 1

config phyint
        option network IPTV
        option zone IPTV
        option direction upstream
        list altnet 0.0.0.0/0

config phyint
        option network lan
        option zone lan
        option direction downstream
Save lại, chuyển qua edit /etc/config/udpxy, sửa như sau:

config udpxy
option disabled '0'
option respawn '1'
option verbose '0'
option status '1'
option bind 'br-lan'
option port '8889'
option source 'eth0.2'
option max_clients '5'
# option log_file '/var/log/udpxy'
# option buffer_size '4096'
# option buffer_messages '-1'
option buffer_time '3'
option mcsub_renew '120'
# option nice_increment '0'
điền Source : eth0.2, chính là tên của VLAN02 (IPTV) (mỗi router có thể khác), không chắc thì qua Network / Interface, để ý phần IPTV sẽ thấy
Xong Save lại.
 - Cắm dây IPTV vào Port 4 (đã xác định ở trên) rồi Reboot lại router thông qua WEB (System >> Reboot)
- Đợi Router khởi động xong, test lại xem Switch của Openwrt nhận đúng port 4 chưa, như hình dưới là được,
Dùng WEB truy cập http://x.x.x.x:8889/status ,(x.x.x.x là địa chỉ Router) nếu vào được là UDPXY đã chạy
- Mở cái IPTV_VNPT tải lúc đầu bằng Notepad, sửa lại các link theo dạng sau: ví dụ từ udp://@232.84.1.27:8136 thành http://x.x.x.x:8889/udp/232.84.1.27:8136 , (x.x.x.x là địa chỉ Router hoặc tải IPTV_VNPT_UDPXY sửa địa chỉ Router ) dùng VLC mở thử 1 link, nếu có hình là thành công. dùng file PLIST M3u đã chỉnh sửa để xem IPTV trên các thiết bị.
- Sau khi config xong thì Port 1,2,3 và WIFI sẽ vừa có mạng và vừa xem được IPTV
2. Dành cho Internet và IPTV trên 1 đường LAN.
Đơn giản hơn vì IPTV và Internet chung trên cổng WAN, nối dây từ Modem sang Wan của Router Openwrt.
Các bước thực hiện:

- Reboot lại router thông qua WEB (System >> Reboot)
- Dùng WEB truy cập http://x.x.x.x:8889/status ,(x.x.x.x là địa chỉ Router) nếu vào được là UDPXY đã chạy
- Mở cái IPTV_FPT tải lúc đầu bằng Notepad, sửa lại các link theo dạng sau:
ví dụ từ udp://@232.84.1.27:8136 thành http://x.x.x.x:8889/udp/232.84.1.27:8136 , (x.x.x.x là địa chỉ Router) dùng VLC mở thử 1 link, nếu có hình là thành công. dùng file PLIST M3u đã chỉnh sửa để xem IPTV trên các thiết bị.
3. Xem IPTV trên SmartTV hoặc AndroidBox.
- Sau khi config xong, các bạn có File M3u Plist dạng http:// sử dụng plist này để xem trên các thiết bị.
Đối với Android OS: 
- Tải App IPTV  và VLC cho Android để đọc m3u plist mới tạo
- Hoặc chuyên nghiệp hơn thì sử dụng KODI: Config Add-on:IPTV Simple Client để xem TV như sau:
   + Chọn file M3u đã chỉnh sửa dạng IPTV_VNPT_UDPXY
   + Epg Setting: XMLTV URL paste link lịch phát sóng (nguồn của bác LiuThuy): http://tinyurl.com/vnepg

Đối với các loại Internet TV chạy (LG WebOS  hoăc Samsung Tizen OS)
- Cài đặt ứng dựng SS-IPTV 
Bổ xung:
1. Đối với cách config trên 2 đường truyền, nếu vẫn cần 1 Port để cho Settopbox:
 - Phần Vlan2, các bạn config port 3,4 (untagged)) cho Vlan2, lúc này Port 4 để cắm IPTV từ MODEM, Port3 sẽ cắm vào Settopbox của các bạn; lúc này Vlan 1 sẽ là Port 1,2 và Wifi.
 - Hoặc các bác Login vào Modem qua phần Port mapping thiết lập lại Port 1,2 cho Internet, Port 3,4 cho IPTV để cắm Settopbox.
2. Vì IPTV đường truyền tương đối lớn nên để xem lâu dài khuyến khích các bạn dùng Lan cable thay vì Wifi sẽ ổn định hơn.
Nhược điểm của udpxy là không bảo mật, vì vậy các bạn không nên sử dụng port mặc định (4022) của udpxy (trong bài viết đã thay đổi thành port 8889, hoặc các bạn thay đổi theo ý của bạn.
3. Đối với Router Newifi D2... (chạy bản Openwrt chip mt7621) phần Switch, config 2 đường truyền thì theo hình:

Chúc thành công!