יום שבת, 7 בספטמבר 2013

OpenWRT - Custom Router Guide




לכל מי שיש Router מיותר זה מאמר בדיוק בשבילו, לאחרונה נתקלתי בנתב ישן בבית שמחוץ לעלות אבק הוא לא כל כך מועיל וחשבתי לעצמי האם ניתן לשפר אותו? או להתקין עליו מערכת חדשה? מסתבר שזה אפשרי בעזרת הפרויקט OpenWRT שמאפשר להתקין מערכת הפעלה של Linux ע"ג נתבים שונים ומגוונים, צריבת מערכת הפעלה חדשה על מכשירים סגורים של יצרנים עלולה להרוס את המכשיר כמו שתראו בהמשך.

OpenWRT

מערכת Linux Embedded שתומכת ברוב הארכיטקטורת מעבד שבשוק, מתאימה בעיקר למוצרים כמו Routers ומוצרי תקשורת אחרים, היא התחילה את דרכה בשנת 2004, היא הותאמה בעיקר לנתבים של LinkSys אבל עם הזמן התרחבה לנתבים מחברות שונות.

שימו לב!
  • לפני שאתם חושבים לשדרג את הנתב שלכם כדאי שתבדקו בטבלת התמיכה שנמצאת באתר ותוודאו שהנתב שלכם ברשימה.
  • התהליך שמוצג במאמר יכול להרוס את המכשיר ברשותכם ללא יכולת לשחזור ותיקון , אני לא אחראי על כל נזק שנגרם לנתב שלכם - ראו הוזהרתם!
לאחר שמצאנו את הנתב בטבלה ברוב המקרים יש הסבר מפורט איך להתקין את מערכת ההפעלה ואת ה BootLoader אם לא מצאתם הסבר כזה לא מומלץ להתקין את מערכת ההפעלה כי סביר להניח שזה לא יעבוד ותהרסו את המכשיר.


D-Link Dir-300 A



המתנדב לניסוי הוא נתב ישן של D-LINK עם 4 כניסות LAN, כניסת WAN ו WIFI, הוא מבוסס על מעבד MIPS במהירות 182 MHZ עם 4 MB של FLASH ו 16 MB של RAM.

שימו לב! - לכל נתב יש תהליך צריבה משלו חשוב מאוד לעבור אחרי ההוראות באתר OpenWRT ומומלץ לחפש במקורות נוספים באינטרנט.

לפני שנתחיל לעבוד על הנתב יש מספר תוכנות שמומלץ להכין מראש:
  • PUTTY - תוכנה להתחברות בפרוטוקולים שונים כמו Telnet, SSH ו Serial.
  • WINSCP - תוכנה להעברת קבצים בעזרת SSH.
  • TFTPD32 - תוכנה להעברת קבצים בפרוטוקל Trivial File Transfer Protocol.
  • Port Scanner - סריקה מהירה של פורטים על הנתב.

יש להוריד מספר קבצים מאתר OpenWRT:


תחילה יש להחליף את ה Bootloader המקורי (RedBoot) ל BootLoader של OpenWRT שנקרא DD-WRT, התהליך עצמו קצת מוזר נותנים למחשב כתובת סטטית 192.168.20.80 ומחברים אותו לכניסת ה WAN בנתב, מחברים את הנתב לחשמל ונפתח לנו חלון של כמה שניות שדרכו ניתן להתחבר לנתב בעזרת Telnet בכתובת 192.168.20.81 בפורט 9000, זה לא תמיד מצליח ולפעמים צריך לכבות ולהפעיל את הנתב מספר פעמים עד שנכנסים לאחר מכן מכניסים את הפקודה:

Redboot> load ap61.ram
Redboot> go.

