zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    启动Nginx、查看nginx进程、nginx帮助命令、Nginx平滑重启、Nginx服务器的升级
    专为渗透测试人员设计的 Python 工具大合集
    如何为网站启用HTTPS加密传输协议
    正确设置nginx/php-fpm/apache权限 提高网站安全性 防止被挂木马
    java中十进制转换为任意进制
    多线程死锁的产生以及如何避免死锁
    Java Integer和String内存存储
    Java 内存溢出(java.lang.OutOfMemoryError)的常见情况和处理方式总结
    Jvm垃圾回收器详细
    分布式环境中的负载均衡策略
  • 原文地址:https://www.cnblogs.com/B1ue/p/5704093.html
Copyright © 2011-2022 走看看