הפעלת עגינה של OTBR

הצגת המקור ב-GitHub

נתב OpenThread Border (OTBR) דורש צומת RCP של Thread כדי להצטרף רשת של פרוטוקול Thread. Docker של OTBR תומך ב-RCP פיזי (OpenThread) או RCP מדומה).

כדי לחבר Docker מסוג OTBR למכשירי Thread פיזיים אחרים, צריך להשתמש RCP פיזי. אם רוצים לבדוק ניתוב גבולות באמצעות סימולציה של Thread משתמשים בסימולציה של RCP.

RCP פיזי

להשתמש בכל פלטפורמת OpenThread נתמכת RCP פיזי. למידע נוסף, ראו build ו-Flash RCP. מהמדריך OpenThread Border Router Build and Configuration מידע.

צירוף ה-RCP

  1. לאחר הבנייה וההבהוב, מחברים את מכשיר ה-RCP למכונה שפועלת Docker מסוג OTBR באמצעות USB.
  2. קובעים את שם היציאה הטורית של מכשיר ה-RCP על ידי בדיקה של /dev:
    ls /dev/tty*
    /dev/ttyACMO
    

הפעלת קונטיינר OTBR של Docker

בחלון טרמינל חדש, מפעילים את Docker מסוג OTBR, עם הפניה ליציאה הטורית של ה-RCP. לדוגמה, אם ה-RCP נטען ב-/dev/ttyACM0:

docker run --sysctl "net.ipv6.conf.all.disable_ipv6=0 net.ipv4.conf.all.forwarding=1 net.ipv6.conf.all.forwarding=1" -p 8080:80 --dns=127.0.0.1 -it --volume /dev/ttyACM0:/dev/ttyACM0 --privileged openthread/otbr --radio-url spinel+hdlc+uart:///dev/ttyACM0

לאחר ההצלחה, הפלט אמור להיראות כך:

WARNING: Localhost DNS setting (--dns=127.0.0.1) may fail in containers.
RADIO_URL: spinel+hdlc+uart:///dev/ttyACM0
TUN_INTERFACE_NAME: wpan0
NAT64_PREFIX: 64:ff9b::/96
AUTO_PREFIX_ROUTE: true
AUTO_PREFIX_SLAAC: true
Current platform is ubuntu
* Applying /etc/sysctl.d/10-console-messages.conf ...
kernel.printk = 4 4 1 7
* Applying /etc/sysctl.d/10-ipv6-privacy.conf ...
net.ipv6.conf.all.use_tempaddr = 2
net.ipv6.conf.default.use_tempaddr = 2
* Applying /etc/sysctl.d/10-kernel-hardening.conf ...
kernel.kptr_restrict = 1
* Applying /etc/sysctl.d/10-link-restrictions.conf ...
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
* Applying /etc/sysctl.d/10-magic-sysrq.conf ...
kernel.sysrq = 176
* Applying /etc/sysctl.d/10-network-security.conf ...
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.tcp_syncookies = 1
* Applying /etc/sysctl.d/10-ptrace.conf ...
kernel.yama.ptrace_scope = 1
* Applying /etc/sysctl.d/10-zeropage.conf ...
vm.mmap_min_addr = 65536
* Applying /etc/sysctl.d/60-otbr-ip-forward.conf ...
net.ipv6.conf.all.forwarding = 1
net.ipv4.ip_forward = 1
* Applying /etc/sysctl.conf ...
 * Starting userspace NAT64 tayga             [ OK ]
/usr/sbin/service
 * Starting domain name service... bind9      [ OK ]
/usr/sbin/service
 * dbus is not running
 * Starting system message bus dbus           [ OK ]
   ...fail!
otWeb[155]: border router web started on wpan0
otbr-agent[224]: Thread interface wpan0
otbr-agent[224]: Thread is down
otbr-agent[224]: Check if Thread is up: OK
otbr-agent[224]: Stop publishing service
otbr-agent[224]: PSKc is not initialized
otbr-agent[224]: Check if PSKc is initialized: OK
otbr-agent[224]: Initialize OpenThread Border Router Agent: OK
otbr-agent[224]: Border router agent started.

OTBR Docker פועל עכשיו. צריך להשאיר את חלון הטרמינל פתוח ולפעול רקע. אם יוצאים מהתהליך או סוגרים את החלון, ה-Docker OTBR יפעל למטה.

עוברים אל בדיקת הקישוריות כדי ממשיכים בהגדרת Docker של OTBR.

סימולציה של RCP

משתמשים בהדמיה של גרסת build של OpenThread RCP לסימולציה של ה-RCP. האפשרות הזאת שימושית אם רוצים לבדוק ניתוב גבולות עם סימולציה של רשת פרוטוקול Thread במחשב.

פיתוח אפליקציה להדמיה של RCP

  1. משכפלים את המאגר של OpenThread:

    cd ~
    git clone https://github.com/openthread/openthread
    

  2. אתחול ובניית האפליקציה המדומה:

    cd openthread
    ./script/bootstrap
    ./script/cmake-build simulation
    

הגדרה של מקור נתונים דו-כיווני

