主要内容来自于:http://blog.csdn.net/ffilman/article/details/5754989
由于是10年的内容,很多东西感觉不一样
现在编译的openwrt的串口里nvram命令不见了,但是SDK里面有nvram啊,搞不懂,为什么?需要安装什么软件包吗?
显示所有参数:
# nvram show # nvram show | grep wl0_
设置:
# nvram set <param>=<value> # nvram set lan_ipaddr=192.168.1.2 # nvram commit # reboot
删除一些参数:
# nvran unset <param>
提交修改:
# nvram commit
8.1 配置MAC地址,未确定版本
备份原有的CFE:
dd if=/dev/mtd/0 of=/tmp/cfe.bin dd if=/dev/mtd/3 of=/tmp/nvram.bin
8.3 无线网络配置 修改文件 /etc/config/wireless ,寻找 config wifi-iface ,如下修改: option ssid XXXXXX #定义SSID option mode ap #AP的工作模式 option encryption none #不加密 option encryption wep #WEP加密 option key 1 option key1 XXXXXXX #密钥,wep64为10个16进制数字,wep128为26个16进制数字 option encryption psk #WPA-PSK加密 option key XXXXXX #WPA密钥 option hidden 1 #启用SSID隐藏,0为广播 还要将上面的如下行给注释掉,否无线不会启动: #option disable 1 配置好以后运行: /etc/init.d/network restart 8.4 PPPoE上网配置 自动获取IP的PPPoE,修改 /etc/config/network ,寻找 config interface wan ,如下修改: option ifname "eth0.1" option proto pppoe option username <username> #PPPoE用户名 option password <password> #PPPoE密码 option macaddr xx:xx:xx:xx:xx:xx #MAC地址克隆 配置好以后运行: /etc/init.d/network restart 检查状况,在 ifconfig 中看到ppp0就好了。 DHCP配置: option ifname "eth0.1" option proto dhcp option hostname <routername> #设置路由器机器名 8.5 简单的无线中继配置 修改 /etc/config/wireless ,添加如下配置: config wifi-iface option device wl0 option mode sta option ssid #需要中继的AP的SSID option encryption #加密方式 然后把 /etc/config/network 中的宽带配置修改为: config interface wan option ifname "wl0" option proto dhcp 8.6 修改路由器交换端口 kamikaze默认交换端口与7231-4P的不同,修改 /etc/config/network 文件,找到 config switch eth0 一节的valn0和vlan1设置: option vlan0 "0 1 2 3 5*" option vlan1 "4 5" 9 软件与模块安装 9.1 安装USB设备 安装驱动,针对7231-4P: opkg update opkg install kmod-usb-ohci opkg install kmod-usb-storage 安装文件系统模块: opkg install kmod-fs-ext3 opkg install e2fsprogs 接入U盘,可以用dmesg看到 /dev/scsi/host0/bus0/target0/lun0 之类的信息,并可以认出型号。 格式化U盘: mke2fs -j /dev/scsi/host0/bus0/target0/lun0/part1 挂载: mkdir /opt mount -t ext3 /dev/scsi/host0/bus0/target0/lun0/part1 /opt 开机自动挂载U盘,建立 /etc/init.d/optware 文件。这种太复杂,略过。 可以通过设置 /etc/fstab 来自动挂载,先启用fstab: # uci set fstab.@mount[0].enabled=1 # uci set fstab.@mount[0].fstype=ext3 # uci set fstab.@mount[0].device=/dev/mmcblk0p1 # uci set fstab.@mount[0].target=/mnt/mmc # uci set fstab.@mount[0].options=rw,sync,noatime # uci commit fstab # /etc/init.d/fstab restart 经测试来看不管用。 修改 /etc/preinit 也不管用。 修改 /etc/config/fstab 也不管用。 10 故障解决 11 我的归纳 刷firmware时可以用web界面升级,扩展名必须由.trx改成.bin。 刷完以后就可以直接进telnet来进行配置了。主要顺序如下: 修改交换机端口 修改路由器的IP地址以及内网网段 修改无线AP的配置 修改PPPoE的配置 重启路由器 这时应该就可以上网了,默认情况下对内网的DHCP是打开的,这个不用担心。 这时可以进入WEB管理界面看看,注意立即修改自己的管理密码。 修改管理密码以后telnet就无法使用了,但是可以使用ssh了。 通过nvram修改支持64MB内存。 我尝试在debian etch上格式化优盘来用,不过接到路由上提示错误。于是尝试安装OpenWrt里面附带的磁盘管理工具 e2fsprogs ,附加安装了另外3个软件包 libblkid 、 libext2fs 、 libuuid 。如果以后控件不够用了可以再删除掉。 安装完 kmod-usb-ohci 、 kmod-usb-storage 、 kmod-fs-ext3 这3个模块以后 /jffs 分区已经使用600KB了,剩余1.1MB。 修改使得软件安装到U盘,修改 /etc/opkg.conf dest usb /mnt/usb option force_space #option overlay_root /jffs #? 安装时使用: mount /dev/scsi/host0/...../part1 /mnt/usb opkg update opkg -d usb install xxxxx 看来 /etc/profile 还是可用的,所以我将挂载U盘、设置bin和lib路径的工作都放到这里了。很好用。不过这个文件主要用于登录时修改东西的,所以不登录就不会执行。修改后我添加到 /etc/profile 的部分: export PATH=$PATH:/mnt/usb/bin:/mnt/usb/usr/bin export LD_LIBRARY_PATH:/mnt/usb/lib:/mnt/usb/usr/lib mount /dev/scsi/host0/bus0/target0/lun0/part1 /mnt/usb sleep 1 svnserve -d -r /mnt/usb/svnroot --listen-host=0.0.0.0 --listen-port=3690 添加动态域名3322的支持: 先建立文件 /etc/config/ddns ,这样就可以用uci体系进行配置了: config 3322 option user username:password option server www.3322.org option name myname.3322.org 建立文件 /etc/hotplug.d/iface/30-update3322 ,并且可执行,内容如下: # cat /etc/hotplug.d/iface/30-update3322 NAME=wget CONFIG=ddns COMMAND=/usr/bin/$NAME [ "$ACTION" = "ifup" -a "$INTERFACE" = "wan" ] && { [ -x $COMMAND ] && [ -r /etc/config/$CONFIG ] && { . /etc/functions.sh config_load ddns ${COMMAND} -q -O - / "http://`config_get cfg1 user`@`config_get cfg1 server`/dyndns/update?system=dyndns&hostname=`config_get cfg1 name`" 2>&1| logger -t $NAME } & } 这个脚本方式失败,但是后来发现opkg源里面有 ez-ipupdate ,也就是3322使用的IP更新客户端。 自动挂载U盘的问题在于启动服务时的顺序,可以看到如下 /etc/rc.d/S20fstab 是在 /etc/rc.d/S39usb 之后的,所以usb尚未开始使用就执行fstab当然不会挂载成功。只要建立新的符号链接即可,注意只要放在usb之后即可,不要与已有的冲突: cd /etc/rc.d ln -s ../init.d/fstab S42fstab 这时修改 /etc/config/fstab 中的U盘挂载就有效了。 安装ez-ipupdate以后,手动更新IP地址: ez-ipupdate -s www.3322.org -u zerologos:zlogos 如上也是不能用的,因为ez-ipupdate最近宣布不支持3322(qdns)了。 更新自身IP可以使用3322.org的URL参数来完成,格式如下: URL=http://<username>:<password>@members.3322.org/dyndns/update?system=dyndns&hostname=<domain>&wildcard=off 然后调用wget命令来完成: wget -q -O - $URL 可以将如上命令写入一个脚本,然后建立脚本 /etc/hotplug.d/qdns_update.sh 该脚本用于动态管理网络接口的改变,内容如下: sh /root/qdns_update.sh >> /mnt/usb/qdns_update.log 2>&1 这样即可,重启也无妨了。 对于在U盘上安装的软件,启动服务时注意设置好 $PATH 和 $LD_LIBRARY_PATH ,可以考虑在 /etc/init.d目录下的启动脚本中,各个函数前加上如下语句: source /etc/profile 当然前提是你已经在 /etc/profile 中加入了合适的环境变量定义了。 需要小心的是无论是使用ssh从哪个方向拷贝文件,都回导致OpenWrt的内存使用率急剧上升。尤其是写入到由OpenWrt管理的存储时,当内存用光时,拷贝进程会停止响应。强行结束就会导致ext3文件系统的出错,而且再次挂载也会失败。 开启远程登录-防火墙配置 开启一个指定端口到路由的连接(ssh的例子): WAN=$(nvram get wan_ifname) LAN=$(nvram get lan_ifname) iptables -t nat -A prerouting_rule -i $WAN -p tcp --dport 22 -j ACCEPT iptables -A input_rule -i $WAN -p tcp --dport 22 -j ACCEPT 疑似端口转发,不确保可以工作: iptables -t nat -A prerouting_rule -i $WAN -p tcp --dport 22 -j NAT --to 192.168.1.50 iptables -A forwarding_rule -i $WAN -p tcp --dport 22 -d 192.168.1.50 -j ACCEPT 未测试的指定源地址的防火墙通过规则: iptables -s <IP> -t nat -A prerouting_wan -p tcp -dport 22 -j ACCEPT iptables -s <IP> -A input_wan -p tcp -dport 22 -j ACCEPT iptables -s <IP> -t nat -A prerouting_wan -p tcp -dport 1080 -j DNAT -to 192.168.0.1:80 iptables -s <IP> -A input_wan -p tcp -dport 80 -j ACCEPT