OTBR Docker را اجرا کنید

مشاهده منبع در GitHub

روتر مرزی OpenThread (OTBR) به گره Thread RCP برای پیوستن به شبکه Thread نیاز دارد. OTBR Docker هم از یک RCP فیزیکی (دانگل OpenThread) یا یک RCP شبیه سازی شده پشتیبانی می کند.

اگر می‌خواهید OTBR Docker را به سایر دستگاه‌های Thread فیزیکی متصل کنید، از یک RCP فیزیکی استفاده کنید. اگر می خواهید مسیریابی مرز را با یک شبکه Thread شبیه سازی شده آزمایش کنید، از یک RCP شبیه سازی شده استفاده کنید.

RCP فیزیکی

از هر پلتفرم OpenThread پشتیبانی شده برای RCP فیزیکی استفاده کنید. برای اطلاعات بیشتر، مرحله ساخت و فلش RCP را از راهنمای ساخت و پیکربندی روتر OpenThread Border ببینید.

RCP را وصل کنید

  1. پس از ساخت و فلش، دستگاه RCP را از طریق USB به دستگاهی که OTBR Docker را اجرا می کند وصل کنید.
  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 پایین می‌رود.

برای ادامه راه‌اندازی OTBR Docker به Test Connectivity بروید.

RCP شبیه سازی شده

از یک ساخت OpenThread RCP شبیه سازی شده برای RCP شبیه سازی شده استفاده کنید. اگر می‌خواهید مسیریابی مرز را با یک شبکه Thread شبیه‌سازی شده روی یک ماشین آزمایش کنید، مفید است.

برنامه RCP شبیه سازی شده را بسازید

  1. مخزن OpenThread را کلون کنید:

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

  2. بوت استرپ کنید و برنامه شبیه سازی شده را بسازید:

    cd openthread
    ./bootstrap
    make -f examples/Makefile-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 Docker

این پنجره ترمینال را باز بگذارید و در پس زمینه اجرا شود.

RCP شبیه سازی شده را شروع کنید

  1. یک پنجره ترمینال جدید برای اجرای RCP شبیه سازی شده باز کنید، زیرا باید در حین اجرای OTBR Docker در حال اجرا بماند.

  2. با استفاده از اولین پورت سریال در خروجی socat ، برنامه RCP شبیه سازی شده را شروع کنید. به عنوان مثال، اگر از /dev/pts/2 از خروجی socat استفاده کنید:

    ~/openthread/output/simulation/bin/ot-rcp 1 > /dev/pts/2 < /dev/pts/2
    

هیچ خروجی از این دستور وجود ندارد. این پنجره ترمینال را باز بگذارید و در پس زمینه اجرا شود.

ظرف OTBR Docker را راه اندازی کنید

در یک پنجره ترمینال جدید، socat Docker را با استفاده از دومین پورت سریال در خروجی سوکت راه اندازی کنید. به عنوان مثال، اگر از /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 پایین می‌رود.