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

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

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

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

RCP פיזי

משתמשים בכל פלטפורמת OpenThread נתמכת ל-RCP הפיזי. מידע נוסף זמין בשלב פיתוח וטעינה של RCP במדריך לפיתוח והגדרה של OpenThread Border Router.

צירוף ה-RCP

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

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

RCP מדומה

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

פיתוח גרסת build של אפליקציית RCP המדומה

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

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

  2. מפעילים את האפליקציה המדומה ומפתחים אותה:

    cd openthread
    ./script/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 הראשון להדמיה של RCP, וב-RCP השני ל-OTBR Docker. בפלט לדוגמה שלמעלה:

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

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

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