LINUX.ORG.RU

Избранные сообщения mmn71

Рекомендации по созданию стримов на веб-сайте

Форум — Web-development

Картинка для привлечения внимания.

Новый год всё ближе, хотелось бы устроить новогоднюю видеоконференцию с моими воображаемыми^W друзьями, используя конечно же, опен сорц!

На самом деле ничего сложного, используя nginx-rtmp-module удалось создать HLS (Apple HTTP Live Stream), который как заверяют, будет работать на любых устройствах.

rtmp {
  server {
    listen 1935;

    chunk_size 4096;

    application hls {
      live on;

      hls on;
      hls_path /var/www/hls;

      record off;

      allow publish 127.0.0.0/8;
      deny publish all;

      allow play all;
    }
}
server {
  listen 80;
  server localhost;

  root /var/www;

  location /hls {
    types {
      application/vnd.apple.mpegurl m3u8;
      video/mp2t ts;
    }

    add_header Cache-Control no-cache;
  }
}

Вот такая загогулина позволяет получать урлы в формате https://spfng.com/hls/live.m3u8, теперь запускаем стрим...

Стримить можно что угодно, любой источник, веб-камера или просто видео. Я взял видео.

# ffmpeg -re -i /media/The\ Simpsons\ s27e07.mp4 -c copy -f flv rtmp://spfng.com/hls/live

На веб-страничку прикрутил HTML5-плеер с реализацией video.js, — никакого богомерзкого Flash! И да, оно даже заработало. Результат вы видите на скриншоте.

По итогам, что потребуется: 1) nginx + nginx-rtmp-module 2) ffmpeg 3) video.js HTML5-плеер 4) любой источник видео, будь то веб-камера или кинцо 5) широкий канал чтобы стримить для большого круга друзей.

Вопрос!

А какие инструменты для реализации потокового вещания использовали вы? Что можно сделать правильнее или ещё лучше? Сталкиваюсь с этим первый раз, поэтому возможно что-то сделал не так.

 , ,

Spoofing
()

Маршрутизация, 2 прова.

Форум — Admin

Здравствуйте, уважаемые. Внизу представлен на Ваше внимание скрипт запуска маршрутизации через 2х провайдеров. Не получается настроить ответ по тому же каналу, откуда приходит пакет. Пакет всегда попадает в таблицу main и отправляется по default. Исходящие пакеты из локал сетей идут правильно, их маркировка работает. А вот пакеты приходящие на сам роутер, транзитные идут неправильно. Где у меня может быть ошибка? Особенно хотелось бы разобраться в последовательности применения и правильности команд для CONNMARK как для входящих на роутер, так и проходящих сквозь него пакетов ( Как я понимаю суть команд помечено в комментариях скрипта). Поправьте, где я ошибаюсь. СПАСИБО.

P.S. eth0 - 1 пров, eth1 - 2 пров. Маркировка 10 для 1 прова, 20 для 2-го.

#!/bin/bash
echo "1">/proc/sys/net/ipv4/ip_forward
echo "0">/proc/sys/net/ipv4/conf/all/rp_filter
iptables -t mangle -F
iptables -t nat -F
iptables -t filter -F
###---PREROUTING------
# Маркирую соединения из локальных сетей:
iptables -t mangle -A PREROUTING -s $NET_LOCAL1 -j CONNMARK --set-mark 10 # --set-mark 10 for PROV1
iptables -t mangle -A PREROUTING -s $NET_LOCAL2 -j CONNMARK --set-mark 20 # --set-mark 20 for PROV2
iptables -t mangle -A PREROUTING -s $NET_LOCAL3 -j CONNMARK --set-mark 10 # --set-mark 10 for PROV1
# Маркирую соединения с внешних интерфейсов:
iptables -t mangle -A PREROUTING -i eth0 -j CONNMARK --set-mark 10
iptables -t mangle -A PREROUTING -i eth1 -j CONNMARK --set-mark 20
# Маркирую все пакеты внутри соединений по меткам самих соединений:
iptables -t mangle -A PREROUTING -m connmark --mark 10 -j CONNMARK --restore-mark
iptables -t mangle -A PREROUTING -m connmark --mark 20 -j CONNMARK --restore-mark

