之前使用了nat6方案和x3c8021x实现了校园网上网和IPv6连接;但实际使用时经常出现莫名奇妙的问题。IPv6状态要么是无法连接网络,要么是无法连接Internet;经过研究,发现大概是自启动项的问题。

P.S. luci (web管理界面)里的startup自启项管理经常不起作用,估计是uci仅仅是enable了启动项而没有真正把启动项添加进自启动目录rc.d,可能是没有规范各程序的自启动命令);所以,以下操作都是SCP+SSH(telnet)的操作

类似于linux的启动方式,openwrt的启动主要有两个来源,/etc/rc.d/ 和 /etc/rc.local

一  /etc/rc.d/ 目录是一些 链接,链接到/etc/init.d/command 然后链接自身的文件名格式例如 S50telnet,链接到 /etc/init.d/telnet,表示启动顺序为50,解析/etc/init.d/telnet文件;(具体解析方式可能与/etc/rc.common 有关,里面定义了start,stop,restart,boot等,所以sh文件里的start,boot过程都可以被识别然后被启动);贴一个例子

S50telnet :

link to /etc/init.d/telnet

/etc/init.d/telnet:

#!/bin/sh /etc/rc.common
# Copyright (C) 2006-2011 OpenWrt.org

START=50

USE_PROCD=1
PROG=/usr/sbin/telnetd

start_service() {

#……
   }

二 /etc/rc.local 文件,类似sh,直接写即可

对于openwrt这种系统来说,启动顺序非常重要。在校园网中,有一些基本的逻辑顺序。比如x3c认证应该在network初始化完毕后开始,至少得到mac之后;IPv6虽然可以直接获取到地址(NDP/cache?)但没有通过802.1x认证,对于交换机来说端口仍然是down的,除认证包外数据包不通,所以nat6应该在802.1x认证之后开始。不过Lan口的IPv6地址和Wan6的地址可以提前获取/分配(DHCPv6),这对于nat6来说又是一个前提。个人理解nat6的核心应该在lan-wan的路由表上,所以应该在一切外围工作完成后开始。最后,解决方案:

/etc/init.d/nat6:

#……

# Maximum number of attempts before this script will stop in case no IPv6 route is available
# This limits the execution time of the IPv6 route lookup to (MAX_TRIES+1)*(MAX_TRIES/2) seconds. The default (15) equals 120 seconds.
MAX_TRIES=150
#default 15;change to 150 增大尝试次数,相当于容错
 
# An initial delay (in seconds) helps to avoid looking for the IPv6 network too early. Ideally, the first probe is successful.
# This would be the case if the time passed between the system log messages "Probing IPv6 route" and "Setting up NAT6" is 1 second.
DELAY=15
#default 5 change to 15 增大延迟,相当于延迟启动

#……

boot() {
        [ \$DELAY -gt 0 ] && sleep \$DELAY

     #忽视这个转义\,希望cnblogs关掉mathjax的inline单\$转义
         pre_x3c
         #ADD 802.1x auth preparation 在延迟之后加了一句

#注意boot的引导很早,必须延时sleep

#……
         exit 0
}

pre_x3c()  {
    if `pgrep x3c8021x > /dev/null 2>&1`; then
        logger -t NAT6 "Preparation ready;x3c8021x is already running"

else

(/etc/init.d/x3c8021x start)
        logger -t NAT6 "Start x3c8021x;x3c8021x is now running"
    fi
}

#用的x3c8021x的status脚本,判断x3c是否运行

#另外logger & logread 这两个命令很好用

链接S55nat6,同前

测试效果还可以;不过要有耐心的等一下,IPv6发现可能比较慢。前提是wan6获得真正的IPv6地址(全球单播?可以去bgp.he.net查)

#EOF

