Tento návod jsou spíše zápisky při zprovoznění DVB-T tuneru na mém routeru TL-WR1043ND. Postupně se rozrostl o instalaci OpenVPN klienta, Samby atd. Jsou zde věci, které jsou ušité na míru mé síti a nastavení mého serveru a periférií (IP kamery, VDR atd.). Předpoklad pro instalaci OpenVPN klienta je tedy mít OpenVPN server, vytvořené klíče (které v tomto návodu kopíruji interně ze svého serveru) atd.. I přes tyto drobnosti si ale myslím, že ucelený návod by mohl být užitečný pro ostatní, a proto je veřejně přístupný. Snad se bude někomu hodit:)
Kvůli zkompilovaným modulům pro DVB je potřeba update na FW OpenWRT od EkoOne.pl pro TL-WR1043ND »» v2 «« http://dl.eko.one.pl/chaos_calmer/ar71xx/openwrt-15.05-ar71xx-generic-tl-wr1043nd-v2-squashfs-sysupgrade.bin. Vycházím zde z předpokladu, že na routeru již nějakou verzi OpenWRT máme.
Po upgradu je potřeba nastavit heslo pro uživatele root, aby bylo možné mj. přistupovat přes ssh
telnet telnet> open 192.168.1.1 passwd exit
ssh root@192.168.1.1
Můžeme nainstalovat webové rozhraní LUCI
opkg update ; opkg install luci
Instalace OpenVPN klienta pro vytvoření tunelu k serveru
opkg update ; opkg install openvpn-polarssl
Zkopírujeme klíče ze serveru
scp root@10.0.10.1:'/etc/ssl/private/rtr_mar.key /etc/ssl/certs/rtr_mar.crt /etc/ssl/certs/ca_fp.crt' /etc/openvpn
cat <<'EOF' > /etc/config/openvpn package openvpn config openvpn option enable 1 option config /etc/openvpn/openvpn.conf option log /tmp/openvpn.log EOF
cat <<'EOF' > /etc/openvpn/openvpn.conf remote p33.cz #port 1194 port 443 proto tcp-client tls-client dev tap pull ns-cert-type server mute 10 ca /etc/openvpn/ca_fp.crt cert /etc/openvpn/rtr_mar.crt key /etc/openvpn/rtr_mar.key persist-key persist-tun comp-lzo verb 3 user nobody group nogroup EOF
Nastavíme nově vytvořené rozhraní tap0
uci set network.vpn=interface ; uci set network.vpn.proto='dhcp' ; uci set network.vpn.ifname='tap0' ; uci commit network ;
Restartujeme router
reboot
Spustíme OpenVPN klienta a nastavíme po startu routeru
/etc/init.d/openvpn start ; /etc/init.d/openvpn enable
USB kamera jako IP kamera
opkg update ; opkg install kmod-usb-core kmod-usb2 kmod-video-core kmod-video-uvc mjpg-streamer
Restartujeme router
reboot
Spustíme a nastavíme po startu routeru
/etc/init.d/mjpg-streamer start ; /etc/init.d/mjpg-streamer enable
cat <<'EOF' > /etc/config/mjpg-streamer config mjpg-streamer 'core' option enabled '1' option input 'uvc' option output 'http' option device '/dev/video0' option resolution '640x360' option fps '15' option www '/www/webcam' option port '8080' EOF
Jakmile se k wifi připojí zařízení ze seznamu, spustí se skript
opkg update ; opkg install iptables-mod-iprange wget ip
Popis akcí je uveden ve skriptu
cat <<'EOF' > /root/wifi_cam_stop.sh #!/bin/sh # kontroluji seznam pripojenych zarizeni, ktera nastavi omezeni cat /proc/net/arp | grep -f mac_stop_list.txt | grep 0x2 if [[ $? -eq 0 ]] ; then # zarizeni jsou pripojena (vypne se motion detect a nastavi pravidlo, ktere zamezi pristupu na IP camery) # vypinam motion detect wget --delete-after --no-check-certificate "https://admin:H3slo.2O15@10.0.14.137:8083/param.cgi?action=update&root.BackgroundMode=off" ; # zapinam rele u bazenu wget --delete-after "http://10.0.14.111/cgi_login?passw=test" "http://10.0.14.111/cgi_rctl?rmode=d0on&rn=3" "http://10.0.14.111/cgi_logout" ; # nastavuji omezeni (pokud neni nastaveno) if ! iptables -L | grep kamery_off ; then iptables -I FORWARD -m iprange --src-range 10.0.14.5-10.0.14.10 -d 10.0.10.0/24,10.0.11.0/24 -m comment --comment "kamery_off" -j DROP ; fi else # zarizeni jsou odpojena (zapne se motion detect a zrusi pravidlo, ktere obnovi pristup na IP camery) # zapinam motion detect wget --delete-after --no-check-certificate "https://admin:H3slo.2O15@10.0.14.137:8083/param.cgi?action=update&root.BackgroundMode=on" ; # vypinam rele u bazenu wget --delete-after "http://10.0.14.111/cgi_login?passw=test" "http://10.0.14.111/cgi_rctl?rmode=d0off&rn=3" "http://10.0.14.111/cgi_logout" ; # rusim omezeni (pokud je nastaveno) if iptables -L | grep kamery_off ; then iptables -D FORWARD -m iprange --src-range 10.0.14.5-10.0.14.10 -d 10.0.10.0/24,10.0.11.0/24 -m comment --comment "kamery_off" -j DROP ; fi fi # mazu ARP tabulku ip neigh flush dev br-lan # ping na leasy probere "zive" zarizeni a zapise je do ARP tabulky for i in `cat /tmp/dhcp.leases | cut -d ' ' -f 3` do ping -c 1 -W 1 $i done EOF
Nastavíme jako spustitelný
chmod +x /root/wifi_cam_stop.sh
Seznam zařízení
cat <<'EOF' > /root/mac_stop_list.txt ac:22:0b:02:23:a5 28:e3:1f:5d:31:a4 74:23:44:df:da:6c b0:e2:35:4a:90:2f 24:77:03:19:3a:08 a0:86:c6:cd:03:c1 78:52:1a:2c:19:f2 00:18:60:8b:32:d6 88:70:8c:14:3d:26 d8:50:e6:21:3d:6b EOF
Kontrola bude probíhat každých pět minut
cat <<'EOF' >> /etc/crontabs/root # odrizne kamery od site 10.0.10.0/24 po pripojeni wifi zarízeni */5 * * * * /root/wifi_cam_stop.sh >/tmp/wifi_cam_stop.log 2>&1 EOF
Restart cronu
/etc/init.d/cron restart
V routeru je nedostatečná velikost paměti, TVHeadend a další balíčky by se nám tam nevešely. Proto ji roztáhneme na USB flashku, kterou máme naformátovanou na ext4. Ideální je si připravit dva oddíly, z čehož druhý bude naformátovaný pro swap.
opkg update ; opkg install block-mount kmod-fs-ext4 kmod-usb-storage-extras
mount -t ext4 /dev/sda1 /mnt ; tar -C /overlay -cvf - . | tar -C /mnt -xf - ; umount /mnt
block detect > /etc/config/fstab; \ sed -i s/option$'\t'enabled$'\t'\'0\'/option$'\t'enabled$'\t'\'1\'/ /etc/config/fstab; \ sed -i s#/mnt/sda1#/overlay# /etc/config/fstab; \ cat /etc/config/fstab;
echo option force_space >> /etc/opkg.conf
opkg update ; opkg install kmod-i2c-mux kmod-input-core
Stáhneme moduly pro DVB-T tuner z http://dl.eko.one.pl/chaos_calmer/ar71xx/media-3.18.45 nebo z p33.cz a rovnou je zkopírujeme na správné místo
wget https://p33.cz/modules.tar.gz -P /tmp; tar xzvf /tmp/modules.tar.gz -C /lib/modules/3.18.45
Zjištění závislostí modulů
strings /lib/modules/3.18.45/rc-core.ko | grep depends
Zavedení modulů ručně !!! je nutné zachovat pořadí !!!
insmod dvb-core ; insmod input-core ; insmod rc-core ; insmod rtl2832 ; insmod dvb_usb_v2 ; insmod rtl2830 ; insmod dvb-usb-rtl28xxu ; insmod r820t
Pokud byly moduly úspěšně zavedeny, můžeme vytvořit soubor /etc/modules.d/dvb s vypsanými moduly pod sebou
cat <<'EOF' > /etc/modules.d/dvb dvb-core input-core rc-core rtl2832 dvb_usb_v2 rtl2830 dvb-usb-rtl28xxu r820t EOF
Nainstalujeme balíček TVHeadend
opkg update ; opkg install tvheadend
Výchozí adresa je:
http://ip_routeru:9981
Instalace modemu Huawei a připojení přes NDIS (NCM)
opkg update ; opkg install kmod-usb-core kmod-usb2 kmod-usb-serial kmod-usb-serial-option usb-modeswitch comgt-ncm comgt chat wwan kmod-usb-net-huawei-cdc-ncm picocom
Přepneme modem, viz https://www.kyou.cz/forum/viewtopic.php?t=1743
picocom --send-cmd AT^SETPORT="FF;10,12,13,14,16" /dev/ttyUSB0
Abychom mohli nastavit NCM protokol přes webové rozhraní Luci, nainstalujeme balíček, který není ale v repo
wget https://p33.cz/luci-proto-ncm_svn-r9961-1_ar71xx.ipk -P /tmp ; opkg install /tmp/luci-proto-ncm_svn-r9961-1_ar71xx.ipk
Nakonfigurujeme nové síťové rozhraní (v závislosti na poskytovateli internetu)
uci set network.lte=interface ; uci set network.lte.ifname='wwan0' ; uci set network.lte._orig_ifname='wwan0' ; uci set network.lte._orig_bridge='false' ; uci set network.lte.proto='ncm' ; uci set network.lte.device='/dev/ttyUSB0' ; uci set network.lte.mode='lte' ; uci set network.lte.apn='internet.t-mobile.cz' ; uci set network.lte.authtype='none' ; uci set network.lte.delay='20' ; uci commit network ;
a přidáme ho do firewall zóny wan, která je již vtvořena
uci set firewall.@zone[1].network='lte wan wan6' ; uci commit firewall ;
Abychom mohli připojit šifrovaný disk LUKS, je nutné nainstalovat balíčky
opkg update ; opkg install usbutils blkid e2fsprogs kmod-crypto-xts kmod-crypto-iv kmod-crypto-sha1 cryptsetup
Stažení a zkopírování klíče
mkdir /etc/ssl ; scp root@10.0.10.33:/etc/ssl/usbbackup_key /etc/ssl/
Dešifrování a připojení
cryptsetup --key-file /etc/ssl/usbbackup_key luksOpen /dev/sdb1 backup ; mkdir /mnt/usbbackup ; mount /dev/mapper/backup /mnt/usbbackup
Zašifrování a odpojení
umount /mnt/usbbackup ; cryptsetup luksClose backup ; rmdir /mnt/usbbackup
Vytvoříme soubor, který bude automaticky spouštět scripty po připojení USB disku
cat <<'EOF' > /etc/hotplug.d/usb/10-usb #!/bin/sh PRODID="1058/25a2/1019" ## zjistime pomoci lsusb -v (idVendor/idProduct/bcdDevice) case "$ACTION" in add) if [ "${PRODUCT}" = "${PRODID}" ]; then /root/mount_luks.sh fi ;; remove) if [ "${PRODUCT}" = "${PRODID}" ]; then /root/umount_luks.sh fi ;; esac EOF
A skripty, které budou disk připojovat
cat <<'EOF' > /root/mount_luks.sh #!/bin/sh UUID="80a934f4-752c-4061-8ba2-8a9fa4e7f72d" until [ $LUKS ]; do LUKS="$(blkid -U ${UUID})"; sleep 1; done /usr/sbin/cryptsetup --debug --key-file /etc/ssl/usbbackup_key luksOpen ${LUKS} backup > /tmp/crypt.log 2>&1 && /bin/mkdir /mnt/usbbackup && /bin/mount /dev/mapper/backup /mnt/usbbackup exit 0 EOF
a odpojovat
cat <<'EOF' > /root/umount_luks.sh #!/bin/sh /bin/umount /mnt/usbbackup && /bin/rmdir /mnt/usbbackup && /usr/sbin/cryptsetup --debug --key-file /etc/ssl/usbbackup_key luksClose backup > /tmp/crypt.log 2>&1 exit 0 EOF
Nastavíme oba skripty jako spustitelné
chmod +x /root/mount_luks.sh ; chmod +x /root/umount_luks.sh
opkg update ; opkg install samba36-server luci-app-samba
echo "xbmc:*:1027:513:xbmc:/mnt/usbbackup:/bin/false" >> /etc/passwd
Musíme vytvořit Samba heslo, které bude totožné s tím, co máme na serveru
smbpasswd -a xbmc
cat <<'EOF' >> /etc/group fotky:x:151:xbmc public:x:153:xbmc filmy:x:155:xbmc audio-da:x:154:xbmc EOF
cat <<'EOF' > /etc/samba/smb.conf.template [global] netbios name = |NAME| display charset = |CHARSET| interfaces = |INTERFACES| server string = |DESCRIPTION| unix charset = |CHARSET| workgroup = |WORKGROUP| browseable = yes deadtime = 30 domain master = yes encrypt passwords = true enable core files = no guest account = nobody guest ok = yes invalid users = root local master = yes load printers = no map to guest = Bad User max protocol = SMB2 min receivefile size = 16384 null passwords = yes obey pam restrictions = yes os level = 20 passdb backend = smbpasswd preferred master = yes printable = no security = user smb encrypt = disabled smb passwd file = /etc/samba/smbpasswd socket options = TCP_NODELAY IPTOS_LOWDELAY syslog = 2 use sendfile = yes writeable = yes ntlm auth = no lanman auth = no client NTLMv2 auth = yes EOF
cat <<'EOF' > /etc/config/samba config samba option name 'mar-ap-share' option description 'Shared Content' option workgroup 'p33.cz' option homes '0' config sambashare option name 'FILMY' option path '/mnt/usbbackup/FILMY' option users 'xbmc' option read_only 'yes' option guest_ok 'no' config sambashare option name 'FOTKY' option path '/mnt/usbbackup/FOTKY' option users 'xbmc' option read_only 'yes' option guest_ok 'no' config sambashare option name 'AUDIO-DA' option path '/mnt/usbbackup/AUDIO-DA' option users 'xbmc' option read_only 'yes' option guest_ok 'no' config sambashare option name 'PUBLIC' option path '/mnt/usbbackup/PUBLIC' option users 'xbmc' option read_only 'yes' option guest_ok 'no' config sambashare option name 'DATA' option path '/mnt/DATA' option users 'xbmc' option read_only 'yes' option guest_ok 'no' EOF
https://www.youtube.com/watch?v=3lqP1P-OqYA
https://wiki.openwrt.org/doc/howto/extroot
https://morfitronik.pl/modem-lte-pod-openwrt
https://sites.google.com/site/variousopenwrt/huawei-e3267
http://wiki.openwrt.org/doc/howto/webcam
https://forum.openwrt.org/viewtopic.php?id=42552
http://alfanla.com/blog/2013/12/ip-webcam-motion-detection-murah-dengan-openwrt/
https://wiki.openwrt.org/doc/howto/cifs.server
https://wiki.openwrt.org/doc/uci/samba