OTBR Docker را اجرا کنید، 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
    ./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 شبیه سازی شده و دومی را برای 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 اکنون در حال اجرا است. این پنجره ترمینال را باز بگذارید و در پس زمینه اجرا شود. اگر فرآیند را ترک کنید یا پنجره را ببندید، OTBR Docker پایین می‌رود.