Полная победа над MGTS и роутером Sercomm RV6688 RV6699
Вот он красавец! Имеет 4 gigabit ethernet порта и подключается к сети GPON, дает интернет, телефон и ТВ.
Итак, постановка задачи:
1.Раздача интернета через второй роутер, без двойного NAT — так называемый режим bridge
2.Использование IP телефонии без аналогового телефона
Решения, которые есть в интернете:
1.Роутер средствами админки переводится в режим моста, 1,2,3 порт будут находиться в мосте с vlan интернета, доступ к роутеру возможен только через Wi-Fi,в котором уже нет интернета. По сути вся коробочка превращается в управляемый коммутатор и можно пользоваться только интернетом.
2.Есть описание, как узнать пароль от учетной записи телефонии.
Мое решение позволяет перенастроить «изнутри» Sercomm RV6688 таким образом, что:
Порт 3 — доступ к локальной сети и wifi
Подключаемся либо по wifi, либо в 3 порт. Получаем доступ к web админке роутера и блокируем TR-096, чтобы не слетали настройки, меняем логин и пароль на свои (как именно — легко ищется в интернете). На всех интерфейсах WAN указываем режим route и статические ip 0.0.0.0 и подсеть 255.255.255.0
Подключаемся к роутеру через ssh, указав ip 192.168.1.254 и логин с паролем, которые указали в п1
Используем уязвимость, введя команду traceroute ; /bin/sh и попадаем в busybox под учеткой с правами root
По умолчанию файловая система монтируется в режиме чтения. Правим:
Далее вводим команду просмотра текущих настроек бриджа
Примечание: на картинке у меня уже убраны порты 1 и 2 (eth0.0 и eth1.0) из бриджа.
выполняем следующие команды:
brctl delif br0 eth0.0
brctl delif br0 eth1.0
brctl addif brwan eth0.0
brctl addif brwan rwan0.30
brctl addif brsip eth1.0
brctl addif brsip rwan1.10
Первыми brctl delif мы вытаскиваем физические порты из основного бриджа, далее создаем новые и подключаем нужные порты в бриджи. Запускаем их. После этого все должно уже работать.
Чтобы при перезагрузке роутера настройки не слетали, пишем команды в стартовый скрипт с указанием ожидания в 20 сек и ipv6 отключаем для большей стабильности работы:
Нажимаем i , вставляем код указанный ниже, нажимаем esc, вводим :wq и enter
brctl delif br0 eth0.0
brctl delif br0 eth1.0
brctl addif brwan eth0.0
brctl addif brwan rwan0.30
brctl addif brsip eth1.0
brctl addif brsip rwan1.10
echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6
После этого можно перезагрузить роутер.
Информация выложена в ознакомительных целях, все действия вы совершаете на свой страх и риск.
Статья будет полезна тем, кто мечтал о расширении функционала данного роутера. К примеру у меня городской московский номер и бот скайпа подключены к моему серверу телефонии,бабушка, уезжая на дачу в Калужскую область, абсолютно бесплатно разговаривает с подругами в Москве, принимает skype звонки от родственников на ip телефон.
Для корпоративного сегмента — возможность избавиться от аналогового телефона и наслаждаться удобствами ip телефонии.
Найдены возможные дубликаты
Теперь поставят заплатку и привет
После создания бриджа IP адрес может таки не прилететь на интерфейс подключенный в бридж со стороны пользователя, что у меня и произошло. В моём случае дело оказалось в привязке MAC адреса к IP со стороны МГТС. Пришлось не только менять MAC адрес порта моего Mikrotika (после это IP так и не прилетал) но и поменять MAC адрес оптоволоконного интерфейса включённого в бридж на произвольный. После этого всё заработало! Ну и в скрипт это надо добавить после SLEEP 20S перед остальными командами.
ifconfig rwan0.3 down
ifconfig rwan0.3 hw ether 11:11:33:33:77:77
Установка программного обеспечения из исходников под МГТС роутер ZTE F-660 в chroot окружении
1500р.
Единственный вариант который мне виделся на тот момет, это запуск нужных мне программ в chroot окружении с флешки отформатированной в ntfs. Естественно мне хотелось использовать самые последние версии программ. Поэтому я решил собрать все из исходников.
Изучив аппаратную базу, я определил, что там стоит обычный mips-процессор работающий под линуксом 2.6.30. Соответственно нам необходимо собрать gcc-тулчан под данную архитектуру. Для сборки тулчана я выбрал обычную убунту.
Перед установкой нам необходимо поставить средства разработки
Скрипт я приведу ниже, а тут я опишу общий план и то, на что необходимо обратить особое внимание:
Не нужны никакие патчи;
Синтаксис вызова имеет следующий вид ./make-mips-toolchan ;
Для того что бы скачать все исходники используйте параметр get;
Не используйте опцию -j > 1, не соберется получите кучу недетерминированных ошибок (Под убунту и gcc 4.8.1);
CLFS=“$1” дирректория в которую мы поместим тулчан. SYSROOT=“$CLFS/root”, дирректория в которую будут устанавливатся результат работы тулчана;
Если с первого раза не соберется, комментируете в скрипте уже пройденные этапы и продолжаете дальше;
В скрипт вторым параметром передается путь по которому необходимо разместить тулчан;
Этапы установки такие:
- Ставим исходники ядра 2.6.30;
- Ставим утилиты для работы с бинарными файлами (линковщик) binutils;
- Ставим mips крос-компилятор gcc (без поддержки потоков);
- С его помощью собираем стандартную библиотеку С (eglibc);
- С помощью стандартной библиотеки собранной в предыдущем пункте соберем полноценный с++ тулчан;
С этого момента у вас есть полноценный gcc-тулчан который способен собирать программы под наш роутер. Для этого нам этапе конфигурирования программ нам необходимо указывать компилятор и линковщик из только что скомпилированного тулчана:
Все инструменты готовы и мы можем приступать к сборке программ.
В качестве примера соберем торрент клиент Transsmission и сип-прокси Sipproxd. Общий план такой:
- Сборка статически слинкованного bash интерпетатора;
- Сборка сетевых утилит GnuInetCoreUtills;
- Сборка основных утилит GnuCoreUtills;
- Сборка библиотеки текстового интерфейса NCurses (Нужна для Nano);
- Сборка консольного блокнота необходимого для редактирования файлов конфигурации Nano;
- Сборка библиотеки сжатия Zlib;
- Сборка криптографической библиотеки openssl;
- Сборка сетевой библиотеки Curl (Нужна для transsmission);
- Сборка библиотеки событий LibEvent (Нужна для transsmission);
- Сборка торрент клиента Transsmission;
- Сборка библиотеки GnuSip;
- Сборка SipProxy.
В процессе сборки пришлось применить ряд патчей все они очень простые добавляют или удаляют не больше одной строчки.
Далее необходимо перенести нашу папку root которая находится в директории нашего тулчана на заранее отформатированную в nfts флешку. Также на флешку необходимо поместить статически слинкованный busybox готовый можно взять отсюда: www.busybox.net/downloads/binaries/latest/busybox-mips.
Далее нам нужно «запрыгнуть» в нашу песочницу, выполнив небольшой скрипт:
Мы увидим командную строку интерпретатора bash. Выполним настройку динамических библиотек командой ldconfig -v
С этого момента мы можем делать все что угодно так как мы отделены от основной системы.
Запустим торрент-клиент transmission-daemon. Перейдите по адресу 192.168.1.1:9091. Видим стандартный ответ на неавторизированный доступ 
Далее необходимо отредактировать файл настроек (он только что был создан)
Замените настройки
«rpc-whitelist»: “127.0.0.1”
На
«rpc-whitelist»: “*.*.*.*”
Нажмите F2 что бы сохранить и выйти
Перезапустите демон. Зайдите по тому же адресу. 
Далее я сделаю небольшое отступление и расскажу про Sip-Proxy и систему которая как я понимаю теперь применяется в МГТС. Сейчас МГТС практически полностью отказывается от аналоговой связи. Все звонки идут по сип-протоколу, те фактически наш роутер является по сути обычным сип-клиентом. Следовательно мы можем использовать любой сип-телефон и подключатся к сип-серверу и звонить с московского номера откуда угодно. Звучит заманчиво, но есть одна проблема. Дело в том что мы не можем подключится к сип-серверу так как мы находимся за натом (вот в этом суждении я не претендую на объективность просто одна из версий). В качестве решения мы можем использовать сип-прокси. Он будет заниматься передачей пакетов от клиентов до сервера делая вид что он и есть клиент, как собственно и делает обычный http-прокси.
Внесем некоторые изменения в конфигурационный файл.
cd /usr/etc/
cp ./siproxd.conf.example ./siproxd.conf
nano ./siproxd.conf
Внесем следующие изменнения:
if_inbound = br0
if_outbound = nbif1
daemonize = 0
outbound_proxy_host = 192.168.68.97
outbound_proxy_port = 5060
F2-сохраним
Запустим сам прокси-сервер в режиме логирования
siproxd -d -1 0
Зайдем и настройки сип-клиента в самом роутере и укажем что прокси теперь является он сам. После нажатия на кнопку применить мы видим как логах идут пакеты от нашего клиента. 
00:16:23 accessctl.c:99 access check =3
00:16:23 security.c:48 security_check_raw: size=440
00:16:23 siproxd.c:481 checking Max-Forwards (=70)
00:16:23 siproxd.c:526 received SIP type REQ:REGISTER
00:16:23 utils.c:129 DNS lookup — previous resolution failed: msk.ims.mgts.ru
Но почему-то прокси пытается получить адрес сервера, вместо того что бы просто передать дальше пакет без изменения. Если честно, это одна из причин почему я выложил статью на хабре. Я просто не знаю как решить эту проблему, и надеюсь что хабросообщество поможет решить эту задачу.
Подведем итог: как видим нам удалось собрать из исходников достаточно большое количество программного обеспечения. Особенно хотелось бы отметить что все собранное программное обеспечение свежее, нам не пришлось ни прошивать устройство ни использовать какой либо древний репозиторий. При этом мы воспользовались очень простыми патчами. Если заметка вызовет достаточным интерес в хабра-сообществе и мне удастся решить проблему сип-прокси, то я в следующей своей заметки могу рассмотреть вопросы связанные установкой на многостродальный роутер openssh, softether VPN и вопросы запуска x11 приложений. Вообще мне бы хотелось получить обратную связь и возможно появятся другие статьи на данную тему от других авторов, ведь данный терминал очень распространен в Москве.
Скрипты и патчи лежат в архиве.
Update (Ссылки исправлены):
Для самых ленивых архив с корневой директории флешки, с установленными программами