שימוש בכלי שורת הפקודה socat כדי ליצור מקור נתונים דו-כיווני כדי להעביר נתונים בין ההדמיה של RCP ל-Docker OTBR.

  1. כדי להריץ את התהליך הזה צריך לפתוח חלון טרמינל חדש כי הוא צריך להישאר פועל בזמן שה-Docker OTBR פועל.

  2. התקנת socat:

    sudo apt-get install socat
    

  3. התחלת socat:

    socat -d -d pty,raw,echo=0 pty,raw,echo=0
    2018/09/06 09:58:29 socat[242994] N PTY is /dev/pts/2
    2018/09/06 09:58:29 socat[242994] N PTY is /dev/pts/7
    2018/09/06 09:58:29 socat[242994] N starting data transfer loop with FDs [5,5] and [7,7]
    

רושמים בצד את שתי היציאות הטוריות שמודגשות בפלט. שימוש בקוד הראשון עבור הסימולציה של ה-RCP והשנייה ל-Docker OTBR. בפלט לדוגמה למעלה:

  • /dev/pts/2 = סימולציה של יציאת RCP
  • /dev/pts/7 = Docker מסוג OTBR

צריך להשאיר את חלון הטרמינל פתוח ולפעול ברקע.

הפעלת הסימולציה של ה-RCP

  1. פותחים חלון טרמינל חדש כדי להריץ את ה-RCP הסימולציה, כי צריך להשאיר אותו בזמן שה-Docker OTBR פועל.

  2. באמצעות היציאה הטורית הראשונה בפלט socat, יש להפעיל את ה-RCP המדמה תרגום מכונה. לדוגמה, אם משתמשים ב-/dev/pts/2 מהפלט socat:

    ~/openthread/build/simulation/examples/apps/ncp/ot-rcp 1 > /dev/pts/2 < /dev/pts/2
    

אין פלט מהפקודה הזו. צריך להשאיר את חלון הטרמינל פתוח ואז פועלת ברקע.

הפעלת קונטיינר OTBR של Docker

בחלון טרמינל חדש, מפעילים את Docker של OTBR, באמצעות היציאה הטורית השנייה פלט socat. לדוגמה, אם משתמשים ב-/dev/pts/7 מהפלט socat:

docker run --sysctl "net.ipv6.conf.all.disable_ipv6=0 net.ipv4.conf.all.forwarding=1 net.ipv6.conf.all.forwarding=1" -p 8080:80 --dns=127.0.0.1 -it --volume /dev/pts/7:/dev/ttyUSB0 --privileged openthread/otbr

חשוב לשים לב שהפקודה משתמשת גם ביציאה /dev/ttyUSB0. זוהי ברירת המחדל בתוך הקונטיינר של Docker.

לאחר ההצלחה, הפלט אמור להיראות כך:

WARNING: Localhost DNS setting (--dns=127.0.0.1) may fail in containers.
RADIO_URL: spinel+hdlc+uart:///dev/ttyUSB0
TUN_INTERFACE_NAME: wpan0
NAT64_PREFIX: 64:ff9b::/96
AUTO_PREFIX_ROUTE: true
AUTO_PREFIX_SLAAC: true
Current platform is ubuntu
* Applying /etc/sysctl.d/10-console-messages.conf ...
kernel.printk = 4 4 1 7
* Applying /etc/sysctl.d/10-ipv6-privacy.conf ...
net.ipv6.conf.all.use_tempaddr = 2
net.ipv6.conf.default.use_tempaddr = 2
* Applying /etc/sysctl.d/10-kernel-hardening.conf ...
kernel.kptr_restrict = 1
* Applying /etc/sysctl.d/10-link-restrictions.conf ...
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
* Applying /etc/sysctl.d/10-magic-sysrq.conf ...
kernel.sysrq = 176
* Applying /etc/sysctl.d/10-network-security.conf ...
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.tcp_syncookies = 1
* Applying /etc/sysctl.d/10-ptrace.conf ...
kernel.yama.ptrace_scope = 1
* Applying /etc/sysctl.d/10-zeropage.conf ...
vm.mmap_min_addr = 65536
* Applying /etc/sysctl.d/60-otbr-ip-forward.conf ...
net.ipv6.conf.all.forwarding = 1
net.ipv4.ip_forward = 1
* Applying /etc/sysctl.conf ...
 * Starting userspace NAT64 tayga             [ OK ]
/usr/sbin/service
 * Starting domain name service... bind9      [ OK ]
/usr/sbin/service
 * dbus is not running
 * Starting system message bus dbus           [ OK ]
   ...fail!
otWeb[155]: border router web started on wpan0
otbr-agent[224]: Thread interface wpan0
otbr-agent[224]: Thread is down
otbr-agent[224]: Check if Thread is up: OK
otbr-agent[224]: Stop publishing service
otbr-agent[224]: PSKc is not initialized
otbr-agent[224]: Check if PSKc is initialized: OK
otbr-agent[224]: Initialize OpenThread Border Router Agent: OK
otbr-agent[224]: Border router agent started.

OTBR Docker פועל עכשיו. צריך להשאיר את חלון הטרמינל פתוח ולפעול רקע. אם יוצאים מהתהליך או סוגרים את החלון, ה-Docker OTBR יפעל למטה.