Краткий ман по сборке OpenWrt

Получаем последнюю версию OpenWrt:

# svn co svn://svn.openwrt.org/openwrt/trunk/

Получаем дополнительные пакеты:

# ./scripts/feeds update -a && ./scripts/feeds install -a

Применяем дефолтную конфигурацию:

# make defconfig

Конфигурируем систему (выбираем свой тип роутера):

# make menuconfig

Запускаем сборку OpenWrt:

# make

Готовый файл прошивки для заливки в роутер находится здесь:
/bin/brcm47xx$

Если нужно просто обновить ранее скаченый дистрибутив то обновляем до последней версии с помощью команды:

# svn up

Также возможно получение исходников определнной версии:

# svn co -r 27495 svn://svn.openwrt.org/openwrt/trunk/

Для сборки какого-то отдельного (определенного) пакета из состава openWrt:

# make package/busybox/install

настройка iptv от ростелеком на openwrt

Для настройки я использую веб-интерфейс luci. Выделим порт под приставку, если она есть, для этого нужно соединить порт wan с портом для приставки в bridge, делается это через VLAN.

40

vlan 1 – группа lan, vlan 2 – группа wan. В моем случае порт 1 это порт wan, 4 порт по факту 3, нужно перенести этот порт из vlan 1 в vlan 2. Для этого  указываем в vlan 2 значение “без тега”, а в vlan 1 “выключено”.

Далее рассказ о том как настроить iptv чтобы иметь возможность смотреть его с пк/raspberry/телевизора/холодильника/кофеварки… и если вы не собираетесь смотреть с чего либо кроме iptv приставки то дальше можно не читать.

Читать далее «настройка iptv от ростелеком на openwrt»

vlan на прошивке tomato

На роутере asus rt n12 d1 не настраивается vlan из веб интерфейса, остается только делать это в консоли. Для этого конечно надо зайти по ssh на роутер. Привожу пример изменения LAN1 —> WAN c прошивкой Tomato:

nvram show | grep vlan.ports

В ответ получаем:

vlan0ports=1 2 3 4 5*
vlan1ports=0 5
vlan3ports=
vlan4ports=
vlan5ports=
vlan6ports=
vlan7ports=
vlan8ports=
vlan9ports=

Делаем выводы что vlan0 это LAN порты, а vlan1 это WAN порт.
Исключаем WAN из vlan1, а LAN1 добавляем:

nvram set vlan0ports="2 3 4 5*"
nvram set vlan1ports="1 5"
nvram set manual_boot_nv=1

Сохраняем и перезагружаем роутер:

nvram commit
reboot

Всё! Должно всё работать!
Также этим методом можно выделить LAN порт для iptv приставки, к примеру для провайдера Beeline:

nvram set vlan0ports="1 2 3 5*"
nvram set vlan1ports="0 4 5"
nvram set manual_boot_nv=1
nvram commit
reboot

и так, 4 порт выделен для iptv приставки

Алтернативная прошивка на Asus RT-N12 D1

Для начала, окирпичить этот девайс случайно не получится.

Родная прошивка принимает только свои образы, прошить альтернативные прошивки можно из режима восстановления.
В режиме восстановления загрузчик роутера сливает образ по tftp, мне было влом поднимать tftp и я скачал утиль восстановления asus.

Первым делом я поискал прошивку dd-wrt, но ничего дельного не нашел, а то что нашел было эдак 2010 года.
В идеале подошла бы openwrt, там возможностей больше. Поддержка нужного чипсета есть только в нестабильной ветке, после прошивки прекомпиленной версии я заметил что не работает wi-fi, погуглив я понял что там в основном всего 3 драйвера: b43, wl и еще какой-то. В конечном итоге я забил на openwrt и поставил tomato, мне от прошивки нужен был только igmp для нормальной работы iptv и он там есть, в стандартной прошивке не было. Работает вполне стабильно, кстате драйвер там тот же wl, только на ядре 2.6

nginx webmcr rewrite rules

server {
listen 80;
server_name ordinary-minecraft.ru www.ordinary-minecraft.ru;

root /srv/webmcr/;
index index.php index.html;
location /news {
rewrite ^/news/([^/]+)/?$ /index.php?id=$1 last;
}
location /category {
rewrite ^/category/([^/]+)/?$ /index.php?cid=$1 last;
}
location /list {
rewrite ^/list/([^/]+)/?$ /index.php?l=$1 last;
}
location /control {
rewrite ^/control/([^/]+)/?$ /index.php?mode=control&do=$1 last;
}
location /get {
rewrite ^/get/([^/]+)/?$ /action.php?method=download&file=$1 last;
}
location /go {
rewrite ^/go/([^/]+)/?$ /index.php?mode=$1 last;
}
location = /authenticate {
rewrite ^(.*)$ /MineCraft/auth16x.php last;
}
location = /invalidate {
rewrite ^(.*)$ /MineCraft/invalidate16x.php last;
}
location = /refresh {
rewrite ^(.*)$ /MineCraft/refresh16x.php last;
}
location /game {
rewrite ^/game/joinserver.jsp /MineCraft/joinserver.php last;
}
location / {
try_files $uri $uri/index.php?$uri&$args;
}

location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}

nginx-frontend + nginx-backend и потерявшиеся реальные IP посетителей.

Мы говорим о связке nginx+nginx. Те, кто впервые настраивает такую связку наверняка столкнулись с тем, что nginx-backend пишет в лог (и отдает в PHP/Django и прочее, соответственно) IP фронт-энда. Если в апаче это решалось при помощи mod_rpaf, то в nginx’e всё намного проще.

В секцию http {} или в секцию нужного server {} (если вы упрямы — то можете даже в location {} вписать) пишем следующие строки:
set_real_ip_from 8.8.8.8;
real_ip_header X-Real-IP;

Либо:
set_real_ip_from 192.168.0.0/24;
real_ip_header X-Real-IP;

В директиве set_real_ip_from мы указываем серверы, которым мы доверяем тяжкую ношу по передаче нам IP адресов посетителей (если тут указать чужие серверы — то эти самые чужие серверы смогут вас очень красиво и весело dos-ить с адресов вида 0.0.0.1, например).

Директивой real_ip_header мы указываем откуда брать IP. В данном примере нужно на фронте написать proxy_set_header X-Real-IP $remote_addr; в proxy_pass.

оригинал

nginx как reverse proxy

Конфигурация nginx без ssl

server {
    listen 80;
    server_name mydomain.com;

    location / {
	proxy_pass http://127.0.0.1:8080/;
	proxy_set_header   X-Real-IP $remote_addr;
	proxy_set_header   Host $host;
	proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
    }																							    
}

Конфигурация nginx с ssl

server {
 listen 80;
 server_name mydomain.com;
 return 301 https://$server_name$request_uri; # enforce https
}

server {
        listen            443;
        server_name       mydomain.com;

        access_log       /var/log/nginx/ssl-access.log;

        ssl                     on;
        ssl_protocols           SSLv3 TLSv1;
        ssl_certificate         /etc/nginx/ssl/cert.pem;
        ssl_certificate_key     /etc/nginx/ssl/cert.key;

        location / {
                proxy_pass            https://127.0.0.1:8080/;
                proxy_redirect        off;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For      $proxy_add_x_forwarded_for;
                proxy_set_header Host $host;
                proxy_pass_header Set-Cookie;
        }
}