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

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

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

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

RCP פיזי

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

צירוף של ה-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 יסגור את המסך.

היכנסו לבדיקת הקישוריות כדי להמשיך בהגדרת OTBR ב-Docker.

הדמיה של RCP

שימוש בהדמיית גרסת build של RCP עבור 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]
    

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