OTBR डॉकर चलाएं

GitHub पर सोर्स देखें

OpenThread बॉर्डर राऊटर (OTBR) को Thread नेटवर्क से जुड़ने के लिए, Thread आरसीपी नोड की ज़रूरत होती है. OTBR Docker, फ़िज़िकल आरसीपी (OpenThread डॉंगल) या सिम्युलेटेड आरसीपी, दोनों के साथ काम करता है.

अगर आपको OTBR Docker को अन्य फ़िज़िकल थ्रेड डिवाइसों से कनेक्ट करना है, तो फ़िज़िकल आरसीपी का इस्तेमाल करें. अगर आपको सिम्युलेट किए गए Thread नेटवर्क की मदद से, बॉर्डर रूटिंग की जांच करनी है, तो सिम्युलेट किए गए आरसीपी का इस्तेमाल करें.

फ़िज़िकल आरसीपी

फ़िज़िकल आरसीपी के लिए, काम करने वाले किसी भी OpenThread प्लैटफ़ॉर्म का इस्तेमाल करें. ज़्यादा जानकारी के लिए, OpenThread बॉर्डर राउटर के बिल्ड और कॉन्फ़िगरेशन की गाइड में, आरसीपी बनाना और फ़्लैश करना चरण देखें.

आरसीपी अटैच करना

  1. बिल्ड करने और फ़्लैश करने के बाद, यूएसबी के ज़रिए RCP डिवाइस को, OTBR Docker चलाने वाली मशीन से कनेक्ट करें.
  2. /dev देखकर, आरसीपी डिवाइस के सीरियल पोर्ट का नाम तय करें:
    ls /dev/tty*
    /dev/ttyACMO
    

OTBR Docker कंटेनर शुरू करना

नई टर्मिनल विंडो में, RCP के सीरियल पोर्ट का रेफ़रंस देकर, OTBR Docker शुरू करें. उदाहरण के लिए, अगर आरसीपी /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 सेटअप जारी रखने के लिए, कनेक्शन की जांच करें पर जाएं.

सिम्युलेट किया गया आरसीपी

सिम्युलेट किए गए आरसीपी के लिए, सिम्युलेट किए गए OpenThread आरसीपी बिल्ड का इस्तेमाल करें. यह तरीका तब काम आता है, जब आपको एक ही मशीन पर सिम्युलेटेड Thread नेटवर्क की मदद से बॉर्डर रूटिंग की जांच करनी हो.

सिम्युलेट किया गया आरसीपी ऐप्लिकेशन बनाना

  1. OpenThread डेटा स्टोर करने की जगह का क्लोन बनाएं:

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

  2. सिम्युलेट किया गया ऐप्लिकेशन बूटस्ट्रैप करें और बनाएं:

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

डेटा को दोनों तरफ़ भेजने और पाने की सुविधा वाली डेटा स्ट्रीम सेट अप करना

सिम्युलेट किए गए आरसीपी और ओटीबीआर डॉकर के बीच डेटा ट्रांसफ़र करने के लिए, socat कमांड लाइन की सुविधा का इस्तेमाल करके, डेटा की द्वि-दिशात्मक स्ट्रीम सेट अप करें.

  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]
    

आउटपुट में बोल्ड किए गए दो सीरियल पोर्ट का नोट बनाएं. पहले को सिम्युलेट किए गए आरसीपी के लिए और दूसरे को ओटीबीआर डॉकर के लिए इस्तेमाल करें. ऊपर दिए गए उदाहरण के आउटपुट में:

  • /dev/pts/2 = सिम्युलेट किया गया आरपीसी पोर्ट
  • /dev/pts/7 = OTBR Docker
में वैल्यू का इस्तेमाल करें.

इस टर्मिनल विंडो को खुला रहने दें और बैकग्राउंड में चलाएं.

सिम्युलेट किया गया आरसीपी शुरू करना

  1. सिम्युलेट किया गया आरसीपी चलाने के लिए, एक नई टर्मिनल विंडो खोलें, क्योंकि ओटीबीआर डॉकर के चलने के दौरान इसे चालू रखना ज़रूरी है.

  2. socat आउटपुट में पहले सीरियल पोर्ट का इस्तेमाल करके, सिम्युलेट किया गया आरसीपी ऐप्लिकेशन शुरू करें. उदाहरण के लिए, अगर socat आउटपुट से /dev/pts/2 का इस्तेमाल किया जा रहा है, तो:

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

इस कमांड से कोई आउटपुट नहीं मिलता. इस टर्मिनल विंडो को खुला और बैकग्राउंड में चालू रखें.

OTBR Docker कंटेनर शुरू करना

नई टर्मिनल विंडो में, socat आउटपुट में दूसरे सीरियल पोर्ट का इस्तेमाल करके, OTBR Docker शुरू करें. उदाहरण के लिए, अगर socat आउटपुट से /dev/pts/7 का इस्तेमाल किया जा रहा है, तो:

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 बंद हो जाएगा.