| OpenWrt | 
Обновлено: 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
------------------------
Восстановление сайтов из Вебархива
Размещение по доскам объявлений России
ТРИО теплый пол отзыв
Заработок на сокращении ссылок
Earnings on reducing links
Код PHP на HTML сайты
Категория: Аппаратура, Беспроводная связь, Маршрутизация


 Финансы
 Финансы 
 Планирование
 Планирование  Офисные пакеты
 Офисные пакеты  Наука и производство
 Наука и производство  Математика
 Математика  Общество
 Общество  Религии
 Религии  Образование
 Образование  Программирование
 Программирование  Сеть
 Сеть  Безопасность
 Безопасность  Администрирование
 Администрирование Игры
 Игры  Рабочий стол
 Рабочий стол  Компьютерные советы
 Компьютерные советы Другие темы
 Другие темы Добавить статью
 Добавить статью Контакты и Отказ от ответственности
 Контакты и Отказ от ответственности О нас
 О нас 
  Просмотров: 15831
 Просмотров: 15831        Комментарии:
 Комментарии:  Добавлен: 17 января 2020
 Добавлен: 17 января 2020     
    
 
  
 


 #1
 #1