Виртуальный Каменск

Тематические разделы => Всё о Linux/Unix => Тема начата: userdef от 24 Июня 2009, 22:49:09



Название: OpenWRT
Отправлено: userdef от 24 Июня 2009, 22:49:09
Могу похвастаться первыми результатами работы на OpenWRT на модеме-роутере DLink-504T
Скачанная прошивка меня не устроила. Тормозила, и нестабильно работала. И этот ВЕБ интерфейс достал......
Решился собрать свою(скинул если че к Ведмедю). Установил !

На втором рисунке- прикрутил простейший учет траффика на основе iptables и шелл скриптов.
В планах- сделать систему откючения пользователей от инета, при перерасходе трафа.
Получился роутер класса SOHO на основе железки DLINK!!!!
з.Ы. Скорость инета после установки openwrt стала заметно лучше.......


Название: OpenWRT
Отправлено: userdef от 24 Июня 2009, 22:57:26
Биллинг, блин.
Разделяю траф на WWW и остальной


Название: OpenWRT
Отправлено: Ариец от 25 Июня 2009, 07:46:51
Если бы ты это еще как новость оформил на сайте группы, а ведмед дал бы линк на прошиву, то это было бы круто.  ;)


Название: OpenWRT
Отправлено: userdef от 25 Июня 2009, 09:52:01
Ариедз..... я как закончу работу(допилю учет траффика при перезагрузках роутера) -так оформлю.
Я кстати так и планировал......
а линк downloads.openwrt.org  , а свою прошиву я сам собирал из исходников на svn.openwrt.org


Название: OpenWRT
Отправлено: Ведметь от 25 Июня 2009, 13:08:08
СЦЫЛКО  :smile: (ftp://k-ur.ru/!incoming/!VedmeT/USI_ADSL_best_firmwares/D-Link_DSL-504T_AnnexA/_openwrt-ar7-no-web-iface_/)


Название: OpenWRT
Отправлено: userdef от 25 Июня 2009, 16:02:08
update :

токачто добавил DynDns в openwrt

ща как взрослый роутер ))) тока бы еще поддержка VLAN и VPN...... тогда бы LinkSys(CISCO) курил бы в сторонке


Название: OpenWRT
Отправлено: userdef от 29 Июня 2009, 13:57:05
Бюджетный интернет комбайн для дома и малого офиса на базе OpenWRT  и роутера DLINK DSL-504T

Решил для дома собрать интернет роутер. Причин для этого было несколько:
1. Роутеры я собитать умею.
2. Всвязи с переходом на "Лимитный тариф" интернета(это когда платишь на каждый мегабайт скаченного траффика).
3. Не устраивает ограниченная функциональность роутеров мыльниц(например DLink).
На мыльницу выбор пал по очевидным причинам. Это низкое энергопотребление и никакого шума в работе. Конечно и недостатков полно, например объем оперативной памяти всего 16 мб(пользователям современных ПК с виндовс на борту это звучит как то дико), и объем постоянной памяти(флэш память) - 4МБ. А на это все надо еще и операционку положить, и логи траффика хранить.
В этих условиях нереально хранить статистику по посещаемым сайтам, и по дням. Поэтому делаем так: храним информацию о траффике суммарную по каждому IP сети, как сказали бы бухгалтера "нарастающим итогом". В конце месяца инфу отчищаем, или записываем в файл итогов(это как кому надо). Хранить будем в текстовых файлах(типа у нас выбор есть ;)

Ну чтож, приступим:

1 этап

Сборка прошивки роутера есть на сайте http://downloads.openwrt.org/kamikaze/8.09/ar7/
Для справки, AR7 это архитектура нашего процессора. Выбираем прошивку openwrt-ar7-squashfs.bin
В принципе это готовая к употреблению прошивка, включающая в себя даже WEB интерфейс. Но меня почему-то она не устроила, и я собрал свою. При этом тот же WEB интерфейс и отключил, чтобы не мешал думать :)
Сборка прошивки :
Код:
#apt-get install flex bison autoconf zlib1g-dev libncurses5-dev automake g++ patch gawk
#mkdir /home/trunk
#cd /home/trunk
#svn co https://svn.openwrt.org/openwrt/trunk/
#make menuconfig
#make
Для сборки прошивки понадобитя интернет(линкер качает много всего недостоющего, в т.ч исходники ядра Linux). В опциях MENUCONFIG выбрать платформу AR7.
Ну вот. Если все правильно, через 2 часика соберется прошивка :)) Долгий процесс, из-за кросс-компиляции. У нас то платформа 86 , а там AR7.
В папке "/home/trunk/8.9/bin/ " появится файл openwrt-ar7-squashfs.bin - его та нам и надо )

