Привет!
Указанный в заголовке роутер очень часто ставился Ростелекомом в качестве шлюза для домашнего интернета. Сейчас они уже считаются устаревшими и зачастую просто валяются без дела. У меня таких скопилось три штуки и один из них используется для раздачи интернета беспроводным клиентам в сети.
Меня не устраивало то, что в устройстве нет полноценной настройки dhcp и сейчас я расскажу, что с этим сделал.
Упрощённо интересующий нас сегмент сети можно проиллюстрировать изображением ниже, но суть статьи не в этом, а в том, как получить немного больше от роутера:
Естественно, сеть не статична, она время от времени меняется и главным источником изменений являются мобильные телефоны, которым подавай автоматическую настройку подключения. У роутера на вкладке Advanced Setup / LAN имеются следующие параметры dhcp-сервера:
И, как можно заметить, здесь нет настраиваемого параметра "основной шлюз", в качестве которого роутер просто передаёт свой собственный ip-адрес, чего в обычных условиях использования этого оборудования достаточно.
Долгое время dhcp-сервером работал маршрутизатор 192.168.1.101, но однажды мне мною же была поставлена задача исправить эту несуразицу и всё-таки настроить dhcp на роутере.
Перво-наперво был найден пароль администратора этой железяки. Это не секрет, информация размещена в открытом доступе, в том числе и на форуме производителя оборудования. user: admin, password: kW5i_1bYC6os
К сожалению, вход админом в веб-интерфейс проблему не решил - искомая настройка не появилась.
Зато этот же логин подходит к телнету:
Включить telnet можно в настройках роутера прямо из-под user-а в разделе Management / Access Control
Запускаем шелл (admin / eltexpon):
sh admin
На роутере используется сервер udhcpd, его конфигурационный файл находится в /var/udhcpd/udhcpd.conf. Изменяем конфиг так, как нужно нам:
vi /var/udhcpd/udhcpd.conf
decline_file /var/udhcpd.decline
interface br1
start 192.168.1.230
end 192.168.1.254
option lease 86400
min_lease 30
option subnet 255.255.255.0
option router 192.168.1.101
option dns 8.8.8.8
option dns 8.8.8.8
option domain Home
перезапускаем сервер
/usr/bin/killall udhcpd
/bin/udhcpd &
и видим, что теперь основной шлюз передаётся клиентам так, как нужно нам.
Всё это работает только до перезагрузки, т.к. конфиг udhcpd создаётся заново при включении устройства, однако, способ подсунуть настройки всё-таки есть.
ВНИМАНИЕ! Далее делайте всё аккуратно и только если понимаете, что происходит.
Всё, что будет сделано ниже НЕ отменится сбросом роутера на заводские настройки, соответственно шанс окирпичить роутер крайне высок!
Сначала перемонтируем корневую ФС для записи:
mount -o remount,rw /
Скопируем наш конфиг в корень (хотя можно и создать каталог для этих целей):
cp /var/udhcpd/udhcpd.conf /udhcpd.conf
и внесём в него необходимые изменения. Затем создадим скрипт, задачей которого будет перезапись конфига из корня в /var/udhcpd и перезапуск сервера.
#! /bin/sh
# защитный интервал (устройство грузится долго и скрпит отрабатывает раньше, чем создаётся конфиг)
sleep 60
# замена конфига
rm /var/udhcpd/udhcpd.conf
cp /udhcpd.conf /var/udhcpd/udhcpd.conf
# перезапуск сервера
/usr/bin/killall dhcpd
/usr/bin/killall udhcpd
/bin/udhcpd &
Автозапуск на роутере реализован с помощью /etc/init.d (а вот /etc/rc.local не работает), притом я не смог зарегистрировать запуск своего скрипта по неизвестной для меня причине, поэтому просто изменил уже имеющийся там скрипт rcS, добавив в него "/dhcp.sh &"
#! /bin/sh
PATH=/sbin:/bin
export PATH
mount -t proc proc /proc
/bin/mount -a
/dhcp.sh &
Конечно, можно применить более изящное решение для исправления файла. Sed на устройстве отсутствует, но можно обойтись и без него, например, сделав скрипт /dhcp.sh таким:
#!/bin/sh
#защитный интервал, т.к. устройство достаточно медленное
sleep 60
# создание временного файла
temp_file=$(mktemp)
# чтение конфига
while IFS= read -r line; do
# если натыкаемся на строку, с option router, то записываем вместо неё option router 192.168.1.101
if [[ "$line" =~ ^option router ]]; then
echo "option router 192.168.1.101" >> "$temp_file"
else
echo "$line" >> "$temp_file"
fi
done < "/var/udhcpd/udhcpd.conf"
# заменяем оригинальный файл временным
mv "$temp_file" "/var/udhcpd/udhcpd.conf"
#перезапуск сервера
/usr/bin/killall dhcpd
/usr/bin/killall udhcpd
/bin/udhcpd &
Главная цель статьи - рассказать, как заходить на роутер NTP-RG-1402G-W и расширять его сознание, а применение таким знаниям можно найти и за пределами описываемой задачи.
Удачи!
Автор: Altfor