openwrt搭建thread网络

参考博客
openwrt移植openthread
openwrt使用tayga/totd实现NAT64/DNS64
设备:1台openwrt路由,1台ubuntu,2块nRF52840dk开发板
网络拓扑:
在这里插入图片描述

搭建thread网络

制作ot-cli-ftd.hex

使用nRF52840 DK开发板搭建thread的网络参考该链接制作nRF52840 DK开发板做为FTD joiner。
该指导说明书制作制作出来的固件没有dns命令,如需要测试dns功能请输入一下执行编译固件:

make -f examples/Makefile-nrf52840 COMMISSIONER=1 JOINER=1 DNS_CLIENT=1

制作nrf52840_xxaa_pca10056.hex

nRF5 SDK for Thread and Zigbee
在该链接上下载nRF5_SDK_for_Thread_and_Zigbee_v4.1.0_32ce5f8.zip。解压后得到examples/thread/ncp/ftd/usb/hex/nrf52840_xxaa_pca10056.hex
按照下图连接进ubuntu:
在这里插入图片描述
ubuntu中烧录命令:

nrfjprog --chiperase --family NRF52 --program nrf52840_xxaa_pca10056.hex --reset

按照下图使用usb连接到openwrt:
在这里插入图片描述

OPENWRT配置nat64

可参考openwrt使用tayga/totd实现NAT64/DNS64,但是也有不同点。
下载tayga

opkg update
opkg install tayga

修改/etc/config/network

config globals 'globals'
        option ula_prefix 'ddbe:48ec:56c6::/48'

config interface 'nat64'
        option proto 'tayga'
        option ifname 'tayga-nat64'
        option ipv4_addr '192.168.64.1'
        option ipv6_addr '2001:db8:1::1'
        option prefix '64:ff9b::/96'  #64:ff9b::/96为thread网络固定nat64前缀,不可修改
        option dynamic_pool '192.168.64.0/24'
        option accept_ra '0'
        option send_rs '0'

修改/etc/config/firewall

config zone
        option name 'lan'
        list network 'lan'
        list network 'nat64'   #nat64作为lan
        list device 'wpan0'    #otbr-agent会创建wpan0虚拟网卡,此设置会自动添加相关iptable转发命令
        option input 'ACCEPT'
        option output 'ACCEPT'
        option forward 'ACCEPT'

重启配置

/etc/init.d/firewall restart
/etc/init.d/network restart

配置dns64

下载totd

opkg update
opkg install totd

修改/etc/totd.conf

forwarder 127.0.0.1 port 53   #dns server为openwrt本地的dnsmasq端口53
prefix 64:ff9b::    		 #thread网络固定nat64前缀
port 53535          		 #监控53535端口

将wpan0虚拟网卡(thread网络)所有dns请求(默认为53端口)转发到totd的监听端口(53535)

ip6tables -t nat -A PREROUTING -p udp --dport 53 -i wpan0 -j REDIRECT --to-port 53535

重启totd

/etc/init.d/totd enable
/etc/init.d/totd restart

启动BORDER ROUTER(openwrt)

根据openwrt移植openthread制作出openthread-br_xxx.ipk,并拷贝到openwrt的/tmp目录,openwrt接上网络:

opkg update
opkg install openthread-br_xxx.ipk
/usr/sbin/otbr-agent -d7 -v /dev/ttyACM0 115200 #最新版本的openthread,命令有修改/usr/sbin/otbr-agent  -d7 -v 'spinel+hdlc+uart:///dev/ttyACM0?uart-baudrate=115200'

此时可看见正常启动

