OpenWrt |
Автор: admin Просмотров: 14871 Комментарии: 1
Добавлен: 17 января 2020
Обновлено: 20.04.2020 - 12:05
Прошивка на основе Linux для беспроводных маршрутизаторов и точек доступа.
Основные компоненты это Linux, util-linux, uClibc or musl и BusyBox. Все компоненты оптимизированы по размеру, что бы быть компактными для установки на домашние маршрутизаторы. OpenWRT настраивается с помощью интерфейса командной строки (оболочки ash) или веб-интерфейса (LuCI). Есть около 3500 пакетов дополнительного программного обеспечения, доступного для установки через систему управления пакетами opkg.
OpenWRT может работать на различных типах устройств, в том числе на CPE маршрутизаторах, домашних шлюзах, смартфонах (например, Neo FreeRunner), карманных компьютерах (например, Ben NanoNote) и ноутбуках (например, OLPC). Также можно запускать OpenWRT на обычных компьютерах с архитектурой x86. Многие патчи из кодовой базы OpenWrt были включены в Linux.
Возможности OpenWrt
- Перезаписываемая корневая файловая система, что позволяет пользователям добавлять, изменять или удалять любой файл.
- Менеджер пакетов OPKG, похожий на DPKG и позволяет устанавливать и удалять программное обеспечение. Хранилище пакетов содержит около 3500 пакетов.
- Набор скриптов UCI (унифицированный интерфейс конфигурации) предназначен для унификации и упрощения настройки всей системы.
- Конфигурирование всех драйверов, например, встроенные сетевые коммутаторы и их VLAN-возможности, WNICs, DSL modems, FX, аппаратные кнопки.
Настройка сетевых функций:
- IPv4
- IPv6:
- Обработка префиксов.
- Настройка IPv6 (SLAAC, stateless DHCPv6, stateful DHCPv6, DHCPv6-PD).
- IPv6 транзитные технологии (6rd, 6to4, 6in4, ds-lite, lw4o6, map-e).
- Downstream IPv6 configuration (Router Advertisement, DHCPv6 (stateless and stateful) and DHCPv6-PD).
- Маршрутизация через iproute2, Quagga, BIRD, etc.
- Ячеистая топология через B.A.T.M.A.N., OLSR и IEEE 802.11s-совместимые WNIC драйвера.
- wifi повторители, точки доступа, мосты, captive portal.
- Безопасность: Packet injection, e.g. Airpwn, lorcon, e.a.
- SPI, NAT, port forwarding through netfilter и PeerGuardian
- dynamically-configured port forwarding protocols UPnP and NAT-PMP through upnpd, etc.
- port knocking via knockd and knock
- TR-069
- IPS via Snort (software)
- Активное управление очередью через сетевой планировщик Linux. CodeL инкапсулирует трафик для обеспечения справедливого распределения полосы пропускания между несколькими пользователями и качества обслуживания (QoS) для одновременного использования таких приложений как VoIP, онлайн-игр и потокового медиа, не испытывая негативные последствия переполнения линии.
- Балансировки нагрузки для использования с несколькими провайдерами интернета.
- IP tunneling
- Расширяемый в реальном времени мониторинг и статистика через сеть, например, RRDtool, collectd, Nagios, Munin Lite, Zabbix и т.д.
- Domain Name System (DNS) и DHCP через Dnsmasq, MaraDNS, etc.
- Dynamic DNS для поддержания фиксированного доменного имени с интернет-провайдером, который не обеспечивает статический IP- адрес.
- WDS с смешанными режимами шифрования WPA-PSK, WPA2-PSK, WPA-PSK/WPA2-PSK Mixed-Mode
OpenWRT поддерживает любое оборудование поддерживаемое в Linux.
Устройства подключаемые через USB: принтеры, мобильные широкополосные модемы, вебкамеры, звуковые карты.
Программные пакеты, использующие аппаратное обеспечение:
- Обмен файлами через SAMBA (совместимо с Windows), NFS и FTP, сетевая печать через CUPS (spooling) или p910nd (non-spooling)
- PulseAudio, Music Player Daemon, Audio/Video потоки через стандарт DLNA/UPnP AV, сервер iTunes (DAAP)
- Asterisk (PBX)
- MQ Telemetry Transport through Mosquitto.
- Веб-интерфейс на Ajax.
- Регулярные обновления и исправления ошибок, даже для устройств, которые больше не поддерживаются производителями.
Веб-интерфейс
Начиная с версии 8.09, OpenWrt имеет свой веб-интерфейс. Этот интерфейс основан на LuCI, в MVC Framework, написанный на языке программирования Lua.
Проект X-WRT обеспечивает альтернативный веб-интерфейс, названный webif в хранилище пакетов для текущих и предыдущих версий OpenWRT.
Gargoyle Router Management Utility это веб-интерфейс для OpenWRT с акцентом на удобство использования. Он поставляется в виде набора пакетов для OpenWrt.
https://en.wikipedia.org/wiki/OpenWrt
Настройка OpenWRT
Вы установили Openwrt. Если сразу после установки прошивки Openwrt роутер раздает интернет, то вам повезло.
Я сначала подключаюсь к внутренней сети провайдера, а в интернет выхожу через сервер pptp 10.1.0.10. Для поддержки pptp требуются дополнительные программы и драйвера, которые по умочанию не установлены в Openwrt.
Возникает законный вопрос: а как установить все это без подключения к интернету ?
Отвечаю: OpenWRT является универсальной прошивкой и невозможно включить в образ прошивки все типы подключений, так как на роутерах очень мало места (даже меньше мегабайта).
Настраиваем связь, раздачу интернета на локальные компьютеры и wifi.
Я подключил роутер к Интернету по сетевому кабелю через другой компьютер ?
Как сделать выход в интернет на два компьютера подробно рассказано по адресу https://linexp.ru/advice/sharenetworktwocomputers.html
Замечу только то, что кабель от компьютера-шлюза для подключения роутера к wifi должен быть в WAN-порте (синее гнездо).
Заходим на роутер по ssh
ssh root@192.168.1.1
Устанавливаем необходимые драйвера и программы:
root@OpenWrt:/# opkg update
root@OpenWrt:/# opkg install kmod-mppe ppp ppp-mod-pptp kmod-mppe kmod-crypto kmod-nf-nathelper-extra kmod-pptp
Перезагружаем:
root@OpenWrt:/# reboot
Вынимаем кабель от компьютера-шлюза и подключаем кабель от провайдера.
Заходим на роуетр по ssh:
ssh root@192.168.1.1
Подключаем роутер к провайдеру:
root@OpenWrt:/# udhcpc eth0
Эту команду можно выполнить в веб-интерфейсе OpenWRT по адресу 192.168.1.1:
Если связь есть, то через пару секунд появятся несколько адресов. Проверим связь с pptp-сервером провайдера, в моём случае это 10.1.0.10:
root@OpenWrt:~# ping 10.1.0.10
PING 10.1.0.10 (10.1.0.10): 56 data bytes
64 bytes from 10.1.0.10: seq=0 ttl=63 time=0.893 ms
64 bytes from 10.1.0.10: seq=1 ttl=63 time=0.563 ms
Связь с 10.1.0.10 есть.
В роутере на интерфейсе LAN включите DHCP для динамической раздачи адресов. Всё должно быть вот так:
Выход в Интернет через PPTP.
Создаем сетевой интерфейс pptp:
Заходим на веб-интерфейс роутера по адресу 192.168.1.1 в Network > Interfaces и нажимаем Add new connectoin
Выбираем тип протокола pptp и связь с интерфейсом eth0" (wan, wan6). В следующем окне вводим логин и пароль от провайдера.
Но это еще не всё, на данном этапе можно попробовать подключиться, но в моем случае ничего не выйдет.
Я менял настройки pptp в файлах options и options.pptp
root@OpenWrt:/# vi options (vi -текстовый редактор). Нажимаем клавишу Insert и вставляем:
persist
maxfail 0
lcp-echo-failure 5
lcp-echo-interval 1
Сохранение и выход: клавиша ESC, двоеточие (:) и wq.
В файл options.pptp таким же образом добавляем следующие настройки:
usepeerdns
refuse-eap
noauth
nomppe
persist
maxfail 0
holdoff 10
Запись pptp в настройках OpenWRT (файл /etc/config/network):
config interface 'pptp'
option proto 'pptp'
option username 'login'
option password 'password'
option maxfail '0'
option demand '0'
option keepalive '10 10'
option server '15.2.1.10'
Теперь в веб-интерфейсе включаем pptp и через пару секунд должен появится сетевой адрес на pptp:
Если связи нет, нужно проверить системные журналы командами logread и dmesg в командной строке OpenWRT.
Там может быть сообщение на английском что неверный логин, нет доступа к 10.1.0.10 или не оплачен доступ. Также могут не подойти мои настройки или нужны другие специальные драйвера.
Если интернет подключен, то по команде logread вы увидете сообщение на английсом о успешном входе и полученные ip-адреса для выхода в Интернет.
Восстанавливаем выход в Интернет после обрыва связи.
#!/bin/ash
#можно ещё так проверять подключение:
#wget -q https://site.ru/test.file > test.file
#size=$(du test.file|head -c 1)
# скрипт автоматически запускается через планировщик cron. В /etc/crontab запись */20 * * * * /root/pppd.sh
# Проверка подключения. Если есть коннект - выходим. Если нет, ждём 5 минут пока pppd не подключится сам.
# Я выхожу в Интернет через локальную сеть провайдера по протоколу PPTP программой pppd. Через локальную сеть можно зайти на сайт провайдера и в биллинг, для этого в таблице маршрутов должен быть "маршрут по умолчанию" через eth0 (на моём роутере eth0 - это br-wan). При выходе в Интернет этот маршрут заменяется на другой и не восстанавливается, если закрыть соединение с Интернет.
i=1
while true
do
sleep 30
ping=$(ping -c 20 8.8.8.8|grep 'received'|head -c 25|tail -c 2)
ping=$(expr $ping + 0) || ping=0 #если $ping имеет не целочисленное значение, приравниваем его к нулю.
if [ $ping -eq 0 ]
then
ifdown pptp
killall -s 9 pppd
ifdown wan
ifup wan
ifup pptp
sleep 5
route add default dev br-wan
route del default dev br-wan gw 0.0.0.0
/root/resolv1.sh #копируем соответствующий resolv.conf и перезагружаем dnsmasq (если прямо в сюда вставить команду cat /tmp/resolv.conf > /etc/resolv.conf она не запустится при работе скрипта в фоновом режиме, работает только в интерактивном режиме. Но если вывести в отдельный скрипт, работает. Может подскажите почему так и как исправить ? )
fi
ping=$(ping -c 20 8.8.8.8|grep 'received'|head -c 25|tail -c 2)
ping=$(expr $ping + 0) || ping=0
if [ $ping -eq 0 ]
then
/root/resolv.sh #копируем соответствующий resolv.conf и перезагружаем dnsmasq
fi
done
Цитата:
Если знаете где в OpenWRT лежит журнал команды logread, напишите пожалуйста !
Идём далее.
Настройка usb модемов UMTS/GPRS/EV-DO
Для начала нужно установить поддержку USB, как описано ниже.
Далее нужно установить пакеты luci-proto-3g chat comgt usb-modeswitch для поддержки модемов. Это можно сделать через веб-интернейс.
Вставляем модем в USB и перезагружаем роутер.
В веб-интерфейсе в разделе Network создаем новый интерфейс UMTS/GPRS/EV-DO
Все настройки, кроме Modem device уточняйте у провайдера.
Если модем не подключается, причина может быть в следующем. По умолчанию во всех usb-модемах включен эмулируемых CD ROM для установки программы выхода в Интернет под Windows. Для выхода в Интернет в Линуксе и в роутерах на основе Линукса, нужно извлечь этот CD ROM. В обычном Линуксе это можно сделать вручную командой eject /dev/sr1 или автоматически при помощи программы usb-modeswitch, хотя новый Network Manager подключает Интернет через модем без извлечения CD ROM. Проверить, отключился ли CD ROM можно в журнале kernel log (веб-интерфейс) или в консоли командой dmesg. Если в журнале будет надпись CD ROM, значит CD ROM не извлечён. У меня вывод dmesg с подключением модема выглядит так:
dmesg
[41450.650000] usb 1-1: new high-speed USB device number 4 using ehci-platform
[41450.870000] option 1-1:1.0: GSM modem (1-port) converter detected
[41450.870000] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB0
[41450.880000] option 1-1:1.1: GSM modem (1-port) converter detected
[41450.890000] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB1
[41450.900000] usb-storage 1-1:1.3: USB Mass Storage device detected
[41450.910000] scsi host3: usb-storage 1-1:1.3
[41451.920000] scsi 3:0:0:0: Direct-Access HUAWEI TF CARD Storage 2.31 PQ: 0 ANSI: 2
[41451.930000] sd 3:0:0:0: [sda] Attached SCSI removable disk
[41450.870000] option 1-1:1.0: GSM modem (1-port) converter detected
[41450.870000] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB0
[41450.880000] option 1-1:1.1: GSM modem (1-port) converter detected
[41450.890000] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB1
[41450.900000] usb-storage 1-1:1.3: USB Mass Storage device detected
[41450.910000] scsi host3: usb-storage 1-1:1.3
[41451.920000] scsi 3:0:0:0: Direct-Access HUAWEI TF CARD Storage 2.31 PQ: 0 ANSI: 2
[41451.930000] sd 3:0:0:0: [sda] Attached SCSI removable disk
С программой usb-modeswitch старый модем MF180S подключается на роутере без вопросов. Но с новыми модемами не всё так просто.
На новом модеме Huawei E3372 (3g и 4g + 2 антенны) usb-modeswitch не смог извлечь CD ROM, а извлечь его вручную командой eject невозможно, так как в каталоге /dev нет устройства sr. Но выход есть. Чтобы выйти в Интернет на OpenWRT через этот модем, на самом модеме нужно отключить CD ROM.
В Линуксе это можно сделать через программу minicom для управления модемами. Запускаем minicom в терминале:
root@test:~# minicom -s
+-----------[конфигурация]-----------+
| Каталоги и файлы |
| Протоколы |
| Настройка последовательного порта |
| Модем и дозвон |
| Экран и клавиатура |
| Сохранить настройки как dfl |
| Сохранить настройки как... |
| Выход |
| Выход из Minicom |
+------------------------------------+
Выбираем "Настройка последовательного порта" и нажимаем Enter
+-----------------------------------------------------------------------+
| A - Последовательный порт : /dev/ttyUSB0 |
| B - Размещение lock-файла : /var/lock |
| C - Программа при выходе : |
| D - Программа при запуске : |
| E - Скорость/Чётность/Биты : 115200 8N1 |
| F - Аппаратное управление потоком : Да |
| G - Программное управление потоком : Нет |
| |
| Какую настройку изменить? |
+-----------------------------------------------------------------------+
Переходим в "Последовательный порт" нажатием клавиши A и вводим путь к своему USB модему. Обычно это /dev/ttyUSB0, но может быть /dev/ttyUSB1, 2, 3 или т.д. Просмотреть список всех устройств можно введя в консоли команду:
root@OpenWrt:/# ls /dev
Далее жмём Enter и Esc
Открывается консоль ввода команд на модем:
------------------------------
Добро пожаловать в minicom 2.7
ПАРАМЕТРЫ: I18n
Дата компиляции Apr 25 2017, 21:09:25.
Port /dev/ttyUSB0, 13:02:58
Нажмите CTRL-A Z для получения подсказки по клавишам
Тут можно узнать версию модема (команда ati), менять режими модема и выполнять сотни других манипуляций. Вводимые команды у меня почему-то не отображаются, но это не страшно. Отключаем CD ROM командой :
at^setport="ff;10,12,16,a2"
OK
Сразу же появилось сообщение "OK". Для выхода из minicom нажимаем клавиши CTRL-A, а затем q и Enter
Добро пожаловать в minicom 2.7
ПАРАМЕТРЫ: I18n
Дата компиляции Apr 25 2017, 21:09:25.
Port /dev/ttyUSB0, 13:02:58
Нажмите CTRL-A Z для получени+----------------------+
| Выйти без сброса? |
| Да Нет |
Manufacturer: huawei +----------------------+
Model: E3372
Revision: 21.180.01.00.00
IMEI: 865035035321603
+GCAP: +CGSM,+DS,+ES
OK
OK
CTRL-A Z for help | 115200 8N1 | NOR | Minicom 2.7 | VT102 | Не
Если сообщение "OK" не появилось, нужно выйти из minicom. Извлечь модем и воткнуть его заново в USB.
Чтобы вернуть CD ROM, введите команду:
at^setport="FF;10,12,16,5,A,A1,A2"
Эти команды рассчитаны на модем Huawei E3372, но могут работать и на других моделях Huawei. Если нет, то будет сообщение "Error"
Некоторые полезные команды для модема Huawei E3372:
AT^SYSCFG="2,2,3FFFFFFF,1,2" - сброс на заводские настройки (reset to factory settings). Мне это помогло, когда после экспериментов модем разучился смотреть баланс и читать смски.
AT^GETPORTMODE - показывает к какой сети подключен модем.
AT+CSQ - показывает уровень сигнала в децибелах.
Команды USB модемов:
https://3ginfo.ru/page53.html
https://dev.turn-guild.ru/?p=313
https://unlock-code.ru/page4.html
Если CD ROM отключился, а модем все равно не подключается к Интернет, смотрите system log (команда logread) или попробуйте мои настройки:
файл /etc/ppp/peers/3g
user "kievstar"
connect "/usr/sbin/chat -v -f /etc/chatscripts/3g.chat -T xl.kyivstar.net"
/dev/ttyUSB0
noipdefault
#defaultroute
#replacedefaultroute
hide-password
#lcp-echo-interval 30
#lcp-echo-failure 4
noauth
persist
#mtu 1492
#maxfail 0
#holdoff 20
usepeerdns
#Optional, make it always appear as ppp2:
#unit 2
connect "/usr/sbin/chat -v -f /etc/chatscripts/3g.chat -T xl.kyivstar.net"
/dev/ttyUSB0
noipdefault
#defaultroute
#replacedefaultroute
hide-password
#lcp-echo-interval 30
#lcp-echo-failure 4
noauth
persist
#mtu 1492
#maxfail 0
#holdoff 20
usepeerdns
#Optional, make it always appear as ppp2:
#unit 2
Файл /etc/chatscripts/3g.chat
ABORT BUSY
ABORT 'NO CARRIER'
ABORT ERROR
REPORT CONNECT
TIMEOUT 10
"" "AT&F"
OK "ATE1"
OK 'AT+CGDCONT=1,"IP","xl.kyivstar.net"'
SAY "Calling 3g"
TIMEOUT 30
OK "ATD*99#"
CONNECT ' '
ABORT 'NO CARRIER'
ABORT ERROR
REPORT CONNECT
TIMEOUT 10
"" "AT&F"
OK "ATE1"
OK 'AT+CGDCONT=1,"IP","xl.kyivstar.net"'
SAY "Calling 3g"
TIMEOUT 30
OK "ATD*99#"
CONNECT ' '
Файл /etc/ppp/options-mobile
/dev/ttyUSB0
921600
defaultroute
usepeerdns
crtscts
lock
noauth
local
persist
modem
nopcomp
novjccomp
nobsdcomp
nodeflate
noaccomp
ipcp-accept-local
ipcp-accept-remote
noipdefault
921600
defaultroute
usepeerdns
crtscts
lock
noauth
local
persist
modem
nopcomp
novjccomp
nobsdcomp
nodeflate
noaccomp
ipcp-accept-local
ipcp-accept-remote
noipdefault
Для раздачи Интернета, на интерфейсах выходящих в Интернет в Firewall Settings назначте зону файрвола, пример:
Аналогично и для usb модема, если вы выходите в Интернет через него.
Включаем Wifi на роутере в веб-интерфейсе: network/interfaces/wifi/ кнопка Enable
В Operating frequency ставим режим Legacy для ipod/ipad и устаревших wifi-адаптеров.
В поле Interface Configuration назначаем название точки, режим Access Point и Network LAN
Во вкладке Advanced Settings выбираете регион. В настройках Wireles security выберите тип шифрования или оставьте без шифрования (я выбрал wpa2-psk). Поле chiper ставьте auto, в поле key введите пароль на точку доступа wifi.
Во вкладке MAC-filter можно назначить список MAC-адресов (уникальных адресов сетевых карт) которым нужно разрешить подключаться к точке wifi (Allow listed only) или запретить (Allow all execpt listed).
На клиентском компьютере настройте сетевую карту на автоматический прием адресов:
Если выхода в Интернет все равно не будет, то в командной строке роутера выполните следующие команды:
root@OpenWrt:/# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
root@OpenWrt:/# sysctl -p /etc/sysctl.conf
root@OpenWrt:/# iptables -t nat -A POSTROUTING -o pptp-pptp -j MASQUERADE, где pptp-pptp - название вашего интерфейса pptp:
и запишите их в файл /etc/rc.local
Родительский контроль и защита от вирусов в OpenWRT
Желающим оградить себя и семью от контента "для взрослых" есть бесплатный сервис Яндекс ДНС, который блокирует почти все сайты "для взрослых" и включает семейные фильтры в популярных поисковых системах. При попытке зайти на сайт "для взрослых", браузер покажет такое сообщение о блокировке
А при попытке поиска адалта в поисковых системах, вы получите хорошо отфильтрованные результаты или сообщение что ничего не найдено.
Включить Яндекс ДНС на локальном компьютере очень просто, достаточно лишь в настройках подключения прописать соответствующие ДНС из сайта https://dns.yandex.ua/ нажать ОК и тут же все "взрослые сайты" будут заблокированы.
Но чтобы адалт блокировался на всех компьютерах, подключенных к роутеру, не обязательно настраивать каждый компьютер. Достаточно настроить роутер, а в настройках компьютеров выставить получение ДНС автоматически.
В фирменных прошивках достаточно вписать ip-адреса ДНС Яндекс в соответстующие поля в веб-интерфейсе. Но в OpenWRT это не сработает.
Заходим на роутер по ssh и правим конфиги.
Добавляем адреса днс Яндекса в /etc/init.d/dnsmasq.
На всякий случай сделайте резервную копию этого файла!
Строка DNS SERVER:
DNS_SERVERS="77.88.8.3 77.88.8.7"
Ищем конструкцию:
[ $ADD_LOCAL_DOMAIN -eq 1 ] && [ -n "$DOMAIN" ] && {
echo "search $DOMAIN" >> /tmp/resolv.conf
прописываем ДНС и меняем resolv.conf.auto на resolv.conf. Должно получиться примерно так:
[ $ADD_LOCAL_DOMAIN -eq 1 ] && [ -n "$DOMAIN" ] && {
echo "search $DOMAIN" >> /tmp/resolv.conf
}
DNS_SERVERS="77.88.8.3 77.88.8.7"
for DNS_SERVER in $DNS_SERVERS ; do
echo "nameserver $DNS_SERVER" >> /tmp/resolv.conf
done
}
В файле /etc/config/dhcp (как пользоваться текстовым редактором vi смотрите выше)
Пишем
list server '77.88.8.3'
list server '77.88.8.7'
И перезагружаем dnsmasq:
root@OpenWrt:/# /etc/init.d/dnsmasq restart
Как через iptables заблокировать доступ по MAC-адресам ?
Для этого нужно установить дополнения к брандмауэру iptables :
root@OpenWrt:/# opkg install iptables-mod-conntrack-extra iptables-mod-nat-extra iptables-mod-filter
Просто заблокировать пользователя можно так:
root@OpenWrt:/# iptables -I INPUT -m mac --mac-source 00:1B:77:40:99:E2 -j FORWARD
Блокировать MAC-адрес на указанное время можно так:
root@OpenWrt:/# iptables -I FORWARD -m mac --mac-source 9C:4E:36:68:A7:54 -m time --timestart 20:00:00 --timestop 04:00:00 --kerneltz -j DROP
В этом примере мы блокируем доступ с 20:00 до 04:00.
Чтобы после перезагрузки не вводить эти команды заново, допишите их в файл /etc/rc.local или в веб-интерфейс Openwrt >Network>Firewal>Custom Rulesl, но лучше в /etc/rc.local
Как через iptables ограничить скорость загрузки и отдачи по IP и по MAC на OpenWRT ?
Ограничение скорости загрузки:
root@OpenWrt:~# tc qdisc add dev wlan0 root handle 1: htb default 1
root@OpenWrt:~# tc class add dev wlan0 parent 1: classid 1:1 htb rate 100Mbit prio 0
root@OpenWrt:~# tc class add dev wlan0 parent 1: classid 1:50 htb rate 512Kbit prio 5
root@OpenWrt:~# tc filter add dev wlan0 parent 1: protocol ip prio 1 u32 match ip dst 192.168.1.136 flowid 1:50
(для блокировки по MAC: tc filter add dev wlan0 parent 1: protocol ip prio 1 u32 match ether dst 9c:4e:36:68:a7:54 flowid 1:50)
Ограничение скорости отдачи:
tc qdisc add dev wlan0 handle ffff: ingress
tc filter add dev wlan0 parent ffff: protocol ip prio 50 u32 match ip src 192.168.1.136 police rate 2Mbit burst 12k drop flowid :1
(для блокировки по MAC: tc filter add dev ifb0 parent 1: protocol ip prio 1 u32 match ether src 9c:4e:36:68:a7:54 flowid 1:50)
Как получить ssh доступ на роутер OpenWRT из удаленного компьютера в Интернете ?
Открываем веб-интерфейс, обычно по адресу 192.168.1.1, далее Network > Firewall > Custom Rules
пишем команды:
WAN='pptp-pptp' (возьмите своё название подключения на выход в Интернет):
iptables -A input_rule -i $WAN -p tcp --dport 22 -j ACCEPT
И перезапустите роутер. Чтобы не перезапускать, вставьте эти команды командную строку заменив WAN на название своего выхода в Интернет.
Установка и настройка внешнего диска на ntfs, fat и ext
opkg update
opkg install kmod-usb-ohci
opkg install kmod-usb-storage
opkg install kmod-usb2
opkg install block-mount
opkg install ntfs-3g (для пользователей ntfs на usb носителях)
opkg install kmod-fs-vfat
Подкючием внешний носитель
Проверить работают ли драйверы usb можно по команде dmesg
Раскрыть
root@OpenWrt:~# dmesg:
[ 5664.870000] usb 1-1: new high-speed USB device number 2 using ehci-platform
[ 5894.210000] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
[ 5894.220000] ohci-platform: OHCI generic platform driver
[ 5906.040000] SCSI subsystem initialized
[ 5906.130000] usb-storage 1-1:1.0: USB Mass Storage device detected
[ 5906.140000] scsi host0: usb-storage 1-1:1.0
[ 5906.150000] usbcore: registered new interface driver usb-storage
[ 5907.150000] scsi 0:0:0:0: Direct-Access WD My Book 1170 1042 PQ: 0 ANSI: 6
[ 5907.160000] scsi 0:0:0:1: Enclosure WD SES Device 1042 PQ: 0 ANSI: 6
[ 5907.280000] sd 0:0:0:0: [sda] 732558336 4096-byte logical blocks: (3.00 TB/2.72 TiB)
[ 5907.290000] sd 0:0:0:0: [sda] Write Protect is off
[ 5907.290000] sd 0:0:0:0: [sda] Mode Sense: 53 00 10 08
[ 5907.300000] sd 0:0:0:0: [sda] No Caching mode page found
[ 5907.300000] sd 0:0:0:0: [sda] Assuming drive cache: write through
[ 5907.310000] sd 0:0:0:0: [sda] 732558336 4096-byte logical blocks: (3.00 TB/2.72 TiB)
[ 5907.340000] sda: sda1
[ 5907.350000] sd 0:0:0:0: [sda] 732558336 4096-byte logical blocks: (3.00 TB/2.72 TiB)
[ 5907.370000] sd 0:0:0:0: [sda] Attached SCSI disk
[ 5987.380000] fuse init (API version 7.23)
root@OpenWrt:~#
[ 5664.870000] usb 1-1: new high-speed USB device number 2 using ehci-platform
[ 5894.210000] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
[ 5894.220000] ohci-platform: OHCI generic platform driver
[ 5906.040000] SCSI subsystem initialized
[ 5906.130000] usb-storage 1-1:1.0: USB Mass Storage device detected
[ 5906.140000] scsi host0: usb-storage 1-1:1.0
[ 5906.150000] usbcore: registered new interface driver usb-storage
[ 5907.150000] scsi 0:0:0:0: Direct-Access WD My Book 1170 1042 PQ: 0 ANSI: 6
[ 5907.160000] scsi 0:0:0:1: Enclosure WD SES Device 1042 PQ: 0 ANSI: 6
[ 5907.280000] sd 0:0:0:0: [sda] 732558336 4096-byte logical blocks: (3.00 TB/2.72 TiB)
[ 5907.290000] sd 0:0:0:0: [sda] Write Protect is off
[ 5907.290000] sd 0:0:0:0: [sda] Mode Sense: 53 00 10 08
[ 5907.300000] sd 0:0:0:0: [sda] No Caching mode page found
[ 5907.300000] sd 0:0:0:0: [sda] Assuming drive cache: write through
[ 5907.310000] sd 0:0:0:0: [sda] 732558336 4096-byte logical blocks: (3.00 TB/2.72 TiB)
[ 5907.340000] sda: sda1
[ 5907.350000] sd 0:0:0:0: [sda] 732558336 4096-byte logical blocks: (3.00 TB/2.72 TiB)
[ 5907.370000] sd 0:0:0:0: [sda] Attached SCSI disk
[ 5987.380000] fuse init (API version 7.23)
root@OpenWrt:~#
Внешний диск легко определился распознается и доступен в линуксе по адресу /dev/sda1:
Раскрыть
root@OpenWrt:~# ls /dev
bus mtd2ro null ttyS13
console mtd3 port ttyS14
cpu_dma_latency mtd3ro ppp ttyS15
full mtd4 ptmx ttyS2
fuse mtd4ro pts ttyS3
kmsg mtd5 random ttyS4
log mtd5ro sda ttyS5
mem mtdblock0 sda1 ttyS6
memory_bandwidth mtdblock1 shm
bus mtd2ro null ttyS13
console mtd3 port ttyS14
cpu_dma_latency mtd3ro ppp ttyS15
full mtd4 ptmx ttyS2
fuse mtd4ro pts ttyS3
kmsg mtd5 random ttyS4
log mtd5ro sda ttyS5
mem mtdblock0 sda1 ttyS6
memory_bandwidth mtdblock1 shm
Монтирование и размонтирование диска:
root@OpenWrt:/# mount /dev/sda1 /mnt
root@OpenWrt:/# umount /dev/sda1 /mnt
Настраиваем автомонтирование при включении роутера.
В официальном руководстве https://wiki.openwrt.org/ru/doc/uci/fstab сказано, что для этого нужно ввести следующую команду:
root@OpenWrt:/# block detect > /etc/config/fstab
У меня block detect не определяет внешний hdd, показывает только шапку конфига /etc/config/fstab:
config 'global'
option anon_swap '0'
option anon_mount '0'
option auto_swap '1'
option auto_mount '1'
option delay_root '5'
option check_fs '0'
Я пытался добавить свои настройки в /etc/config/fstab но ничего не вышло:
config mount
option target '/mnt/sda1'
option uuid 'D2C41D67C41D4EDB'
option enabled '1'
option fstype 'ntfs-3g'
option options 'rw,sync'
option device '/dev/sda1
Кстати, узнать uuid носителя можно программой blkid, которую нужно установить командой:
root@OpenWrt:/# opkg install blkid
команда:
root@OpenWrt:/#
По этому мне ничего не остается как настроить автомонтирование usb-носителей просто добавив специальную команду в автозагрузку. Для автозагрузки пользовательских команд предназначен файл /etc/rc.local
В него я записал следующие две команды:
ntfs-3g /dev/sdb1 /mnt/sdb1
ntfs-3g /dev/sda1 /mnt/sda1
Предварительно создав соответствующие каталоги:
mkdir /mnt/sdb1 /mnt/sda1
Для fat и ext нужны следующие команды:
mount -t vfat /dev/sda1 /mnt/sda1
mount -t ext2 (ext3, ext4 смотря что у вас) /dev/sda1 /mnt/sda1
И теперь после включения роутера, мой usb накопитель уже примонтирован.
Настраиваем горячее включение/отключение (монтирование/размонтирование) usb-хранителей с поддержкой ntfs-3g,vfat и ext4.
Вы сможете подключать и отключать флэшки и usb-hdd прямо во время работы роутера, размонтировать устройства вручную для сохранности файловой системы (как это требуется в windows и linux) вам не нужно будет.
За эту возможность отвечает пакет block-mount, который мы уже установили. Но почему-то в дистрибутиве OpenWRT нет скриптов для горячего подключения usb-носителей. Я нашел их только на гитхабе: https://gist.github.com/llazzaro/d6b8e3a3c41ca9b54e14
Больше нигде в Интернете их нет. По этому я на всякий случай привожу их здесь. Разработчик этих скриптов требует выполнить установку необходимых пакетов:
root@OpenWrt:/# opkg install kmod-usb-core kmod-usb-ohci kmod-usb2 kmod-usb-storage e2fsprogs fdisk usbutils mount-utils block-mount kmod-fs-ext4 kmod-fs-vfat kmod-nls-utf-8 kmod-nls-cp437 kmod-nls-iso8859-1
Всё необходимое у нас уже установлено, fdisk нам не нужен, а файловые системы ext нужны только владельцам носителей с этими файловыми системами.
Список конфигов:
/etc/hotplug.d/block/10-mount:
#!/bin/sh
#Этот скрипт я взял отсюда: https://wiki.openwrt.org/doc/howto/writable_ntfs и добавил грязный хак для поддержки ntfs-3g, потому что block не показывает разделы с ntfs-3g.
#This script I took from here:https://wiki.openwrt.org/doc/howto/writable_ntfs and added dirty hack to support ntfs-3g, becouse block dosn't show ntfs-3g partitions.
# Copyright (C) 2011 OpenWrt.org
sleep 10 #more apps installed, need more time to load kernel modules!
mkdir /mnt/sdb1&ntfs-3g /dev/sdb1 /mnt/sdb1
mkdir /mnt/sdb1&ntfs-3g /dev/sda1 /mnt/sda1
blkdev='dirname $DEVPATH'
if [ 'basename $blkdev' != "block" ]; then
device='basename $DEVPATH'
case "$ACTION" in
add)
mkdir -p /mnt/$device
# vfat & ntfs-3g check
if [ 'which fdisk' ]; then
isntfs='fdisk -l | grep $device | grep NTFS'
isvfat='fdisk -l | grep $device | grep FAT'
isfuse='lsmod | grep fuse'
isntfs3g='which ntfs-3g'
else
isntfs=""
isvfat=""
fi
# mount with ntfs-3g if possible, else with default mount
if [ "$isntfs" -a "$isfuse" -a "$isntfs3g" ]; then
ntfs-3g /dev/sda1 /mnt/sda1
elif [ "$isvfat" ]; then
mount -o iocharset=utf8 /dev/$device /mnt/$device
else
mount -t ntfs-3g /dev/sda1 /mnt/sda1
fi
;;
remove)
umount -l /dev/$device
umount -l /dev/sda1
umount -l /dev/sdb1
;;
esac
fi
#Этот скрипт я взял отсюда: https://wiki.openwrt.org/doc/howto/writable_ntfs и добавил грязный хак для поддержки ntfs-3g, потому что block не показывает разделы с ntfs-3g.
#This script I took from here:https://wiki.openwrt.org/doc/howto/writable_ntfs and added dirty hack to support ntfs-3g, becouse block dosn't show ntfs-3g partitions.
# Copyright (C) 2011 OpenWrt.org
sleep 10 #more apps installed, need more time to load kernel modules!
mkdir /mnt/sdb1&ntfs-3g /dev/sdb1 /mnt/sdb1
mkdir /mnt/sdb1&ntfs-3g /dev/sda1 /mnt/sda1
blkdev='dirname $DEVPATH'
if [ 'basename $blkdev' != "block" ]; then
device='basename $DEVPATH'
case "$ACTION" in
add)
mkdir -p /mnt/$device
# vfat & ntfs-3g check
if [ 'which fdisk' ]; then
isntfs='fdisk -l | grep $device | grep NTFS'
isvfat='fdisk -l | grep $device | grep FAT'
isfuse='lsmod | grep fuse'
isntfs3g='which ntfs-3g'
else
isntfs=""
isvfat=""
fi
# mount with ntfs-3g if possible, else with default mount
if [ "$isntfs" -a "$isfuse" -a "$isntfs3g" ]; then
ntfs-3g /dev/sda1 /mnt/sda1
elif [ "$isvfat" ]; then
mount -o iocharset=utf8 /dev/$device /mnt/$device
else
mount -t ntfs-3g /dev/sda1 /mnt/sda1
fi
;;
remove)
umount -l /dev/$device
umount -l /dev/sda1
umount -l /dev/sdb1
;;
esac
fi
/etc/hotplug.d/block/20-swap:
#!/bin/sh
# Copyright (C) 2009-2010 OpenWrt.org
# Copyright (C) 2010 Vertical Communications
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
. /lib/functions/block.sh
blkdev=`dirname $DEVPATH`
if [ `basename $blkdev` != "block" ]; then
device=`basename $DEVPATH`
case "$ACTION" in
add)
local autoswap_from_fstab
local automount_from_fstab
local from_fstab
local anon_mount
local anon_swap
local anon_fsck
local mds_mount_device
local sds_swap_device
local sds_swap_enabled
local use_device
local do_swap=0
mount_dev_section_cb() {
mds_mount_device="$3"
}
swap_dev_section_cb() {
sds_swap_device="$2"
sds_swap_enabled="$3"
return 0
}
config_get_automount
automount_from_fstab="$from_fstab"
[ "$automount_from_fstab" -eq 1 ] && {
config_get_mount_section_by_device "/dev/$device"
}
# skip trying swap if this device is defined as a mount point
[ -z "$mds_mount_device" ] && {
config_get_autoswap
autoswap_from_fstab="$from_fstab"
[ "$autoswap_from_fstab" -eq 1 ] && {
config_get_swap_section_by_device "/dev/$device"
use_device="$sds_swap_device"
do_swap="$sds_swap_enabled"
}
[ -z "$use_device" ] && [ "$anon_swap" -eq 1 ] && {
use_device="/dev/$device" && do_swap=1
}
}
[ -n "$use_device" ] && [ "$do_swap" -eq 1 ] && {
grep -q "$use_device" /proc/swaps || grep -q "$use_device" /proc/mounts || {
swapon "$use_device"
}
}
;;
remove)
grep -q "/dev/$device" /proc/swaps && {
swapoff "/dev/$device"
}
;;
esac
fi
/lib/functions/block.sh:
#!/bin/sh
# Copyright 2010 Vertical Communications
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
. /lib/functions.sh
config_get_mount() {
local gm_cfg="$1"
local gm_param="$2"
local gm_target
local gm_device
local gm_fstype
local gm_options
local gm_enabled
local gm_enabled_fsck
local gm_uuid
local gm_label
local gm_is_rootfs
config_get gm_target "$1" target
config_get gm_device "$1" device
config_get gm_fstype "$1" fstype 'auto'
config_get gm_options "$1" options 'rw'
config_get_bool gm_enabled "$1" enabled 1
config_get_bool gm_enabled_fsck "$1" enabled_fsck 0
config_get gm_uuid "$1" uuid
config_get gm_label "$1" label
config_get_bool gm_is_rootfs "$1" is_rootfs 0
mount_cb "$gm_cfg" "$gm_param" "$gm_target" "$gm_device" "$gm_fstype" "$gm_options" "$gm_enabled" "$gm_enabled_fsck" "$gm_uuid" "$gm_label" "$gm_is_rootfs"
}
config_get_swap() {
local gs_cfg="$1"
local gs_param="$2"
local gs_device
local gs_enabled
local gs_uuid
local gs_label
config_get gs_device "$1" device
config_get_bool gs_enabled "$1" enabled 1
config_get gs_uuid "$1" uuid
config_get gs_label "$1" label
swap_cb "$gs_cfg" "$gs_param" "$gs_device" "$gs_enabled" "$gs_uuid" "$gs_label"
}
config_get_automount() {
config_load fstab
config_get_bool from_fstab "automount" from_fstab 1
config_get_bool anon_mount "automount" anon_mount 1
config_get_bool anon_fsck "automount" anon_fsck 0
}
config_get_autoswap() {
config_load fstab
config_get_bool from_fstab "autoswap" from_fstab 1
config_get_bool anon_swap "autoswap" anon_swap 0
}
config_create_swap_fstab_entry() {
local device="$1"
local enabled="$2"
[ -n "$device" ] || return 0
local fstabnew
mkdir -p /var/lock
lock /var/lock/fstab.lck
fstabnew="$(mktemp -t '.fstab.XXXXXXXX')"
cat /tmp/fstab | grep -E -v "^$device[[:blank:]]" >>"$fstabnew"
[ "$enabled" -eq 1 ] && echo "$device none swap sw 0 0" >> "$fstabnew"
cat "$fstabnew" >/tmp/fstab
rm -f $fstabnew
lock -u /var/lock/fstab.lck
}
config_create_mount_fstab_entry() {
local device="$1"
local target="$2"
local fstype="$3"
local options="$4"
local enabled="$5"
options="${options:-rw}"
[ "$enabled" -eq 0 ] && options="noauto,$options"
[ -n "$target" ] || return 0
[ -n "$device" ] || return 0
local fstabnew
mkdir -p /var/lock
lock /var/lock/fstab.lck
fstabnew="$(mktemp -t '.fstab.XXXXXXXX')"
cat /tmp/fstab | grep -E -v "^$device[[:blank:]]" | grep -v "$target" >>"$fstabnew"
echo "$device $target $fstype $options 0 0" >>"$fstabnew"
cat "$fstabnew" >/tmp/fstab
rm -f $fstabnew
lock -u /var/lock/fstab.lck
}
libmount_find_token() {
local token="$1"
local value="$2"
local device
device="$(blkid -w /dev/null -c /dev/null | grep "$token=\"$value\"" | cut -f1 -d:)"
echo "$device"
}
libmount_find_device_by_id() {
local uuid="$1"
local label="$2"
local device="$3"
local cfg_device="$4"
local found_device
if [ -n "$uuid" ]; then
found_device="$(libmount_find_token "UUID" "$uuid")"
elif [ -n "$label" ]; then
found_device="$(libmount_find_token "LABEL" "$label")"
elif [ "$device" = "$cfg_device" ]; then
found_device="$device"
elif [ -z "$device" ] && [ -e "$cfg_device" ]; then
found_device="$cfg_device"
fi
[ -n "$device" ] && [ "$device" != "$found_device" ] && {
found_device=""
}
echo "$found_device"
}
config_get_mount_section_by_device() {
local msbd_device="$1"
local msbd_mount_cfg=
local msbd_target=
local msbd_mount_device=
local msbd_fstype=
local msbd_options=
local msbd_enabled=
local msbd_enabled_fsck=
local msbd_uuid=
local msbd_label=
local msbd_is_rootfs
local msbd_blkid_fstype_match=
mount_cb() {
local mc_cfg="$1"
local mc_device="$2"
shift
local mc_target="$2"
local mc_cfgdevice="$3"
local mc_fstype="$4"
local mc_uuid="$8"
local mc_label="$9"
shift
local mc_is_rootfs="$9"
local mc_found_device=""
mc_found_device="$(libmount_find_device_by_id "$mc_uuid" "$mc_label" "$mc_device" "$mc_cfgdevice")"
if [ -n "$mc_found_device" ]; then
msbd_mount_cfg="$mc_cfg"
msbd_target="$mc_target"
msbd_mount_device="$mc_found_device"
msbd_fstype="$mc_fstype"
msbd_options="$4"
msbd_enabled="$5"
msbd_enabled_fsck="$6"
msbd_uuid="$7"
msbd_label="$8"
msbd_is_rootfs="$9"
fi
return 0
}
config_foreach config_get_mount mount "$msbd_device"
[ -n "$msbd_mount_device" ] && config_create_mount_fstab_entry "$msbd_mount_device" "$msbd_target" "$msbd_fstype" "$msbd_options" "$msbd_enabled"
mount_dev_section_cb "$msbd_mount_cfg" "$msbd_target" "$msbd_mount_device" "$msbd_fstype" "$msbd_options" "$msbd_enabled" "$msbd_enabled_fsck" "$msbd_uuid" "$msbd_label" "$msbd_is_rootfs"
}
config_get_swap_section_by_device() {
local ssbd_device="$1"
local ssbd_swap_cfg=
local ssbd_swap_device=
local ssbd_enabled=
local ssbd_uuid=
local ssbd_label=
swap_cb() {
local sc_cfg="$1"
local sc_device="$2"
local sc_uuid="$5"
local sc_label="$6"
local sc_cfgdevice="$3"
local sc_found_device
sc_found_device="$(libmount_find_device_by_id "$sc_uuid" "$sc_label" "$sc_device" "$sc_cfgdevice")"
if [ -n "$sc_found_device" ]; then
ssbd_swap_cfg="$sc_cfg"
ssbd_swap_device="$sc_found_device"
ssbd_enabled="$4"
ssbd_uuid="$5"
ssbd_label="$6"
fi
return 0
}
config_foreach config_get_swap swap "$ssbd_device"
[ -n "$ssbd_swap_device" ] && config_create_swap_fstab_entry "$ssbd_swap_device" "$ssbd_enabled"
swap_dev_section_cb "$ssbd_swap_cfg" "$ssbd_swap_device" "$ssbd_enabled" "$ssbd_uuid" "$ssbd_label"
}
root@OpenWrt:/# reboot
Попробуйте включать и отключать накопитель в usb. Должно монтироваться в каталог /mnt/sda(sdb). Если не примнонтировалось, проверьте командой mount, может носитель примонтирован не в тот каталог. Если же накопитель не монтируется, то остается только обращаться за помощью к автору этих скриптов: https://gist.github.com/llazzaro/d6b8e3a3c41ca9b54e14
Как вернуть оригинальную прошивку на Tl WR1043ND
Я наигрался сторонними прошивками и решил вернуться.
Для моего Tl WR1043ND v2 нет стабильного OpenWRT (для Tl WR1043ND v1 есть, а для Tl WR1043ND v2 нет) и я установил тестовую сборку. Там все драйвера приходилось устанавливать принудительно (opkg --force-depends install) и копировать их из /lib/modules"/новой версии ядра" в /lib/modules/"свою версию". В результате VPN PPTP я не смог настроить. Можно было, собрать свою прошивку, но было лень.
1. Качаем прошивку и смотрим чтобы в названии было слово boot.
2. Распаковываем прошивку.
3. Загружаем прошивку на свой локальный веб-сервер или на вебсайт
4. Заходим на роутер через ssh и вводим команды:
cd /tmp
dd if=orig.bin of=tplink.bin skip=257 bs=512
mtd -r write /tmp/tplink.bin firmware
где orig.bin — название вашей прошивки.
5. Сетевой адрес заводской прошивки роутера Tl WR1043ND - 192.168.0.1, значит в настройках сетевой карты ставьте 192.168.0.2
На видео показан возврат роутера TP-Link TL-WR741ND с OpenWRT на заводскую прошивку, но этот способ сработал и на моём роутере.
Если что-то не получается, возможно вам подойдут мои конфигурационные файлы роутера:
https://linexp.ru/uploads/files/openwrt.tar.gz
------------------------
Отзыв о Kwork
ТРИО теплый пол отзыв
Vkjust отзыв
Заработок на сокращении ссылок
Earnings on reducing links
Код PHP на HTML сайты
Я уже пять лет не занимаюсь сайтом, так как работаю по 12 часов. Образование у меня среднее, и по этому нет нормальной работы. Если бы сайт приносил по 100$ в месяц, я бы добавлял по 50 статей каждый месяц. Если отправите пожертвования, я оставлю Ваши имена и фамилии в списке благодетелей !
Bitcoin: 1AP3JCZVFpHzZwcAyNztbrbFFiLdnKbY1j
Litecoin LfHXHz4k6LnDNNvCodd5pj9aW4Qk67KoUD
Dogecoin D9HHvKNFZxRhjtoh6uZYjMjgcZewwiUME9
Есть также другие кошельки.
Категория: Аппаратура, Беспроводная связь, Маршрутизация