ডকার ইনস্টল করুন
রাস্পবেরি পাইতে:
ডকার ইনস্টল করুন:
curl -sSL https://get.docker.com | sh
আপনি যদি প্রতিটি কমান্ডের আগে
sudo
প্রয়োজন ছাড়াই ডকারকে নন-রুট হিসাবে ব্যবহার করতে চান তবে আপনার ব্যবহারকারী সেটিংস পরিবর্তন করুন। পরিবর্তনগুলি কার্যকর করার জন্য সাইন আউট করুন:sudo usermod -aG docker $USER
ডকার শুরু করুন যদি এটি ইতিমধ্যে চালু না হয়:
sudo dockerd
আইপি ফরওয়ার্ডিং সক্ষম করুন
লিনাক্স সাধারণত ডিফল্টরূপে আইপি ফরওয়ার্ডিং অক্ষম করে। হোস্ট সিস্টেমে আইপি ফরওয়ার্ডিং সক্ষম করতে setup-host
স্ক্রিপ্ট চালান।
curl -sSL
https://raw.githubusercontent.com/openthread/ot-br-posix/refs/heads/main/etc/docker/border-router/setup-host | bash
OTBR ডকার ইমেজ পান
OTBR ডকার ইমেজটি সরাসরি OpenThread Docker Hub থেকে টেনে, অথবা OTBR সংগ্রহস্থল ক্লোন করে এবং স্থানীয়ভাবে অন্তর্ভুক্ত Dockerfile তৈরি করে পান।
ডকার হাব থেকে ছবিটি টানুন
ছবিটি টানুন:
docker pull openthread/border-router:latest
এটি এখন আপনার ডকার চিত্রগুলির তালিকায় উপস্থিত হওয়া উচিত:
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE openthread/border-router latest 08666d77013d 2 hours ago 171MB
ডকারফাইল তৈরি করুন
নিজেই ছবিটি তৈরি করতে, OpenThread বর্ডার রাউটার সংগ্রহস্থল ক্লোন করুন এবং অন্তর্ভুক্ত ডকারফাইল তৈরি করুন।
গিট ইনস্টল করুন:
sudo apt install git
OTBR সংগ্রহস্থল ক্লোন করুন:
git clone --depth=1 https://github.com/openthread/ot-br-posix
cd ot-br-posix
ডকারফাইল তৈরি করুন:
docker build --no-cache -t openthread/border-router -f etc/docker/border-router/Dockerfile .
একটি OTBR কনফিগারেশন ফাইল তৈরি করুন
OTBR ডকার কনফিগারেশন সংরক্ষণ করতে একটি otbr-env.list
ফাইল তৈরি করুন।
OT_RCP_DEVICE=spinel+hdlc+uart:///dev/ttyACM0?uart-baudrate=1000000 OT_INFRA_IF=wlan0 OT_THREAD_IF=wpan0 OT_LOG_LEVEL=7
OT_RCP_DEVICE
: থ্রেড রেডিও কো-প্রসেসর (RCP) এর সাথে সংযোগ নির্দিষ্ট করে।OT_INFRA_IF
: সংলগ্ন অবকাঠামো নেটওয়ার্কের জন্য ব্যবহৃত নেটওয়ার্ক ইন্টারফেস (সাধারণত ওয়াই-ফাই বা ইথারনেট)।OT_THREAD_IF
: থ্রেড নেটওয়ার্কের জন্য ব্যবহৃত নেটওয়ার্ক ইন্টারফেসের নাম।OT_LOG_LEVEL
: OpenThread দ্বারা উত্পন্ন লগগুলির ভারবোসিটি স্তর৷
OTBR ডকার কন্টেইনার শুরু করুন
OTBR ইমেজ থেকে একটি নতুন কন্টেইনার তৈরি করুন এবং চালান।
docker run --name=otbr --detach --network=host --cap-add=NET_ADMIN --device=/dev/ttyACM0 --device=/dev/net/tun --volume=/var/lib/otbr:/data --env-file=otbr-env.list --restart=always openthread/border-router
docker run
: একটি ডকার কন্টেইনার চালানোর জন্য বেস কমান্ড।--name=otbr
: চলমান কন্টেইনারে "otbr" নাম বরাদ্দ করে। এটি বন্ধ করা, শুরু করা বা পরিদর্শন করার মতো ক্রিয়াগুলির জন্য পরে কন্টেইনারটি উল্লেখ করা সহজ করে তোলে।--detach
: কন্টেইনারটিকে বিচ্ছিন্ন মোডে চালায়, যার অর্থ এটি ব্যাকগ্রাউন্ডে চলে এবং কন্টেইনারের স্ট্যান্ডার্ড ইনপুট, আউটপুট বা ত্রুটি স্ট্রিমগুলিতে টার্মিনাল সংযুক্ত করে না।--network=host
: কন্টেইনারকে হোস্ট মেশিনের নেটওয়ার্ক স্ট্যাক সরাসরি ব্যবহার করে। এটি প্রায়ই OTBR-এর জন্য প্রয়োজনীয়, কারণ এটির নেটওয়ার্ক ইন্টারফেসে সরাসরি অ্যাক্সেস থাকা প্রয়োজন।--cap-add=NET_ADMIN
: ধারকটিকেNET_ADMIN
ক্ষমতা প্রদান করে। নেটওয়ার্ক অ্যাডমিনিস্ট্রেশনের কাজগুলি যেমন নেটওয়ার্ক ইন্টারফেস কনফিগার করা এবং রাউটিং করার জন্য ধারকটির জন্য এটি প্রয়োজনীয়।--device=/dev/ttyACM0
: হোস্টের/dev/ttyACM0
ডিভাইসটিকে কন্টেইনারে ম্যাপ করে। এটি সাধারণত থ্রেড রেডিও কো-প্রসেসর (RCP) এর সাথে সংযুক্ত সিরিয়াল পোর্ট। আপনার সিস্টেমের উপর নির্ভর করে নির্দিষ্ট ডিভাইসের নাম (ttyACM0) পরিবর্তিত হতে পারে।--device=/dev/net/tun
: হোস্টের/dev/net/tun
ডিভাইসটিকে কন্টেইনারে ম্যাপ করে। ভার্চুয়াল নেটওয়ার্ক ইন্টারফেস তৈরি এবং ব্যবহার করার জন্য এটি প্রয়োজনীয়, যা OTBR দ্বারা ব্যবহৃত হয়।--volume=/var/lib/otbr:/data
: হোস্ট ডিরেক্টরি/var/lib/otbr
/data
এ কন্টেইনারে মাউন্ট করে। এটি কন্টেইনারটিকে ডেটা বজায় রাখতে দেয়, যেমন নেটওয়ার্ক কনফিগারেশন, এমনকি যখন ধারকটি বন্ধ বা পুনরায় চালু করা হয়।--env-file=otbr-env.list
: নির্দিষ্ট ফাইল থেকে এনভায়রনমেন্ট ভেরিয়েবল পড়ে এবং কন্টেইনারের মধ্যে সেট করে। এই পরিবেশ ভেরিয়েবলগুলি সম্ভবত OTBR-এর জন্য কনফিগারেশন প্যারামিটার।--restart=always
: কনটেইনার বন্ধ হয়ে গেলে স্বয়ংক্রিয়ভাবে পুনরায় চালু করতে ডকার ডেমন কনফিগার করে। এটি নিশ্চিত করে যে OTBR সর্বদা চলমান। openthread/border-রাউটার: এটি ধারকটির জন্য ব্যবহার করার জন্য ডকার চিত্রটি নির্দিষ্ট করে। এই ক্ষেত্রে, এটি অফিসিয়াল OpenThread বর্ডার রাউটার ইমেজ।
ডকার লগগুলি দেখুন
লগ দেখতে হোস্টে নিম্নলিখিত কমান্ডটি ব্যবহার করুন:
docker logs otbr
যদি OTBR সফলভাবে চলছে, তাহলে আপনার এর মতো আউটপুট থাকা উচিত:
s6-rc: info: service mdns: starting s6-rc: info: service s6rc-oneshot-runner: starting Starting mDNSResponder... Default: mDNSResponder (Engineering Build) (Mar 26 2025 19:39:09) starting s6-rc: info: service mdns successfully started s6-rc: info: service s6rc-oneshot-runner successfully started s6-rc: info: service fix-attrs: starting s6-rc: info: service fix-attrs successfully started s6-rc: info: service legacy-cont-init: starting s6-rc: info: service legacy-cont-init successfully started s6-rc: info: service otbr-agent: starting Configuring OpenThread firewall... Configuring OpenThread NAT64... Starting otbr-agent... [NOTE]-AGENT---: Running 0.3.0-da4b5cf [NOTE]-AGENT---: Thread version: 1.4.0 [NOTE]-AGENT---: Thread interface: wpan0 [NOTE]-AGENT---: Radio URL: spinel+hdlc+uart:///dev/ttyACM0?uart-baudrate=1000000 [NOTE]-AGENT---: Radio URL: trel://wlan0 [NOTE]-ILS-----: Infra link selected: wlan0 [INFO]-RCP_HOS-: OpenThread log level changed to 5 49d.18:38:43.301 [D] P-SpinelDrive-: Sent spinel frame, flg:0x2, iid:0, tid:0, cmd:RESET 49d.18:38:43.301 [D] P-SpinelDrive-: Waiting response: key=0 49d.18:38:43.311 [D] P-SpinelDrive-: Received spinel frame, flg:0x2, iid:0, tid:0, cmd:PROP_VALUE_IS, key:LAST_STATUS, status:RESET_POWER_ON 49d.18:38:43.311 [I] P-SpinelDrive-: co-processor reset: RESET_POWER_ON 49d.18:38:43.311 [C] P-SpinelDrive-: Software reset co-processor successfully 49d.18:38:43.311 [D] P-SpinelDrive-: Sent spinel frame, flg:0x2, iid:0, tid:1, cmd:PROP_VALUE_GET, key:PROTOCOL_VERSION 49d.18:38:43.311 [D] P-SpinelDrive-: Waiting response: key=1 49d.18:38:43.312 [D] P-SpinelDrive-: Received spinel frame, flg:0x2, iid:0, tid:1, cmd:PROP_VALUE_IS, key:PROTOCOL_VERSION, major:4, minor:3 49d.18:38:43.312 [D] P-SpinelDrive-: Sent spinel frame, flg:0x2, iid:0, tid:1, cmd:PROP_VALUE_GET, key:NCP_VERSION 49d.18:38:43.312 [D] P-SpinelDrive-: Waiting response: key=2 49d.18:38:43.313 [D] P-SpinelDrive-: Received spinel frame, flg:0x2, iid:0, tid:1, cmd:PROP_VALUE_IS, key:NCP_VERSION, version:OPENTHREAD/7a25828-dirty; NRF52840; Mar 25 2025 15:51:02 49d.18:38:43.313 [D] P-SpinelDrive-: Sent spinel frame, flg:0x2, iid:0, tid:1, cmd:PROP_VALUE_GET, key:CAPS 49d.18:38:43.313 [D] P-SpinelDrive-: Waiting response: key=5 49d.18:38:43.314 [D] P-SpinelDrive-: Received spinel frame, flg:0x2, iid:0, tid:1, cmd:PROP_VALUE_IS, key:CAPS, caps:COUNTERS UNSOL_UPDATE_FILTER 802_15_4_2450MHZ_OQPSK CONFIG_RADIO MAC_RAW RCP_API_VERSION RCP_MIN_HOST_API_VERSION OPENTHREAD_LOG_METADATA 49d.18:38:43.376 [D] P-SpinelDrive-: Sent spinel frame, flg:0x2, iid:0, tid:1, cmd:PROP_VALUE_GET, key:HWADDR 49d.18:38:43.376 [D] P-RadioSpinel-: Wait response: tid=1 key=8 49d.18:38:43.376 [D] P-SpinelDrive-: Received spinel frame, flg:0x2, iid:0, tid:1, cmd:PROP_VALUE_IS, key:HWADDR, eui64:f4ce3693ab886040 49d.18:38:43.376 [D] P-SpinelDrive-: Sent spinel frame, flg:0x2, iid:0, tid:2, cmd:PROP_VALUE_GET, key:RCP_API_VERSION 49d.18:38:43.376 [D] P-RadioSpinel-: Wait response: tid=2 key=176 49d.18:38:43.377 [D] P-SpinelDrive-: Received spinel frame, flg:0x2, iid:0, tid:2, cmd:PROP_VALUE_IS, key:RCP_API_VERSION, version:11 49d.18:38:43.377 [D] P-SpinelDrive-: Sent spinel frame, flg:0x2, iid:0, tid:3, cmd:PROP_VALUE_GET, key:RCP_MIN_HOST_API_VERSION 49d.18:38:43.377 [D] P-RadioSpinel-: Wait response: tid=3 key=177 49d.18:38:43.378 [D] P-SpinelDrive-: Received spinel frame, flg:0x2, iid:0, tid:3, cmd:PROP_VALUE_IS, key:RCP_MIN_HOST_API_VERSION, min-host-version:4 49d.18:38:43.378 [D] P-SpinelDrive-: Sent spinel frame, flg:0x2, iid:0, tid:4, cmd:PROP_VALUE_GET, key:RADIO_CAPS 49d.18:38:43.378 [D] P-RadioSpinel-: Wait response: tid=4 key=4619 49d.18:38:43.379 [D] P-SpinelDrive-: Received spinel frame, flg:0x2, iid:0, tid:4, cmd:PROP_VALUE_IS, key:RADIO_CAPS, caps:255 49d.18:38:43.410 [D] P-Trel--------: platformTrelInit(aTrelUrl:"trel://wlan0") 49d.18:38:43.410 [D] P-Trel--------: otSysTrelInit(aInterfaceName:"wlan0") [DEBG]-TrelDns-: Initialized on netif "wlan0" [DEBG]-TrelDns-: Netif wlan0 is ready: index = 3 49d.18:38:43.411 [I] P-Netif-------: Sent request#1 to set addr_gen_mode to 1 00:00:00.000 [D] P-SpinelDrive-: Sent spinel frame, flg:0x2, iid:0, tid:5, cmd:PROP_VALUE_GET, key:PHY_CHAN_SUPPORTED 00:00:00.000 [D] P-RadioSpinel-: Wait response: tid=5 key=34 00:00:00.001 [D] P-SpinelDrive-: Received spinel frame, flg:0x2, iid:0, tid:5, cmd:PROP_VALUE_IS, key:PHY_CHAN_SUPPORTED, channelMask:0x07fff800 00:00:00.001 [D] P-SpinelDrive-: Sent spinel frame, flg:0x2, iid:0, tid:6, cmd:PROP_VALUE_SET, key:PHY_ENABLED, enabled:1 00:00:00.001 [D] P-RadioSpinel-: Wait response: tid=6 key=32 00:00:00.003 [D] P-SpinelDrive-: Received spinel frame, flg:0x2, iid:0, tid:6, cmd:PROP_VALUE_IS, key:PHY_ENABLED, enabled:1 00:00:00.003 [D] P-SpinelDrive-: Sent spinel frame, flg:0x2, iid:0, tid:7, cmd:PROP_VALUE_SET, key:MAC_15_4_PANID, panid:0xffff 00:00:00.003 [D] P-RadioSpinel-: Wait response: tid=7 key=54 00:00:00.003 [D] P-SpinelDrive-: Received spinel frame, flg:0x2, iid:0, tid:7, cmd:PROP_VALUE_IS, key:MAC_15_4_PANID, panid:0xffff 00:00:00.003 [D] P-SpinelDrive-: Sent spinel frame, flg:0x2, iid:0, tid:8, cmd:PROP_VALUE_SET, key:MAC_15_4_SADDR, saddr:0x0000 00:00:00.003 [D] P-RadioSpinel-: Wait response: tid=8 key=53 00:00:00.004 [D] P-SpinelDrive-: Received spinel frame, flg:0x2, iid:0, tid:8, cmd:PROP_VALUE_IS, key:MAC_15_4_SADDR, saddr:0x0000 00:00:00.004 [D] P-SpinelDrive-: Sent spinel frame, flg:0x2, iid:0, tid:9, cmd:PROP_VALUE_GET, key:PHY_RX_SENSITIVITY 00:00:00.004 [D] P-RadioSpinel-: Wait response: tid=9 key=39 00:00:00.005 [D] P-SpinelDrive-: Received spinel frame, flg:0x2, iid:0, tid:9, cmd:PROP_VALUE_IS, key:PHY_RX_SENSITIVITY, sensitivity:-100 00:00:00.005 [D] P-SpinelDrive-: Sent spinel frame, flg:0x2, iid:0, tid:10, cmd:PROP_VALUE_SET, key:RCP_MAC_KEY, keyIdMode:8, keyId:1, prevKey:***, currKey:***, nextKey:*** 00:00:00.005 [D] P-RadioSpinel-: Wait response: tid=10 key=2048 00:00:00.007 [D] P-SpinelDrive-: Received spinel frame, flg:0x2, iid:0, tid:10, cmd:PROP_VALUE_IS, key:LAST_STATUS, status:OK 00:00:00.007 [D] P-SpinelDrive-: Sent spinel frame, flg:0x2, iid:0, tid:11, cmd:PROP_VALUE_SET, key:MAC_15_4_LADDR, laddr:a2566e135ad5df32 00:00:00.007 [D] P-RadioSpinel-: Wait response: tid=11 key=52 00:00:00.008 [D] P-SpinelDrive-: Received spinel frame, flg:0x2, iid:0, tid:11, cmd:PROP_VALUE_IS, key:MAC_15_4_LADDR, laddr:a2566e135ad5df32 00:00:00.008 [D] P-SpinelDrive-: Sent spinel frame, flg:0x2, iid:0, tid:12, cmd:PROP_VALUE_SET, key:MAC_15_4_SADDR, saddr:0xfffe 00:00:00.008 [D] P-RadioSpinel-: Wait response: tid=12 key=53 00:00:00.009 [D] P-SpinelDrive-: Received spinel frame, flg:0x2, iid:0, tid:12, cmd:PROP_VALUE_IS, key:MAC_15_4_SADDR, saddr:0xfffe 00:00:00.009 [D] P-SpinelDrive-: Sent spinel frame, flg:0x2, iid:0, tid:13, cmd:PROP_VALUE_SET, key:MAC_SRC_MATCH_SHORT_ADDRESSES, saddr:none 00:00:00.009 [D] P-RadioSpinel-: Wait response: tid=13 key=4868 00:00:00.010 [D] P-SpinelDrive-: Received spinel frame, flg:0x2, iid:0, tid:13, cmd:PROP_VALUE_IS, key:LAST_STATUS, status:OK 00:00:00.011 [D] P-SpinelDrive-: Sent spinel frame, flg:0x2, iid:0, tid:14, cmd:PROP_VALUE_SET, key:MAC_SRC_MATCH_EXTENDED_ADDRESSES, extaddr:none 00:00:00.011 [D] P-RadioSpinel-: Wait response: tid=14 key=4869 00:00:00.012 [D] P-SpinelDrive-: Received spinel frame, flg:0x2, iid:0, tid:14, cmd:PROP_VALUE_IS, key:LAST_STATUS, status:OK 00:00:00.012 [I] CslTxScheduler: Set frame request ahead: 6200 usec 00:00:00.012 [I] ChildSupervsn-: Timeout: 0 -> 190 00:00:00.013 [D] P-Trel--------: PrepareSocket() [DEBG]-TrelDns-: Start browsing _trel._udp services ... 00:00:00.013 [I] TrelInterface-: Enabled interface, local port:52346 00:00:00.013 [I] RoutingManager: Initializing - InfraIfIndex:3 00:00:00.013 [I] InfraIf-------: Init infra netif 3 00:00:00.013 [N] RoutingManager: No valid /48 BR ULA prefix found in settings, generating new one 00:00:00.038 [I] Settings------: Saved BrUlaPrefix fd92:6043:f0e2::/48 00:00:00.038 [N] RoutingManager: BR ULA prefix: fd92:6043:f0e2::/48 (generated) 00:00:00.038 [I] RoutingManager: Generated local OMR prefix: fd92:6043:f0e2:1::/64 00:00:00.038 [I] RoutingManager: Generated local NAT64 prefix: fd92:6043:f0e2:2:0:0::/96 00:00:00.038 [N] RoutingManager: Local on-link prefix: fdde:ad00:beef:cafe::/64 00:00:00.038 [I] InfraIf-------: State changed: NOT RUNNING -> RUNNING 00:00:00.038 [I] RoutingManager: Enabling 00:00:00.038 [I] Nat64---------: IPv4 CIDR for NAT64: 192.168.255.0/24 (actual address pool: 192.168.255.1 - 192.168.255.254, 254 addresses) [INFO]-UTILS---: Set state callback: OK 00:00:00.039 [I] Nat64---------: NAT64 translator is now NotRunning [DEBG]-TrelDns-: mDNS Publisher is Ready [INFO]-TrelDns-: TREL DNS-SD Is Now Ready: Netif=wlan0(3), SubscriberId=1, Register=! [INFO]-MDNS----: Subscribe service ._trel._udp (total 1) [INFO]-MDNS----: DNSServiceBrowse _trel._udp [INFO]-BA------: Start Thread Border Agent [INFO]-ADPROXY-: Started [INFO]-DPROXY--: Started [INFO]-APP-----: Co-processor version: OPENTHREAD/7a25828-dirty; NRF52840; Mar 25 2025 15:51:02 00:00:00.039 [I] Notifier------: StateChanged (0x40038210) [MLAddr NetData PanId NetName ExtPanId Nat64] 00:00:00.041 [I] Platform------: Execute command `ipset flush otbr-ingress-allow-dst-swap` = 0 00:00:00.042 [I] Platform------: Execute command `ipset flush otbr-ingress-deny-src-swap` = 0 00:00:00.044 [I] Platform------: Execute command `ipset add otbr-ingress-deny-src-swap fdde:ad00:beef:0::/64 -exist` = 0 00:00:00.046 [I] Platform------: Execute command `ipset swap otbr-ingress-deny-src-swap otbr-ingress-deny-src` = 0 00:00:00.047 [I] Platform------: Execute command `ipset swap otbr-ingress-allow-dst-swap otbr-ingress-allow-dst` = 0 00:00:00.047 [I] P-Netif-------: NAT64 CIDR updated to 192.168.255.0/24. 00:00:00.047 [I] P-Netif-------: Sent request#2 to delete route 192.168.255.0/24 00:00:00.047 [I] P-Netif-------: Deleting route for NAT64 00:00:00.047 [I] RouterTable---: Route table 00:00:00.047 [I] TrelInterface-: Registering DNS-SD service: port:52346, txt:"xa=a2566e135ad5df32, xp=dead00beef00cafe" [DEBG]-TrelDns-: Register _trel._udp service: port=52346, TXT=24 bytes [DEBG]-TrelDns-: Using instance name a2566e135ad5df32 [INFO]-MDNS----: Registering service a2566e135ad5df32._trel._udp 00:00:00.058 [I] Settings------: Saved BorderAgentId {id:27a9a3c44dd733402e8a940a20fc1051} [INFO]-BA------: Result of decoding MeshCoP TXT data from OT: OK [INFO]-BA------: Publish meshcop service OpenThread BorderRouter #DF32._meshcop._udp.local. [INFO]-MDNS----: Registering service OpenThread BorderRouter #DF32._meshcop._udp 00:00:00.059 [I] P-Netif-------: Host netif is down 00:00:00.059 [I] P-Netif-------: Succeeded to process request#1 00:00:00.060 [W] P-Netif-------: Failed to process request#2: No such process s6-rc: info: service otbr-agent successfully started ...