2 этап

Заливка прошивки в роутер. Дело в том, что для России эти железяки делают с урезанной памятью. Т.Е. вместо 16 МБ оперативки делают 8 МБ. Разлочить это дело можно с помощью утилит, написанных Олегом (http://wl500g.info).

Сама заливка прошивки на роутер(в самом простом случае) выглядит так :
1. Приготовим на компьютере в коммандной строке(у меня Линукс)
Код:
#telnet 192.168.1.199
или сразу
#ftp 192.168.1.199
Отключиль питание от роутера, и через 2 сек. включили. при загрузке, загрузчик  ADAM2 создает на адресе 192.168.1.199 фтп сервер. Быстренько логинимся в него(быстренько-потому что послу 5 секундной задержки ADAM2 начнет загрузку текущей прошивки)
Код:
login: adam2
password:adam2
Если нас известили, что пользователь adam2 успешно залогинился, значит пока все идет по плану ;)
Переходим в папку, где находится файл пришивки

Код:
#cd /home/trunk/8.09/bin/

В интерпритаторе вводим команды:

Код:
#debug
#bin
#hash
#quote "MEDIA FLSH"
#put "openwrt-ar7-squashfs.bin" "openwrt.bin  mtd4"

У меня например надпись об успешной прошивке появилась далеко не с первого раза.
Если все нормально, переходим дальше, если нет......курите документацию, и молите великого ктулху ;)

3 этап

Настройка комбайна

Итак, прошивка лежит на месте. Входим сначала по TELNET, потом надаем пароль для пользователя ROOT, потом уже входим по SSH и отключаем TELNET.

Код:
#telnet 192.168.1.1
#passwd root
#ssh root@192.168.1.1
root@OpenWrt#/etc/init.d/telnet stop
root@OpenWrt#/etc/init.d/telnet disable

Меняем скрипт /etc/init.d/firewall  на самописный

Код:
 #scp /home/firewall root@192.168.1.1:/etc/init.d/firewall
 #ssh root@192.168.1.1
 root@OpenWrt#chmod 755 /etc/init.d/firewall

Меняем файл /etc/config/network  под реалии интернета

Код:
# Copyright (C) 2006 OpenWrt.org

config interface loopback
option ifname lo
option proto static
option ipaddr 127.0.0.1
option netmask 255.0.0.0

config interface lan
option type bridge
option ifname eth0
option proto static
option ipaddr 192.168.1.1
option netmask 255.255.255.0
option nat 1

## Example for ATM bridging.
## Useful for PPPoE or IP over ATM. Will create 'nas${unit}'
#
config atm-bridge
option unit 0
option encaps llc
option vpi  1
option vci  50
option payload bridged # some ISPs need this set to 'routed'


config interface wan
## PPPoE:
option ifname nas0
option proto pppoe

## PPPoA:
# option ifname atm0
# option proto pppoa
# option encaps llc
# option vpi  8
# option vci  35

## Both:
option username "Пользователь_PPPoE"
option password "Пароль_PPPoE"

Пример скрипта /etc/init.d/firewall

Код:
#!/bin/sh

iptables -t filter -F
iptables -t filter -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
# VARIABLES
NB_IP=192.168.1.10
PC_IP=192.168.1.3
#POLICIES & DEFAULTS
iptables -P INPUT  DROP
iptables -P FORWARD  DROP
iptables -P OUTPUT  ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#CUSTOM CHAINS
iptables -N NOTEBOOK_WWW
iptables -N MAIN_WWW
iptables -N NOTEBOOK_OTHER
iptables -N MAIN_OTHER

iptables -A NOTEBOOK_WWW -j ACCEPT
iptables -A NOTEBOOK_OTHER -j ACCEPT
iptables -A MAIN_WWW -j ACCEPT
iptables -A MAIN_OTHER -j ACCEPT

iptables -A FORWARD -p icmp -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
#INPUTS
iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT
# FORWARDS CUSTOM
#iptables -A FORWARD -s 192.168.1.0/24 -j ACCEPT

