เรียกใช้ OTBR Docker

ดูแหล่งที่มาบน GitHub

OpenThread Border Router (OTBR) ต้องใช้โหนด RCP ของ Thread เพื่อเข้าร่วมเครือข่าย Thread OTBR Docker รองรับทั้ง RCP จริง (ดองเกิล OpenThread) หรือ RCP ที่จำลอง

หากต้องการเชื่อมต่อ Docker OTBR กับอุปกรณ์เทรดอื่นๆ ให้ใช้ RCP จริง หากต้องการทดสอบการกำหนดเส้นทาง Border ด้วยเครือข่ายเทรดจำลอง ให้ใช้ RCP จำลอง

RCP ทางกายภาพ

ใช้แพลตฟอร์ม OpenThread ที่รองรับสำหรับ RCP จริง ดูข้อมูลเพิ่มเติมได้ในขั้นตอน Build and Flash RCP จากคู่มือการสร้างและการกำหนดค่า Border Router ของ OpenThread

แนบ RCP

  1. หลังจากสร้างและแฟลชแล้ว ให้ต่ออุปกรณ์ RCP เข้ากับเครื่องที่ใช้ OTBR Docker ผ่าน USB
  2. ระบุชื่อพอร์ตซีเรียลของอุปกรณ์ RCP โดยตรวจสอบ/dev
    ls /dev/tty*
    /dev/ttyACMO
    

เริ่มต้นคอนเทนเนอร์ Docker OTBR

ในหน้าต่างเทอร์มินัลใหม่ ให้เริ่ม 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 จะปิดลง

ไปที่ทดสอบการเชื่อมต่อเพื่อดำเนินการต่อในการตั้งค่า OTBR Docker

RCP จำลอง

ใช้บิลด์ RCP ของ OpenThread ที่จำลองสำหรับ RCP ที่จำลอง ซึ่งจะมีประโยชน์หากคุณต้องการทดสอบการกำหนดเส้นทาง Border ด้วยเครือข่ายเทรดจำลองในเครื่องเดียว

สร้างแอปพลิเคชัน RCP ที่จำลอง

  1. โคลนที่เก็บ OpenThread

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

  2. เปิดระบบและสร้างแอปพลิเคชันจำลอง:

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

ตั้งค่าสตรีมข้อมูลแบบ 2 ทิศทาง

ใช้เครื่องมือบรรทัดคำสั่ง socat เพื่อสร้างสตรีมข้อมูลแบบ 2 ทิศทางเพื่อโอนข้อมูลระหว่าง RCP และ Docker OTBR ที่จำลอง

  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 จำลอง และอันที่ 2 สำหรับ OTBR Docker ในตัวอย่างเอาต์พุตด้านบน

  • /dev/pts/2 = พอร์ต RCP จำลอง
  • /dev/pts/7 = แท่นชาร์จ OTBR
ในเครื่องเสมอ

ปล่อยหน้าต่างเทอร์มินัลนี้เปิดอยู่และทำงานในเบื้องหลัง

เริ่ม RCP จำลอง

  1. เปิดหน้าต่างเทอร์มินัลใหม่เพื่อเรียกใช้ RCP ที่จำลอง เนื่องจากต้องเปิดไว้ขณะที่ OTBR Docker ทำงาน

  2. เริ่มแอปพลิเคชัน RCP จำลองโดยใช้พอร์ตอนุกรมแรกในเอาต์พุต socat เช่น หากใช้ /dev/pts/2 จากเอาต์พุต socat ให้ทำดังนี้

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

ไม่มีเอาต์พุตจากคําสั่งนี้ เปิดหน้าต่างเทอร์มินัลนี้ไว้และทำงานในเบื้องหลัง

เริ่มคอนเทนเนอร์ Docker ของ OTBR

ในหน้าต่างเทอร์มินัลใหม่ ให้เริ่ม Docker OTBR โดยใช้พอร์ตอนุกรมที่ 2 ในเอาต์พุต 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 จะปิดลง