Chạy Docker OTBR

Xem mã nguồn trên GitHub

Bộ định tuyến biên OpenThread (OTBR) yêu cầu nút Thread RCP để tham gia mạng Thread. OTBR Docker hỗ trợ cả RCP vật lý (bút dongle OpenThread) hoặc RCP mô phỏng.

Nếu bạn muốn kết nối Docker OTBR với các thiết bị Thread thực tế khác, hãy sử dụng RCP thực tế. Nếu bạn muốn kiểm thử định tuyến đường viền bằng mạng Luồng được mô phỏng, hãy sử dụng RCP được mô phỏng.

RCP vật lý

Sử dụng bất kỳ nền tảng OpenThread được hỗ trợ nào cho RCP thực. Hãy xem bước Tạo và cài đặt RCP trong hướng dẫn Tạo và cấu hình Bộ định tuyến đường viền OpenThread để biết thêm thông tin.

Đính kèm RCP

  1. Sau khi tạo bản dựng và cài đặt ROM, hãy đính kèm thiết bị RCP vào máy chạy Docker OTBR qua USB.
  2. Xác định tên cổng nối tiếp cho thiết bị RCP bằng cách kiểm tra /dev:
    ls /dev/tty*
    /dev/ttyACMO
    

Khởi động vùng chứa Docker OTBR

Trong cửa sổ dòng lệnh mới, hãy khởi động Docker OTBR, tham chiếu đến cổng nối tiếp của RCP. Ví dụ: nếu RCP được gắn tại /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

Sau khi thành công, bạn sẽ nhận được kết quả tương tự như sau:

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 hiện đang chạy. Để cửa sổ dòng lệnh này mở và chạy ở chế độ nền. Nếu bạn thoát khỏi quy trình hoặc đóng cửa sổ, Docker OTBR sẽ ngừng hoạt động.

Chuyển đến Test Connectivity (Kiểm thử khả năng kết nối) để tiếp tục thiết lập Docker OTBR.

RCP được mô phỏng

Sử dụng bản dựng OpenThread RCP được mô phỏng cho RCP được mô phỏng. Điều này rất hữu ích nếu bạn muốn kiểm thử định tuyến đường viền bằng mạng Luồng được mô phỏng trên một máy duy nhất.

Tạo ứng dụng RCP được mô phỏng

  1. Sao chép kho lưu trữ OpenThread:

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

  2. Tự khởi động và xây dựng ứng dụng mô phỏng:

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

Thiết lập luồng dữ liệu hai chiều

Sử dụng tiện ích dòng lệnh socat để thiết lập luồng dữ liệu hai chiều nhằm chuyển dữ liệu giữa RCP được mô phỏng và Docker OTBR.

  1. Hãy mở một cửa sổ dòng lệnh mới để chạy quy trình này, vì quy trình này phải được để trong khi OTBR Docker đang chạy.

  2. Cài đặt socat:

    sudo apt-get install socat
    

  3. Bắt đầu 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]
    

Ghi lại hai cổng nối tiếp được in đậm trong kết quả. Sử dụng tệp đầu tiên cho RCP được mô phỏng và tệp thứ hai cho Docker OTBR. Trong kết quả ví dụ trên:

  • /dev/pts/2 = Cổng RCP được mô phỏng
  • /dev/pts/7 = Docker OTBR

Để cửa sổ dòng lệnh này mở và chạy ở chế độ nền.

Bắt đầu RCP được mô phỏng

  1. Mở một cửa sổ dòng lệnh mới để chạy RCP được mô phỏng, vì bạn phải để cửa sổ này chạy trong khi Docker OTBR đang chạy.

  2. Sử dụng cổng nối tiếp đầu tiên trong đầu ra socat, hãy khởi động ứng dụng RCP được mô phỏng. Ví dụ: nếu sử dụng /dev/pts/2 từ đầu ra socat:

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

Lệnh này không có kết quả. Để cửa sổ dòng lệnh này mở và chạy ở chế độ nền.

Khởi động vùng chứa Docker OTBR

Trong cửa sổ dòng lệnh mới, hãy khởi động Docker OTBR bằng cách sử dụng cổng nối tiếp thứ hai trong đầu ra socat. Ví dụ: nếu sử dụng /dev/pts/7 từ dữ liệu đầu ra 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

Lưu ý rằng lệnh này cũng đang sử dụng cổng /dev/ttyUSB0. Đây là điểm gắn mặc định trong vùng chứa Docker.

Nếu thành công, bạn sẽ thấy kết quả tương tự như sau:

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 hiện đang chạy. Để cửa sổ dòng lệnh này mở và chạy ở chế độ nền. Nếu bạn thoát khỏi quy trình hoặc đóng cửa sổ, Docker OTBR sẽ ngừng hoạt động.