iptables -A FORWARD -s $PC_IP -p tcp --dport 80 -j MAIN_WWW
iptables -A FORWARD -s $PC_IP -p tcp --dport ! 80 -j MAIN_OTHER
iptables -A FORWARD -s $PC_IP -p ! tcp -j MAIN_OTHER
iptables -A FORWARD -d $PC_IP -p tcp --sport 80 -m state --state ESTABLISHED,RELATED -j MAIN_WWW
iptables -A FORWARD -d $PC_IP -p tcp --sport ! 80 -m state --state ESTABLISHED,RELATED -j MAIN_OTHER
iptables -A FORWARD -d $PC_IP -p ! tcp -m state --state ESTABLISHED,RELATED -j MAIN_OTHER



iptables -A FORWARD -s 192.168.1.4 -j MAIN_WWW
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -d 192.168.1.4 -j MAIN_WWW


iptables -A FORWARD -s $NB_IP -p tcp --dport 80 -j NOTEBOOK_WWW
iptables -A FORWARD -s $NB_IP -p tcp --dport ! 80 -j NOTEBOOK_OTHER
iptables -A FORWARD -s $NB_IP -p ! tcp -j NOTEBOOK_OTHER
iptables -A FORWARD -d $NB_IP -p tcp --sport 80 -m state --state ESTABLISHED,RELATED -j NOTEBOOK_WWW
iptables -A FORWARD -d $NB_IP -p tcp --sport ! 80 -m state --state ESTABLISHED,RELATED -j NOTEBOOK_OTHER
iptables -A FORWARD -d $NB_IP -p ! tcp -m state --state ESTABLISHED,RELATED -j NOTEBOOK_OTHER
#MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE

Как видно из скрипта, у меня 2 компа- ноутбук с IP=192.168.1.10 и основной ПК с IP=192.168.1.3
Траффик я решил делить на "Веб траффик" и "НеВеб траффик". Создаем 4 цепочки правил : MAIN_WWW, MAIN_OTHER, NOTEBOOK_WWW, NOTEBOOK_OTHER
Весь траффик так или иначе будет попадать в одну из цепочек. Ну а сосчитать траффик в каждой- это умеет IPTABLES(iptables -L <цепочка> -nvx).

Привожу пример скриптов формирования отчетов и сохранения показателей счетчиков при перезагрузке роутера.

/www/count.sh
Код:
#!/bin/sh

sh /www/ipt
file=/www/index.html;
nb_www=$(cat /www/NOTEBOOK_WWW);
nb_ot=$(cat /www/NOTEBOOK_OTHER);
pc_www=$(cat /www/MAIN_WWW);
pc_ot=$(cat /www/MAIN_OTHER);


echo > $file;
echo '<html><body>' >> $file;
echo '<H1>Traffic counter</H1> <br>' >> $file;

echo 'Notebook(www) = ' >> $file;
echo $(($nb_www/1024)) >> $file;
echo ' kB' >> $file;
echo '<br>' >> $file;

echo 'Notebook(other) = ' >> $file;
echo $(($nb_ot/1024)) >> $file;
echo ' kB' >> $file;
echo '<br>' >> $file;

echo 'Main(www) = ' >> $file;
echo $(($pc_www/1024)) >> $file;
echo ' kB' >> $file;
echo '<br>' >> $file;

echo 'Main(other) = ' >> $file;
echo $(($pc_ot/1024)) >> $file;
echo ' kB' >> $file;
echo '<br><br>' >> $file;
IT=$(cat /www/ITOG);ITOG=$(($IT/1024))
echo '<H2>SUMM '$ITOG' kB</H2>' >> $file;
echo '<hl><br>' >> $file;
echo $(date) >> $file;
echo '</body></html>' >> $file;

/www/ipt
Код:
#!/bin/sh

nbw=$(iptables -L NOTEBOOK_WWW   -nvx|grep ACCEPT|awk {'print $2'})
nbwf=$(cat /www/NOTEBOOK_WWW)
nb1=$(($nbwf+$nbw))
echo $nb1>/www/NOTEBOOK_WWW
iptables -L NOTEBOOK_WWW -nvZ > /dev/null

nbo=$(iptables -L NOTEBOOK_OTHER -nvx|grep ACCEPT|awk {'print $2'})
nbof=$(cat /www/NOTEBOOK_OTHER)
nb2=$(($nbo+$nbof))
echo $nb2>/www/NOTEBOOK_OTHER
iptables -L NOTEBOOK_OTHER -nvZ > /dev/null

mw=$(iptables  -L MAIN_WWW       -nvx|grep ACCEPT|awk {'print $2'})
mwf=$(cat /www/MAIN_WWW)
m1=$(($mwf+$mw))
echo $m1>/www/MAIN_WWW
iptables -L MAIN_WWW -nvZ > /dev/null

