OTBR Docker'ı çalıştırma

Kaynağı GitHub'da görüntüleyin

OpenThread Sınır Yönlendirici (OTBR), Thread ağına katılmak için Thread RCP düğümü gerektirir. OTBR Docker, hem fiziksel RCP (OpenThread dongle) hem de simüle edilmiş RCP için destek sağlar.

OTBR Docker'ı diğer fiziksel Thread cihazlarına bağlamak istiyorsanız fiziksel bir RCP kullanın. Simüle edilmiş bir Thread ağıyla sınır yönlendirmeyi test etmek istiyorsanız simüle edilmiş bir RCP kullanın.

Fiziksel RCP

Fiziksel RCP için desteklenen herhangi bir OpenThread platformunu kullanın. Daha fazla bilgi için OpenThread Sınır Yönlendirici Derleme ve Yapılandırma kılavuzundaki RCP derleme ve flash adımına bakın.

RCP'yi ekleme

  1. Oluşturma ve yanıp söndürme işleminden sonra RCP cihazını USB üzerinden OTBR Docker'ı çalıştıran makineye bağlayın.
  2. /dev değerini kontrol ederek RCP cihazının seri bağlantı noktası adını belirleyin:
    ls /dev/tty*
    /dev/ttyACMO
    

OTBR Docker container'ını başlatma

Yeni bir terminal penceresinde, RCP'nin seri bağlantı noktasına referans vererek OTBR Docker'ı başlatın. Örneğin, RCP /dev/ttyACM0 konumuna monte edilmişse:

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

İşlem başarılı olursa şuna benzer bir çıkış alırsınız:

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 artık çalışıyor. Bu terminal penceresini açık ve arka planda çalışır durumda bırakın. İşlemden çıkar veya pencereyi kapatırsanız OTBR Docker aşağı gider.

OTBR Docker kurulumuna devam etmek için Bağlantıyı Test Et'e gidin.

Simüle edilmiş RCP

Simüle edilmiş RCP için simüle edilmiş bir OpenThread RCP derlemesi kullanın. Bu, tek bir makinede simüle edilmiş bir Thread ağı ile sınır yönlendirmeyi test etmek istiyorsanız kullanışlıdır.

Yapay zekayla taklit edilen RCP uygulamasını oluşturma

  1. OpenThread deposunu klonlayın:

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

  2. Simüle edilen uygulamayı önyükleyin ve derleyin:

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

İki yönlü veri akışı oluşturma

Yapay RCP ile OTBR Docker arasında veri aktarmak için iki yönlü veri akışı oluşturmak üzere socat komut satırı yardımcı programını kullanın.

  1. OTBR Docker çalışırken çalışır durumda bırakılması gerektiğinden bu işlemi çalıştırmak için yeni bir terminal penceresi açın.

  2. socat'ü yükleme:

    sudo apt-get install socat
    

  3. socat'ü başlatın:

    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]
    

Çıktıda kalın olarak gösterilen iki seri bağlantı noktasını not edin. İlkini simüle edilen RCP için, ikincisini OTBR Docker için kullanın. Yukarıdaki örnek çıkışta:

  • /dev/pts/2 = Yapay zeka simülasyonuyla oluşturulan RCP bağlantı noktası
  • /dev/pts/7 = OTBR Docker

Bu terminal penceresini açık ve arka planda çalışır durumda bırakın.

Simüle edilmiş RCP'yi başlatma

  1. OTBR Docker çalışırken taklit RCP'yi çalıştırmak için yeni bir terminal penceresi açın.

  2. socat çıkışındaki ilk seri bağlantı noktasını kullanarak simüle edilmiş RCP uygulamasını başlatın. Örneğin, socat çıkışından /dev/pts/2 kullanılıyorsa:

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

Bu komutun çıkışı yoktur. Bu terminal penceresini açık ve arka planda çalışır durumda bırakın.

OTBR Docker kapsayıcısını başlatma

Yeni bir terminal penceresinde, socat çıkışındaki ikinci seri bağlantı noktasını kullanarak OTBR Docker'ı başlatın. Örneğin, socat çıkışından /dev/pts/7 kullanılıyorsa:

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

Komutun aynı zamanda /dev/ttyUSB0 bağlantı noktasını da kullandığını unutmayın. Bu, Docker kapsayıcısındaki varsayılan bağlama noktasıdır.

İşlem başarılı olursa şuna benzer bir çıkış alırsınız:

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 artık çalışıyor. Bu terminal penceresini açık ve arka planda çalışır durumda bırakın. İşlemi bırakır veya pencereyi kapatırsanız OTBR Docker kapanır.