• Openwrt笔记-IPv6与启动顺序


         之前使用了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

  • 相关阅读:
    Vmware15的安装以及Ubunt的在虚拟机上的安装
    MYSQL数据库查询索引
    SpringBoot和mybatis整合报错:Caused by: org.apache.ibatis.builder.BuilderException: Error creating document instance. Cause: org.xml.sax.SAXParseException; lineNumber: 152; columnNumber: 10; 元素类型为 "mapper"
    idea中导包出现import org.apach.*,提交代码老出现冲突,不想使用.*的设置
    idea打断点后发现被标记的断点处那一行整行被标记了其他颜色,前面没有断点标识的红点
    Intellj IDEA 光标显示insert状态解决办法
    AngularJS 单元测试 Karma jasmine
    npm 及安装
    AngularJS 承诺 Promise
    AngularJS 路由及SPA理解
  • 原文地址:https://www.cnblogs.com/B1ue/p/5704093.html
Copyright © 2020-2023  润新知