mo=$(iptables  -L MAIN_OTHER -nvx|grep ACCEPT|awk {'print $2'})
mof=$(cat /www/MAIN_OTHER)
m2=$(($mof+$mo))
echo $m2>/www/MAIN_OTHER
iptables -L MAIN_OTHER -nvZ > /dev/null
itog=$(($nb1+$nb2+$m1+$m2));export ITOG=$itog
echo $ITOG>/www/ITOG

Скрипт count.sh должет отрабатывать по cron у. Он создает файл index.html в папке
  /www - это корневая папка WEB сервера openwrt.

Что это дало ???
1. Повышение скорости работы интернет(у меня безлимитка 1МБ, канал стал по настоящему 1МБ)
2. Возможности подсчета траффика
3. Переброс портов и DDNS есть и в стандартной прошивке, но на линуксе они гибче настраиваются.
4. Возможности расширения функционала.При наличии терпения, можно запихать туда OpenVPN, OpenSWAN, SQUID

На OPENWRT можно утанавливать пакеты так же как и на обычный линукс(есть утилита opkg, схожая по функциям с дебиановской apt-get)
Ну вот соссно и фсе !!! по тому же крону читстите показания iptables и файлы хранилищ в конце месяца. Дальнейшие навороты сделаете сами ! Пока.userdef.


Название: OpenWRT
Отправлено: Ариец от 29 Июня 2009, 14:14:42
Это плюс. Очепятки подправить и хоть щас на http://kamensk.net ;)

Как вариант можно попробовать поднять cryptcat (аналог netcat) и подробную статистику лить на взрослый комп по крону или при наличии подключения. Если подключения нет, то логи тереть, оставив только суммарную информацию. Такое не каждый взрослый роутер умеет  ;). Как-то так.


Название: OpenWRT
Отправлено: userdef от 29 Июня 2009, 14:19:02
Это плюс. Очепятки подправить и хоть щас на [url]http://kamensk.net[/url] ;)

Как вариант можно попробовать поднять cryptcat (аналог netcat) и подробную статистику лить на взрослый комп по крону или при наличии подключения. Если подключения нет, то логи тереть, оставив только суммарную информацию. Такое не каждый взрослый роутер умеет  ;). Как-то так.

Оставь свой email, я те скину текст статьи в TXT формате. И Поправишь опечатки, и выложишь на kamensk.net
P.S. Надо понимать, что дисковое пространство ОООООООЧЕНЬ ограниченно! Прошивка занимает 2.3 метра. Уменьшить ее можно, но тоже не до прежела. Е меня после установки mc, ip, tc осталось 600 кб
Кстати вспомнил. с помощью утилиты TC можно офигенно гибко ограничивать пропускную способность траффика.


Название: OpenWRT
Отправлено: Ариец от 29 Июня 2009, 14:22:03
Это плюс. Очепятки подправить и хоть щас на [url]http://kamensk.net[/url] ;)

Как вариант можно попробовать поднять cryptcat (аналог netcat) и подробную статистику лить на взрослый комп по крону или при наличии подключения. Если подключения нет, то логи тереть, оставив только суммарную информацию. Такое не каждый взрослый роутер умеет  ;). Как-то так.

Оставь свой email, я те скину текст статьи в TXT формате. И Поправишь опечатки, и выложишь на kamensk.net


Я текст могу и отсюда взять. У тебя там кликуха gartphild, вроде, да?
from Userdef: ага!!!  тока garphild я.... и если не влом включи текст про TC в статью..... а то мне влом уже ;)


Название: OpenWRT
Отправлено: Ведметь от 01 Июля 2009, 18:27:22
userdef, ЖЖОШ!
Оффтоп: Ариец, вбиваю сегодня в гугле "ядра линукс" получаю ссылку на каменск.нет на первой странице. ЖЖОШ!


Название: Re: OpenWRT
Отправлено: dellby от 12 Января 2010, 19:44:22
Пытаюсь сделать прошивку для dlink 3340s. На сайте написано , что он поддерживается.
Выбираю процессор
модуль wifi и др. пакеты
после компиляции прошивки в bin вижу кучу (штук 20)скомпилированных  файлов
 openwrt-AG1B-jffs2-128k-code
...
openwrt-ar7-squashfs.bin
...
openwrt-WAG54GP2v2-squashfs-code.bin

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