חשוב מאוד שתוכנת ה TFTP תעבוד ותצביע לתיקייה עם הקבצים הנחוצים, ברגע הרצת הפקודה הנתב ינסה למשוך את הקבצים מהמחשב ובסיום יש להפעיל את הנתב מחדש לא לפני שננתק את המחשב מה WAN ונחבר אותו לאחד כניסות ה WAN ונגדיר את הכתובת 192.168.1.2, נעשה את אותו טריק ונפעיל את הנתב מחדש וננסה להתחבר לכתובת 192.168.1.1 בפורט 9000, לאחר שהתחברנו מחדש נריץ את הפקודות הבאות:

כניסה למצב כתיבה לזיכרון:
DD-WRT>fis init
About to initialize [format] FLASH image system - continue (y/n)? y
*** Initialize FLASH Image System
... Erase from 0xbffe0000-0xbfff0000: .
... Program from 0x807f0000-0x80800000 at 0xbffe0000: .

הגדרת TFTP:

DD-WRT>ip_address -h 192.168.1.2
IP: 192.168.1.1/255.255.255.0, Gateway: 0.0.0.0
Default server: 192.168.1.2


כתיבת ה ROM מה TFTP:

DD-WRT>load -r -b %{FREEMEMLO} ap61.rom
Using default protocol (TFTP)
Raw file loaded 0x80080000-0x800a8717, assumed entry at 0x80080000


כתיבת ה Bootloader באופן קבוע:

DD-WRT>fis create -l 0x30000 -e 0xbfc00000 RedBoot
An image named 'RedBoot' exists - continue (y/n)? y
... Erase from 0xbfc00000-0xbfc30000: ...
... Program from 0x80080000-0x800a8718 at 0xbfc00000: ...
... Erase from 0xbffe0000-0xbfff0000: .
... Program from 0x807f0000-0x80800000 at 0xbffe0000: .


הגדרת Bootp:

DD-WRT>fconfig bootp false
bootp: Setting to false
Update RedBoot non-volatile configuration - continue (y/n)? y
... Erase from 0xbffe0000-0xbfff0000: .
... Program from 0x80ff0000-0x81000000 at 0xbffe0000: . 



בסיום נריץ את הפקודה Reset ובפעם האחרונה שוב נתחבר בעזרת Telnet לכתובת 192.168.1.1 בפורט 9000, ונריץ את הפקודות הבאות:


כניסה למצב כתיבה לזיכרון:
DD-WRT>fis init
About to initialize [format] FLASH image system - continue (y/n)? y
*** Initialize FLASH Image System
... Erase from 0xbffe0000-0xbfff0000: .
... Program from 0x807f0000-0x80800000 at 0xbffe0000: .


הגדרת TFTP:

DD-WRT>ip_address -h 192.168.1.2
IP: 192.168.1.1/255.255.255.0, Gateway: 0.0.0.0
Default server: 192.168.1.2

טעינת קובץ מערכת ההפעלה לזיכרון

DD-WRT>load -r -b %{FREEMEMLO} openwrt-atheros-vmlinux.lzma
Using default protocol (TFTP)
Raw file loaded 0x80040800-0x801007ff, assumed entry at 0x80040800


כתיבת הקובץ לנקודה ספציפית בזיכרון:

DD-WRT>fis create -e 0x80041000 -r 0x80041000 vmlinux.bin.l7
... Erase from 0xbfc30000-0xbfcf0000: ............
... Program from 0x80040800-0x80100800 at 0xbfc30000: ............
... Erase from 0xbffe0000-0xbfff0000: .
... Program from 0x80ff0000-0x81000000 at 0xbffe0000: .

טעינת קובץ של ה File System  לזיכרון:

DD-WRT>load -r -b %{FREEMEMLO} openwrt-atheros-root.squashfs
Using default protocol (TFTP)
Raw file loaded 0x80040800-0x802207ff, assumed entry at 0x80040800''


כתיבת ה File System לזיכרון באופן קבוע:
DD-WRT>fis create rootfs
... Erase from 0xbfcf0000-0xbffe0000: ...............................................
... Program from 0x80040800-0x80220800 at 0xbfcf0000: ..............................
... Erase from 0xbffe0000-0xbfff0000: .
... Program from 0x80ff0000-0x81000000 at 0xbffe0000: .