###---FORWARD---
# Для транзитных пакетов я пока не начать разбираться, так как не заработала маршрутизация на самом роутере. 
###---INPUT---
# Устанавливаю маркировку пакетов по маркировке соединений (такое уже делается в PREROUTING, написал для контроля за счетчиками)
iptables -t mangle -A INPUT -m connmark --mark 10 -j CONNMARK --restore-mark
iptables -t mangle -A INPUT -m connmark --mark 20 -j CONNMARK --restore-mark

####--------OUTPUT----------
# В локальные сети не трогаем
iptables -t mangle -A OUTPUT -d $NET_LOCAL1 -j RETURN
iptables -t mangle -A OUTPUT -d $NET_LOCAL2 -j RETURN
iptables -t mangle -A OUTPUT -d $NET_LOCAL3 -j RETURN
# Выходящие пакеты маркируем по номерам соединений
iptables -t mangle -A OUTPUT -m connmark --mark 10 -j CONNMARK --restore-mark
iptables -t mangle -A OUTPUT -m connmark --mark 20 -j CONNMARK --restore-mark

###--------POSTROUTING----
# Здесь NAT
iptables -t nat -A POSTROUTING -s $NET_LOCAL3 -m mark --mark 10 -j ACCEPT
iptables -t nat -A POSTROUTING -s $NET_LOCAL2 -m mark --mark 20 -j ACCEPT
iptables -t nat -A POSTROUTING -m mark --mark 10 -j SNAT --to-source $IP_PROV1
iptables -t nat -A POSTROUTING -m mark --mark 20 -j SNAT --to-source $IP_NAT_PROV2

    ip route flush table T_LOCAL
    ip route flush table T_PROV1
    ip route flush table T_PROV2
    ip route add $NET_LOCAL1 dev $IF_LOCAL1 table T_LOCAL
    ip route add $NET_LOCAL2 dev $IF_LOCAL2 table T_LOCAL
    ip route add $NET_LOCAL3 dev $IF_LOCAL3 table T_LOCAL

    ip route add $NET_PROV1 dev $IF_PROV1 src $IP_PROV1 table T_PROV1
    ip route add 127.0.0.0/8 dev lo table T_PROV1
    ip route add default via $GW_PROV1 dev eth0 table T_PROV1
    
    ip route add $NET_PROV2 dev $IF_PROV2 src $IP_PROV2 table T_PROV2
    ip route add 127.0.0.0/8 dev lo table T_PROV2
    ip route add default via $GW_PROV2 dev eth1 table T_PROV2
    #заполнение таблицы main
    ip route del default
    ip route add default via $GW_PROV1
    ip rule show | grep -Ev '^(0|32766|32767):|iif lo' \
    | while read PRIO NATRULE; do
          ip rule del prio ${PRIO%%:*} $( echo $NATRULE | sed 's|all|0/0|' )
    done
    ip rule add from all lookup T_LOCAL pref 5
    ip rule add fwmark 10 table T_PROV1 pref 10
    ip rule add fwmark 20 table T_PROV2 pref 20
    ip route flush cache
exit 0
alexovi4
()

Несколько таблиц маршрутизации

Форум — Admin

Есть такая конфигурация:

client:
eth0 - lan

server:
eth0 - inet
eth1 - lan
tun0 - vpn over eth0

нужно маршрутизировать запросы клиента к различным портам на различные интерфейсы, например 80 - через tun0, остальное - eth0

Вначале пробую маршрутизацию всего трафика через vpn:

ip route add $vpn_external_ip via $inet_gate
ip route del default gw $inet_gate
ip route add default gw $tun0_ip

работает.

Теперь пытаюсь использовать две таблицы маршрутизации:

echo 2 myinet >> /etc/iproute2/rt_tables
ip route add default gw $inet_gate table myinet
ip rule add from all fwmark 1 table myinet
iptables -A PREROUTING -t mangle -i eth1 -p tcp --dport 80 -j MARK --set-mark 1

теперь все, кроме 80 порта работает.

 , ,

Ower
()