Использование прошивки TomatoUSB с интернетом от Beeline

После подключения интернета от Beeline, выяснилось, что мой роутер (Asus WL-520GU) ни в какую не хочет устанавливать соединение по L2TP. В Windows 7 при этом всё нормально. Описание проблемы и решение можно посмотреть тут. Вкратце — проблема с согласованием типа фрейминга между клиентом и сервером.

Было решено скомпилировать прошивку TomatoUSB с нужными патчами. Здесь официальная инструкция на английском. Я всё делал в Debian Wheezy 32-bit, также пробовал в Gentoo (там отличаются названия пакетов).

Для компиляции устанавлваем следующие пакеты:

1
sudo aptitude install libncurses5 libncurses5-dev m4 bison gawk flex libstdc++6-4.4-dev g++-4.4 g++ git zlib1g-dev build-essential

Получаем исходный код (на данный момент там около 1,4 Гб):

1
2
cd ~
git clone git://repo.or.cz/tomato.git tomato

Я использовал последнюю на данный момент версию — build 54 (ядро 2.4). Вызвано это тем, что у моего роутера всего 4 Мб флеш-памяти. Компилировал вариант Ext — Normal plus extras and NTFS (таблица для сравнения вариантов).

После того, как выбрали версию, переключаемся на нужную ветку исходных кодов (полный список доступных веток можно посмотреть при помощи команды git tag):

1
2
cd ~/tomato
git checkout tomatousb-ND-1.28.8754

На этом этапе нужно применить наши патчи. Копировать нужно всё, до строчки EOF включительно, и вставлять в командную строку. Все действия производятся в ~/tomato.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
patch -p0 << EOF
--- release/src/router/xl2tpd/control.c 2012-09-27 16:17:15.436808060 +0400
+++ release/src/router/xl2tpd/control.c.new     2012-09-27 16:29:26.000000000 +0400
@@ -792,10 +792,10 @@
             return -EINVAL;
         }
         c->state = ICCN;
-        if (t->fc & SYNC_FRAMING)
-            c->frame = SYNC_FRAMING;
-        else
+        if (t->fc & ASYNC_FRAMING)
             c->frame = ASYNC_FRAMING;
+        else
+            c->frame = SYNC_FRAMING;

         buf = new_outgoing (t);
         add_message_type_avp (buf, ICCN);
EOF
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
patch -l -p0 << EOF
--- release/src/router/rc/wan.c 2012-09-27 16:17:09.000000000 +0400
+++ release/src/router/rc/wan.c.new     2012-09-27 16:45:09.000000000 +0400
@@ -464,7 +464,13 @@
                 "redial = yes\n"
                 "max redials = 32767\n"
                 "redial timeout = %d\n"
-                "ppp debug = %s\n",
+                "ppp debug = %s\n"
+                "require pap = no\n"
+                "require chap = yes\n"
+                "require authentication = no\n"
+                "autodial = yes\n"
+                "rx bps = 100000000\n"
+                "tx bps = 100000000\n",
                 nvram_safe_get("l2tp_server_ip"),
                 ppp_optfile,
                 nvram_get_int("ppp_redialperiod") ? : 30,
EOF

Далее подготавливаем нашу среду для компиляции:

1
2
sudo ln -s ~/tomato/tools/brcm /opt/brcm
export PATH=$PATH:/opt/brcm/hndtools-mipsel-linux/bin:/opt/brcm/hndtools-mipsel-uclibc/bin

Последнюю команду можно добавить в ~/.profile.

Можно запускать компиляцию. Выбор цели для make зависит от типа выбранной сборки (ссылка на таблицу выше).

1
2
cd ~/tomato/release/src
make m V1=v54 V2=_beeline_l2tp

Результат примерно такой:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
TRX Image:
 Total Size .... : 3719168 (3632.0 KB) (3.5 MB)
   Images ...... : 3717500 (0x0038b97c)
   Padding ..... : 1640
 Avail. for jffs :
   4MB, 128K CFE : 4 EBs + 16384
   4MB, 256K CFE : 2 EBs + 16384
   8MB, 256K CFE : 66 EBs + 16384
            Note : Netgear routers  have 6 EBs less available!
 CRC-32 ........ : 2D1A3D7D
 128K Blocks ... : 29 (0x0000001D)
  64K Blocks ... : 57 (0x00000039)
 Offsets:
   0: 0x0000001C  lzma-loader/loader.gz
   1: 0x00000A8C  /home/butenin/tomato/release/src/linux/linux/arch/mips/brcm-boards/bcm947xx/com
   2: 0x0007EC00  router/mipsel-uclibc/target.image

Собственно, image/tomato-NDUSB-1.28.v54_beeline_l2tp-Ext.trx — и есть наша прошивка. Заливать можно любым удобным способом. Скачать готовый вариант можно здесь.

Комментарии