root@GL-B1300:/# otbr-agent -d7 -v /dev/ttyACM0 115200
otbr-agent[30746]: Thread interface wpan0
otbr-agent[30746]: [INFO]-CORE----: Non-volatile: Read NetworkInfo {rloc:0x4c00, extaddr:a62c453dbd1253eb, role:Leader, mode:0x0f, version:2, keyseq:0x0, ...
otbr-agent[30746]: [INFO]-CORE----: Non-volatile: ... pid:0x78728e15, mlecntr:0x3f4, maccntr:0x3e8, mliid:33a5ebc501b87466}
otbr-agent[30746]: Set state callback: OK
otbr-agent[30746]: Thread is down
otbr-agent[30746]: Check if Thread is up: OK
otbr-agent[30746]: Start Thread Border Agent: Resource temporarily unavailable
otbr-agent[30746]: PSKc is initialized
otbr-agent[30746]: Check if PSKc is initialized: OK
otbr-agent[30746]: Initialize OpenThread Border Router Agent: OK
otbr-agent[30746]: Border router agent started.
otbr-agent[30746]: [INFO]-CORE----: Notifier: StateChanged (0x001fc300) [KeySeqCntr NetData Channel PanId NetName ExtPanId MstrKey PSKc SecPolicy] 
otbr-agent[30746]: [INFO]-PLAT----: processNetifLinkEvent: OK
otbr-agent[30746]: connected as 713e4f57

otbr-agent[30746]: uloop run

使用ot-ctl命令进行控制:

root@GL-B1300:/# ot-ctl 
> 
> dataset init new
Done
> dataset commit active
Done
> prefix add fd11:22::/64 pasor  #on-mesh 前缀,此步骤一定要执行,否则joiner无法通过nat64 ping通公网
Done
> ifconfig up
Done
> thread start
Done
> netdataregister #此步骤一定要执行,否则joiner无法通过nat64 ping通公网
Done
> ipaddr
fd11:22:0:0:3eca:978e:64d2:3fbc   #出现此ip,则joiner可以ping通公网,当然前提是border router要配好nat64
fd53:ee0b:7975:c9bd:0:ff:fe00:fc00
fd53:ee0b:7975:c9bd:0:ff:fe00:4c00
fd53:ee0b:7975:c9bd:33a5:ebc5:1b8:7466
fe80:0:0:0:a42c:453d:bd12:53eb
Done

建立thread连接

ubuntu安装screen

sudo apt-get install screen

建立thread连接

**ubuntu下执行**
screen /dev/ttyACM0 115200			#ubuntu使用screen命令连接nRF52840 DK
>
> eui64
f4ce36065192dcd4
Done

**openwrt下执行**
ot-ctl
> commissioner start
Commissioner: petitioning
Done
Commissioner: active
 
> commissioner joiner add f4ce36065192dcd4 J01NME
Done
Commissioner: Joiner start 07e9ce5137f675df
Commissioner: Joiner connect 07e9ce5137f675df
Commissioner: Joiner finalize 07e9ce5137f675df
Commissioner: Joiner end 07e9ce5137f675df
Commissioner: Joiner remove 07e9ce5137f675df

**ubuntu下执行**
> ifconfig up
Done
> 
> joiner start J01NME
Done
Join success
>
> thread start
Done
>
> dns resolve www.baidu.com			#如果从ubuntu中(thread joiner)dns解析成功,则说明openwrt中NAT64/DNS64配置成功
DNS response for www.baidu.com - 64:ff9b:0:0:0:0:ed7:b126 TTL: 183
Done
> 
> ping 64:ff9b:0:0:0:0:ed7:b126 1 3				#如果从ubuntu中(thread joiner)ping公网,则说明openwrt中NAT64配置成功,其中64:ff9b::为nat64前缀,ed7:b126()为百度的ipv4地址
Done
9 bytes from 64:ff9b:0:0:0:0:ed7:b126: icmp_seq=21 hlim=51
9 bytes from 64:ff9b:0:0:0:0:ed7:b126: icmp_seq=22 hlim=51
9 bytes from 64:ff9b:0:0:0:0:ed7:b126: icmp_seq=23 hlim=51

至此,openthread border router基本配置完成
nordic使用指导,里面详细描述了thread协议
opthread官方论坛,有问题可以自己去提问,官方技术支持很快会回答
opentread官方指导说明
openthread官方github

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值