美文网首页工具IT技术学堂
移动宽带公网IPV6访问

移动宽带公网IPV6访问

作者: Hiper | 来源:发表于2019-07-31 22:17 被阅读0次

    关于软路由ipv6与外网访问的那些事(已更新)
    https://koolshare.cn/thread-165156-1-1.html
    (出处: KoolShare)
    我是快乐的搬运工!


    动态解析LEDEipv6

    目前为止,三大运营商提供的ipv6地址前缀每隔几天都会变动,因为每隔几天都会网络都会重启一次,重启意味着要重新分配ipv6前缀。虽然直接访问ipv6可以连接到设备,但是一旦网络重启就无法连接了。所我们需要ipv6的ddns解析。
    同样首先要申请一个域名,如果你要同时使用frp穿透和ipv6访问,那么你需要重新申请一个域名。
    申请好域名后,在lede酷软中心下载koolshare动态域名解析工具.


    安装后进入设置

    如图设置,主域名填写你申请好的域名,如xxxxx.com,子域名可以自己随便填写,比如lede,那么你将会通过lede.xxxxx.com访问路由器.
    校验码获取方式以万网为例,登录进入万网,点击个人头像,如图

    点击会进入如下界面

    如果你是新用户,以前没有创建过key,那这个界面应该是空的,你需要创建一个。
    Accesskey id对应校验码1,access key secret对应校验码2。填到上面插件中,接口类型选择ipv6,点击应用并保存。
    此时,还需要在万里面对域名进行解析。
    进入万网域名解析,选择刚刚申请的域名,添加解析



    Ipv6的记录类型要选择AAAA,主机记录里就是你刚刚在路由里填的子域名,下面记录值你需要随便输入一个ipv6,其它默认。点击确定。
    然后在路由动态域名解析工具里点击手动更新,此时你再看看你的域名记录值你会发现他已经变成你路由的ip地址了。2409前缀是目前中国移动ipv6前4位,中国电信应该是240e,中国联通应该是2400



    打开的浏览器,在地址栏输入域名lede.xxxxx.com,你会惊喜的发现你已经可以进入lede后台了。开心吗?爽吗?是不是已经觉得万事大吉了?No! No! No!
    这只是在内网环境下可以通过域名访问了,我们要的结果是在外网也能访问。如果测试呢?

    打开LEDE防火墙

    接下来我教大家设置防火墙
    依次进>网络>防火墙,点击通信规则往下拉,你需要打开路由器的80端口。


    添加,保存并应用。确保如下图所示:

    以上设置全部完成后,再次在手机4G环境下输入域名,你会惊奇的发现你已经可以通过ipv6进入路由器后台了。

    群晖动态解析ipv6

    1. 确定你的群晖已经获取到ipv6地址.

    红框里面的两个为移动分配的公网ipv6地址,其中一个临时的。

    1. 同样的由于ipv6会动态更新,此时就还是需要阿里云的ddns。Lede有ddns插件来实现,而群晖没有,我们需要一个ddns脚本,然后添加到群晖的定时任务里。该脚本来自于网络,感谢脚本原作者,向原作者致敬!保存为aliyun.sh!!!
    #!/bin/sh
    aliddnsipv6_ak="XXXXXXXXXXX"
    aliddnsipv6_sk="XXXXXXXXXXX"
    aliddnsipv6_name1='nas'
    aliddnsipv6_domain='XXXX.cn'
    aliddnsipv6_ttl="600"
    
    if [ "$aliddnsipv6_name1" = "@" ]
    then
      aliddnsipv6_name=$aliddnsipv6_domain
    else
      aliddnsipv6_name=$aliddnsipv6_name1.$aliddnsipv6_domain
    fi
    
    now=`date`
    
    die () {
        echo $1
    }
    
    ipv6s=`ip addr show eth0 | grep "inet6.2409" | awk '{print $2}' | awk -F"/" '{print $1}'` || die "$ipv6"
    
    for ipv6 in $ipv6s
    do
      #ipv6 = $ipv6
      break
    done
    
    echo $ipv6
    
    current_ipv6=`nslookup -query=AAAA $aliddnsipv6_name 2>&1`
    #echo $current_ipv6
    
    current_ipv6=`echo "$current_ipv6" | grep 'Address: ' | tail -n1 | awk '{print $NF}'`
    echo $current_ipv6
    
    if [ "$?" -eq "0" ]
    then
        current_ipv6=`echo "$current_ipv6" | grep 'Address: ' | tail -n1 | awk '{print $NF}'`
        echo $current_ipv6
    
        if [ "$ipv6" = "$current_ipv6" ]
        then
            echo "skipping"
        fi 
    # fix when A record removed by manual dns is always update error
    else
        unset aliddnsipv6_record_id
    fi
    
    
    timestamp=`date -u "+%Y-%m-%dT%H%%3A%M%%3A%SZ"`
    
    
    urlencode() {
        # urlencode <string>
        out=""
        while read -n1 c
        do
            case $c in
                [a-zA-Z0-9._-]) out="$out$c" ;;
                *) out="$out`printf '%%%02X' "'$c"`" ;;
            esac
        done
        echo -n $out
    }
    
    enc() {
        echo -n "$1" | urlencode
    }
    
    send_request() {
        local args="AccessKeyId=$aliddnsipv6_ak&Action=$1&Format=json&$2&Version=2015-01-09"
        local hash=$(echo -n "GET&%2F&$(enc "$args")" | openssl dgst -sha1 -hmac "$aliddnsipv6_sk&" -binary | openssl base64)
        curl -s "http://alidns.aliyuncs.com/?$args&Signature=$(enc "$hash")"
    }
    
    get_recordid() {
        grep -Eo '"RecordId":"[0-9]+"' | cut -d':' -f2 | tr -d '"'
    }
    
    query_recordid() {
        send_request "DescribeSubDomainRecords" "SignatureMethod=HMAC-SHA1&SignatureNonce=$timestamp&SignatureVersion=1.0&SubDomain=$aliddnsipv6_name&Timestamp=$timestamp&Type=AAAA"
    }
    
    update_record() {
        send_request "UpdateDomainRecord" "RR=$aliddnsipv6_name1&RecordId=$1&SignatureMethod=HMAC-SHA1&SignatureNonce=$timestamp&SignatureVersion=1.0&TTL=$aliddnsipv6_ttl&Timestamp=$timestamp&Type=AAAA&Value=$(enc $ipv6)"
    }
    
    add_record() {
        send_request "AddDomainRecord&DomainName=$aliddnsipv6_domain" "RR=$aliddnsipv6_name1&SignatureMethod=HMAC-SHA1&SignatureNonce=$timestamp&SignatureVersion=1.0&TTL=$aliddnsipv6_ttl&Timestamp=$timestamp&Type=AAAA&Value=$(enc $ipv6)"
    }
    
    #add support */%2A and @/%40 record
    
    if [ "$aliddnsipv6_record_id" = "" ]
    then
        aliddnsipv6_record_id=`query_recordid | get_recordid`
        #echo '-----------------' $aliddnsipv6_record_id
    fi
    if [ "$aliddnsipv6_record_id" = "" ]
    then
        aliddnsipv6_record_id=`add_record | get_recordid`
        echo "added record $aliddnsipv6_record_id"
    else
        update_record $aliddnsipv6_record_id
        echo "updated record $aliddnsipv6_record_id"
    fi
    
    1. 该脚本需要根据实际情况来改几处地方.


    用notepad++软件打开脚本,前文中提到的阿里云里的Accesskey id对应Key1,access key secret对应Key2,代替图中的XXXXXX,第4行引号内填写你的子域名,
    如我的为nas,第5行domain引号内填写你的域名,如XXXX.com,这样你将来访问nas的域名就是:nas.XXXX.com
    第21行 eth0为你的群晖网卡名,请确认是否为eht0,如果不是请更换为你的网卡名。
    如何确认自己的群晖网卡名呢?
    我们打开群晖的控制面板,左边拉到最下面,点开终端机和SNMP,启用SSH,打勾,然后应用保存。


    接下来用ssh工具,如putty,xshell等工具,登入群晖后台ip,这里的ip是ipv4,如我的为192.168.2.187,端口号为22,用户名为你的群晖用户名,密码也是你的群晖密码。进入后输入命令ifconfig,回车就会看到你的网卡名称。如图:


    再接下来,同样是21行的2409替换为你的ipv6前缀4位,在上图中可以看到。如果是中国移动的宽带这里就无需再变更。
    这样脚本就修改完毕。
    改完别忘了将你的群晖ssh关闭,这是为了安全!安全第一!安全第一!

    1. 在阿里云控制台里再添加一条域名解析,注意:还是用之前申请的域名,无需重新买域名.

    记录类型 同样选择AAAA记录
    主机记录 里面填写刚刚在脚本里第3行填的了域名,如nas
    记录值 里面随便输入一个ipv6地址
    添加好后如图所示:


    1. 以上工作完成好后,我们需要将修改好的脚本添加到群晖的计划任务里面,并且定时运行。将脚本上传至你的群晖的共享文件夹里面。

    右键属性,记住(复制)该脚本路径。
    打开控制面板—》计划任务—》新增—》计划的任务---》用户自定义的脚本.

    任务名称根据自己喜好随便填。

    计划根据需要填,我是填的每30分钟运行一次脚本.

    关键是下一步,将刚刚复制的脚本路径粘贴在任务设置最下面的框里面。


    点击确定,然后再点击一下顶部的运行。如无意外,你阿里云控制台里刚刚添加的域名已经指向你的群晖ipv6。可以打开控制台看看域名解析地址是否已经变更为群晖ipv6。
    此时在内网环境下通过域名nas.XXXX.com已经可以访问nas。

    LEDE打开群晖防火墙

    外网访问还需要在lede里添加相应的防火墙规则。
    依次进>网络>防火墙,点击通信规则往下拉,你需要打开5000,5001,5005等端口。

    添加后,再点击该防火墙规则的编辑.

    进入后里面的选项按照下图设置。端口用空格隔开.

    此时,已经可以从拥有ipv6的外网访问群晖了。
    拿出你的手机,在4G模式下,在浏览器输入域名nas.XXXX.com,就可以进入nas登录界面了。在手机上下载DS file APP,输入相关域名就可以登入就可以看到你群晖里的共享文件夹,那个速度比内网穿透给力太多了,你可以尽情在外网看你家里的小电影了。

    相关文章

      网友评论

        本文标题:移动宽带公网IPV6访问

        本文链接:https://www.haomeiwen.com/subject/rhvxdctx.html