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

קל לארגן דפים בעזרת אוספים אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.

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

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

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

RCP פיזי

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

צירוף ה-RCP

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

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

בחלון מסוף חדש, מתחילים את OTBR ב-Docker, המציין את היציאה הטורית של 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 פועל עכשיו. השאירו את חלון הטרמינל פתוח ופועל ברקע. אם יוצאים מתהליך או סוגרים את החלון, אפליקציית OTBR ב-Docker תרד.

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

סימולציה של RCP

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

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

  1. שכפול המאגר של OpenThread:

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

  2. הפעלה ופיתוח של אפליקציית הסימולציה:

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

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

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

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

  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]
    

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

  • /dev/pts/2 = סימולציה של יציאת RCP
  • /dev/pts/7 = אביזר עגינה של OTBR

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

התחלת הסימולציה של RCP

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

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

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

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

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

בחלון הטרמינל החדש, מתחילים את OTBR ב-Docker, באמצעות היציאה הטורית השנייה בפלט 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 פועל עכשיו. השאירו את חלון הטרמינל פתוח ופועל ברקע. אם יוצאים מתהליך או סוגרים את החלון, אפליקציית OTBR ב-Docker תרד.