Openwrt笔记-IPv6与启动顺序的更多相关文章

  1. clusterware启动顺序——OHASD

      Clusterware启动顺序 [root@ebsdb1 etc]# crsctl check crs CRS-4638: Oracle High Availability Services is ...

  2. .net core mvc启动顺序以及主要部件2

    原文:.net core mvc启动顺序以及主要部件2 前一篇提到WebHost.CreateDefaultBuilder(args)方法创建了WebHostBuilder实例,WebHostBuil ...

  3. linux init 启动顺序

    redhat init大致启动过程 第一个运行的程序是/sbin/init,该文件会读取/etc/inittab文件,并依据此文件来进行初始化工作.比如在设定了运行等级 “:id:3:initdefa ...

  4. [CrunchBang]修改win+ubuntu 双 系统菜单的 启动顺序 引导

    说到启动就不得不说GRUB,Linux下大名鼎鼎的启动管理工具(曾经的LILO已经风光不再),当然现在已经是GRUB2了,GRUB2和GRUB最重要的区别就是,GRUB存放系统启动信息的文件为/boo ...

  5. linux服务开机启动顺序

    今天遇到了一个问题,我们写了一个服务脚本A,该服务需要优先于mysql启动.脚本是从其他地方拷来的模板,前面的默认配置没改,只是实现了自己的功能.写完,chkconfig A on,reboot,启动 ...

  6. 设置U盘为第一启动顺序

    本文转载:http://u.diannaodian.com/Article/1004.html 盘安装系统的首要步骤就是设置U盘为第一启动顺序.下面电脑店官网就来说说到底如何来设置U盘启动顺序吧.   ...

  7. LINUX启动顺序

    Linux 启动顺序: 1. BIOS自检 (服务器硬件启动的第一步,坑定的啦) 2. 运行系统内核并检测硬件(这个是看系统了,redhat等相关版本是通过/boot/vm进行启动 vmlinuz) ...

  8. Android学习笔记——Activity的启动和创建

    http://www.cnblogs.com/bastard/archive/2012/04/07/2436262.html Android Activity学习笔记——Activity的启动和创建 ...

  9. openstack学习笔记一 虚拟机启动过程代码跟踪

    openstack学习笔记一 虚拟机启动过程代码跟踪 本文主要通过对虚拟机创建过程的代码跟踪.观察虚拟机启动任务状态的变化,来透彻理解openstack各组件之间的作用过程. 当从horizon界面发 ...

随机推荐

  1. 关于STM32的外部引脚中断的问题

    今天想用自己以前的比较干净的工程模板做一个东西,,,,,,,在添加上引脚中断的时候,,突然想知道自己配置的中断优先级是否正确执行,,,,, 以前刚学习32的时候测试过是可以的,,不过今天发现了一个大问 ...

  2. [开发工具]Java开发常用的在线工具

    注明: 本文转自http://www.hollischuang.com/archives/1459.作为一个Java开发人员,经常要和各种各样的工具打交道,除了我们常用的IDE工具以外,其实还有很多工 ...

  3. Atitit 编程语言常用算法attilax总结

    Atitit 编程语言常用算法attilax总结 1. 编译算法分类and   数据操作算法.1 1.1. Tab driver stat  状态转换表格算法1 1.2. Nest case 词法分析 ...

  4. 更新日志 - BugHD 新增邮件告警功能

    最近 BugHD 又新增了一些功能,包括邮件告警. issue 分享. issue 备注等,同时也做了性能优化.希望能够帮助你更高效地收集解决应用崩溃. BugHD 新增功能 1.邮件告警 除了 We ...

  5. java 类之间的关系

    一.继承 二.实现 三.组合

  6. 打开android虚拟机时出现a repairable android virtual device

    打开android虚拟机时出现a repairable android virtual device,虚拟机可以打开但是一直处于开机状态,具体解决方案如下: 解决方案1:换个版本,不要选 CPU/AB ...

  7. try-catch和throw,throws的区别

    java里的异常多种多样,这是一种非常有用的机制,它能帮助我们处理那些我们未知的错误,在java里,关于异常的有throw throws,还有一个try catch 程序块.接下来我们挨个看看这几个的 ...

  8. struts2结果(Result)

    一.结果(result)类型 result的type属性默认为dispatcher,其他常见的属性有redirect\chain\redirectAction <action name=&quo ...

  9. sublime简要笔记

    选中单词 [1]选中当前单词 ctrl+d [2]跳过当前单词 ctrl+k ctrl+d [3]选中相同的所有单词 alt+f3 [4]多行游标 按住shift,然后按住鼠标右键向下拖动 行操作 [ ...

  10. sqlserver -- 学习笔记(八)体验charindex、stuff 和 for xml path在实际问题中的应用及几个问题的探讨

    写在前面 之前做了个微信端顾客扫码评价员工的功能,除了打分数,还可以打标签. 需要统计分数和统计各个员工每种标签被点击的次数. 后来加了个要求,需要查看客户对某个员工一次服务所打出的标签组合.  在不 ...