הגדרת זמן טעינת ה Bootloader:

DD-WRT>fconfig boot_script_timeout 5


הגדרת טעינת Script בזמן שה Bootloader עולה:

DD-WRT>fconfig boot_script true
Run script at boot: true 

הגדרת הפקודה ב Script:

DD-WRT>fconfig
Run script at boot: true
Boot script:
Enter script, terminate with empty line
>> fis load -l vmlinux.bin.l7
>> exec
>>

הנתב יציג פרמטרים נוספים ובסיום יש לבצע Reset:

Boot script timeout (1000ms resolution): 5
Use BOOTP for network configuration: false
Gateway IP address: 192.168.1.1
Local IP address: 192.168.1.10
Local IP address mask: 255.255.255.0
Default server IP address: 192.168.1.228
Console baud rate: 9600
GDB connection port: 9000
Force console for special debug messages: false
Network debug at boot time: false
Update RedBoot non-volatile configuration - continue (y/n)? y
... Erase from 0xbffe0000-0xbfff0000: .
... Program from 0x80ff0000-0x81000000 at 0xbffe0000: .''

DD-WRT>reset

זהו אפשר לומר שסיימנו וכרגע על הנתב מותקנת מערכת הפעלה חדשה, נתחבר לנתב בעזרת Telenet לכתובת 192.168.1.1 הפעם בפורט הסטנדרטי (23), נוכל להגדיר סיסמא ,להתחבר בעזרת SSH וכמובן לנהל את הנתב בעזרת הדפדפן.





Brick Device

מה שראינו זה תהליך שכנראה קורה רק בתאוריה ובפועל העסק הולך ומסתבך, אחד הטעויות שעשיתי היא שהורדתי את הקבצים של הגרסה האחרונה מ OpenWRT וזו היתה טעות רצינית, מסתבר שהתקנתי גרסה חדשה מידי שלא ממש תואמת לנתב שגרמה לו לעשות Reset כל הזמן ולא היה ניתן להתקין עליו אף תוכנה, עשיתי Reflashing אבל זה רק עשה את זה יותר גרוע ולא הצלחתי להתחבר אליו בשום צורה, בקיצור הנתב נהפך ל Brick וההיתי בטוח שזה הסוף, אבל מסתבר ש D-LINK לא הורידה מהלוח את האפשרות להתחבר בעזרת חיבור סיראלי והפינים עדיין קיימים ,זו היתה הדרך היחידה להציל את המצב.


לאחד הפרוייקטים שלי רכשתי לוח Breakout Board מחברת Sparkfun שמחבר בין UART ל USB, מחירו בסביבות 15 דולר, מחברים את יציאת ה RX בנתב ל TX ב Breakout ואת ה TX בנתב ל RX ב Breakout כמובן לא לשכוח את ה GND ,מתחברים עם Putty ומתחילים לצרוב אותו מחדש.


מסתבר שהתקנתי את הגרסה Barrier Breaker אבל הגרסה המתאימה ביותר עבור אותו נתב היא Kamikaze לכן יש לעיין בקבצים באתר לפני ההתקנה.

מבנה סופי


סיכום:

עבודה עם OpenWRT מאפשרת לנו לשדרג נתבים ישנים ולהפוך אותם למכונת Linux לכל דבר, חשוב מאוד לאסוף את כל המידע הדרוש מהאתר OpenWRT וכמובן לחפש במקורות נוספים, במקרה שלי היה לי מזל שעדיין היה ניתן להתחבר בעזרת חיבור סיראלי שזה לא מובן מאליו לכן יש להשים לב לכל דבר קטן בתהליך ולעשות אותו בצורה המתאימה תוך שיקול דעת כי זה יכול להיות הרגעים האחרונים לנתב לפני שהוא נהרס לחלוטין.

לאתר הרשמי:

שדרגו בחוכמה!

אין תגובות:

הוסף רשומת תגובה