iStoreOS IPv6配置【光猫拨号ipv6中继方式】


方法1 - 重设路由表

注意,该方法依赖 owipcalc 包来计算子网地址: opkg install owipcalc 。
我们可以手动在 WAN 口获得 IPv6 地址后添加一条路由表,让整个子网重定向到 LAN 口,这个操作可以通过 OpenWrt 的 hotplug 机制来进行,保存以下脚本放在 /etc/hotplug.d/iface/80-reset-route6 并重启 WAN 接口即可:

#!/bin/sh

wan_dev="wan6"

[ "$HOTPLUG_TYPE" = "iface" ] || exit 0
[ "$INTERFACE" = "$wan_dev" ] || exit 0

RTMETRIC=127

. /lib/functions/network.sh

network_get_physdev lan_dev lan || exit 0

ifup_cb() {
        local _lan_dev="$1"
        local _metric="$2"

        local wan_subnet
        network_get_subnet6 wan_subnet "$wan_dev" || return
        _wan_network=$(owipcalc "${wan_subnet}" network)

        ip -6 route replace "$_wan_network" dev "$_lan_dev" metric "$_metric"
}

ifdown_cb() {
        local _lan_dev="$1"
        local _metric="$2"

        ip -6 route flush dev "$_lan_dev" metric "$_metric"
}

case "$ACTION" in
        ifup)
                ifup_cb "$lan_dev" "$RTMETRIC"
                ;;
        ifdown)
                ifdown_cb "$lan_dev" "$RTMETRIC"
                ;;
        ifupdate)
                ifdown_cb "$lan_dev" "$RTMETRIC"
                sleep 1
                ifup_cb "$lan_dev" "$RTMETRIC"
                ;;
        *)
                ;;
esac

exit 0
有效。



第零步,安装软件包
0.1 系统--软件包--更新列表
      过滤器输入:owipcalc
     安装
0.2 编辑 80-reset-route6文件,,内容见上面,拷贝到 /etc/hotplug.d/iface/80-reset-route6
0.3 赋予执行权限 777
chmod +X /etc/hotplug.d/iface/80-reset-route6

第一步,先搞定wan6口
1、网络--接口--wan6--编辑
1.1、常规设置
     协议:DHCPv6客户端
         设备:eth0
         开机自动运行:选择
         请求IPv6地址:try
         请求指定长度的IPv6前缀:自动
       
1.2、高级设置
         强制链路:不选
         请求DHCP时发送的客户端ID:空
         使用默认网关:选择
         自动获取DNS服务器:选择
         DNS 权重:空
     使用网关跃点:空
     覆盖 IPv4 路由表:未指定
     覆盖 IPv6 路由表:未指定
     IPv6 源路由:选择
     委托 IPv6 前缀:选择
     IPv6 分配长度:已禁用
     IPv6 前缀过滤器:-- 请选择 --
     IPv6 后缀:::1
     IPv6 优先级:空
     
                          
1.3、防火墙设置
     创建和分配防火墙区域:wan和wan6
     
1.4、DHCP服务器--常规设置
     忽略此接口:不选
     
1.5、DHCP服务器--IPv6设置
     指定的主接口:选择
     RA 服务:中继模式
     DHCPv6 服务:中继模式
     NDP 代理:中继模式
     学习路由:选择
     

第二步,搞定lan口
2、网络--接口--lan--编辑
2.1、常规设置
     协议:静态地址
     设备:br-lan
     开机自动运行:选择
     IPv4 地址:192.168.100.1
     IPv4 子网掩码:255.255.255.0
     IPv4 网关:灰色无法更改
     IPv4 广播地址:灰色无法更改
     IPv6 地址:空
     IPv6 网关:空
     IPv6 路由前缀:空
     
2.2、高级设置
     强制链路:选择
     使用默认网关:选择
     使用自定义的 DNS 服务器:空
     DNS 搜索域名:空
     DNS 权重:空
     使用网关跃点:空
     覆盖 IPv4 路由表:未指定
     覆盖 IPv6 路由表:未指定
     委托 IPv6 前缀:选择
     IPv6 分配长度:禁用
     IPv6 前缀过滤器:-- 请选择 --
     IPv6 后缀:::1
     IPv6 优先级:空
     
                 
2.3、防火墙设置
     创建和分配防火墙区域:lan
     
2.4、DHCP服务器--常规设置
     忽略此接口:不选
     启动:100
     客户数:150
     租期:infinite
     
2.5、DHCP服务器--高级设置
     动态 DHCP:选择
     强制:不选
     IPv4 子网掩码:灰色无法更改
     DHCP 选项:空
     
2.6、DHCP服务器--IPv6设置
     指定的主接口:不选
     RA 服务:中继模式
     DHCPv6 服务:中继模式
     NDP 代理:中继模式
     学习路由:选择
     NDP 代理从属设备:不选
     
第三步,网络--接口--全局网络选项
     IPv6 ULA 前缀:空
     数据包引导:选择
     

第四步,网络--DHCP/DNS--高级设置
     过滤 IPv6 AAAA 记录:不选
     过滤 IPv4 A 记录:不选
     

第五步,网络--防火墙
--自定义规则
# qbittorrent 19422 tcp udp
#ip6tables -I input_wan_rule -i eth0 -p tcp --dport 19422 -j ACCEPT
#ip6tables -I input_wan_rule -i eth0 -p udp --dport 19422 -j ACCEPT
# qbittorrent 6883 tcp udp
ip6tables -I input_wan_rule -i eth0 -p tcp --dport 6883 -j ACCEPT
ip6tables -I input_wan_rule -i eth0 -p udp --dport 6883 -j ACCEPT
# WebDav 6086
ip6tables -I input_wan_rule -i eth0 -p tcp --dport 6086 -j ACCEPT
# Aira2 6881,6882
ip6tables -I input_wan_rule -i eth0 -p tcp    --dport 6881  -j ACCEPT
ip6tables -I input_wan_rule -i eth0 -p udp  --dport 6881  -j ACCEPT
ip6tables -I input_wan_rule -i eth0 -p tcp    --dport 6882  -j ACCEPT
ip6tables -I input_wan_rule -i eth0 -p udp  --dport 6882  -j ACCEPT

#ip6tables -I zone_lan_forward -p ipv6-icmp -j LOG
# 放行入站(wan,lan,docker,单向进入), icmpv6续约
ip6tables -I input_rule           -p udp   --sport 546 --dport 547  -j ACCEPT
# 放行转发(光猫与下级PC,双向), icmpv6续约
#ip6tables -I forwarding_rule  -p udp   --sport 546 --dport 547  -j ACCEPT

ip6tables -I input_wan_rule  -i eth0 -p ipv6-nonxt -m length --length 40 -j ACCEPT
ip6tables -I input_wan_rule  -i eth0 -p ipv6-icmp --icmpv6-type 1  -m limit --limit 100/s --limit-burst 10  -j ACCEPT
ip6tables -I input_wan_rule  -i eth0 -p ipv6-icmp --icmpv6-type 2  -m limit --limit 100/s --limit-burst 10 -j ACCEPT
ip6tables -I input_wan_rule  -i eth0 -p ipv6-icmp --icmpv6-type 3  -m limit --limit 100/s --limit-burst 10 -j ACCEPT
ip6tables -I input_wan_rule  -i eth0 -p ipv6-icmp --icmpv6-type 4  -m limit --limit 100/s --limit-burst 10 -j ACCEPT
ip6tables -I input_wan_rule  -i eth0 -p ipv6-icmp --icmpv6-type 128  -m limit --limit 100/s --limit-burst 10 -j ACCEPT
ip6tables -I input_wan_rule  -i eth0 -p ipv6-icmp --icmpv6-type 129  -m limit --limit 100/s --limit-burst 10 -j ACCEPT
ip6tables -I input_wan_rule  -i eth0 -p ipv6-icmp --icmpv6-type 130  -m limit --limit 100/s --limit-burst 10 -j ACCEPT
ip6tables -I input_wan_rule  -i eth0 -p ipv6-icmp --icmpv6-type 131  -m limit --limit 100/s --limit-burst 10 -j ACCEPT
ip6tables -I input_wan_rule  -i eth0 -p ipv6-icmp --icmpv6-type 132  -m limit --limit 100/s --limit-burst 10 -j ACCEPT
ip6tables -I input_wan_rule  -i eth0 -p ipv6-icmp --icmpv6-type 133  -m limit --limit 100/s --limit-burst 10 -j ACCEPT
ip6tables -I input_wan_rule  -i eth0 -p ipv6-icmp --icmpv6-type 134  -m limit --limit 100/s --limit-burst 10 -j ACCEPT
ip6tables -I input_wan_rule  -i eth0 -p ipv6-icmp --icmpv6-type 135  -m limit --limit 100/s --limit-burst 10 -j ACCEPT
ip6tables -I input_wan_rule  -i eth0 -p ipv6-icmp --icmpv6-type 136  -m limit --limit 100/s --limit-burst 10 -j ACCEPT
ip6tables -I input_wan_rule  -i eth0 -p ipv6-icmp --icmpv6-type 137  -m limit --limit 100/s --limit-burst 10 -j ACCEPT
ip6tables -I input_wan_rule  -i eth0 -p ipv6-icmp --icmpv6-type 141  -m limit --limit 100/s --limit-burst 10 -j ACCEPT
ip6tables -I input_wan_rule  -i eth0 -p ipv6-icmp --icmpv6-type 142  -m limit --limit 100/s --limit-burst 10 -j ACCEPT
ip6tables -I input_wan_rule  -i eth0 -p ipv6-icmp --icmpv6-type 143  -m limit --limit 100/s --limit-burst 10 -j ACCEPT
ip6tables -I input_wan_rule  -i eth0 -p ipv6-icmp --icmpv6-type 148  -m limit --limit 100/s --limit-burst 10 -j ACCEPT
ip6tables -I input_wan_rule  -i eth0 -p ipv6-icmp --icmpv6-type 149  -m limit --limit 100/s --limit-burst 10 -j ACCEPT
ip6tables -I input_wan_rule  -i eth0 -p ipv6-icmp --icmpv6-type 151  -m limit --limit 100/s --limit-burst 10 -j ACCEPT
ip6tables -I input_wan_rule  -i eth0 -p ipv6-icmp --icmpv6-type 152  -m limit --limit 100/s --limit-burst 10 -j ACCEPT
ip6tables -I input_wan_rule  -i eth0 -p ipv6-icmp --icmpv6-type 153  -m limit --limit 100/s --limit-burst 10 -j ACCEPT

ip6tables -I forwarding_wan_rule -p ipv6-nonxt -m length --length 40 -j ACCEPT
#ip6tables -I forwarding_wan_rule -i eth0 -p ipv6-icmp --icmpv6-type 131  -m limit --limit 100/s --limit-burst 10 -j ACCEPT
#ip6tables -I forwarding_wan_rule -i eth0 -p ipv6-icmp --icmpv6-type 132  -m limit --limit 100/s --limit-burst 10 -j ACCEPT
#ip6tables -I forwarding_wan_rule -i eth0 -p ipv6-icmp --icmpv6-type 133  -m limit --limit 100/s --limit-burst 10 -j ACCEPT
#ip6tables -I forwarding_wan_rule -i eth0 -p ipv6-icmp --icmpv6-type 134  -m limit --limit 100/s --limit-burst 10 -j ACCEPT
#ip6tables -I forwarding_wan_rule -i eth0 -p ipv6-icmp --icmpv6-type 135  -m limit --limit 100/s --limit-burst 10 -j ACCEPT
#ip6tables -I forwarding_wan_rule -i eth0 -p ipv6-icmp --icmpv6-type 136  -m limit --limit 100/s --limit-burst 10 -j ACCEPT
#ip6tables -I forwarding_wan_rule -i eth0 -p ipv6-icmp --icmpv6-type 137  -m limit --limit 100/s --limit-burst 10 -j ACCEPT
#ip6tables -I forwarding_wan_rule -i eth0 -p ipv6-icmp --icmpv6-type 141  -m limit --limit 100/s --limit-burst 10 -j ACCEPT
#ip6tables -I forwarding_wan_rule -i eth0 -p ipv6-icmp --icmpv6-type 142  -m limit --limit 100/s --limit-burst 10 -j ACCEPT
#ip6tables -I forwarding_wan_rule -i eth0 -p ipv6-icmp --icmpv6-type 143  -m limit --limit 100/s --limit-burst 10 -j ACCEPT
#ip6tables -I forwarding_wan_rule -i eth0 -p ipv6-icmp --icmpv6-type 148  -m limit --limit 100/s --limit-burst 10 -j ACCEPT
#ip6tables -I forwarding_wan_rule -i eth0 -p ipv6-icmp --icmpv6-type 149  -m limit --limit 100/s --limit-burst 10 -j ACCEPT
#ip6tables -I forwarding_wan_rule -i eth0 -p ipv6-icmp --icmpv6-type 151  -m limit --limit 100/s --limit-burst 10 -j ACCEPT
#ip6tables -I forwarding_wan_rule -i eth0 -p ipv6-icmp --icmpv6-type 152  -m limit --limit 100/s --limit-burst 10 -j ACCEPT
#ip6tables -I forwarding_wan_rule -i eth0 -p ipv6-icmp --icmpv6-type 153  -m limit --limit 100/s --limit-burst 10 -j ACCEPT

# 防治 SYN-Flood 碎片攻击
# iptables -A syn-flood -m limit –limit 100/s –limit-burst 150 -j RETURN
#限制某IP的上传速度为1000KB/秒(12Mbps,流入服务器带宽),100个计数后重新开始
#  -m limit --limit 1000/s --limit-burst 100 

# 解决DHCPv6续约的icmpv6通讯,lan侧到路由器本身。此消息经过中继后再传到上级光猫。
#  过程:Solicit---Advertise---Request---Reply
#  PC端口546,发送请求Solicit至,路由器本身[ff02::1:2]:547端口
#  路由器本身546端口,中继到,光猫547端口
#  光猫547端口,回应一个Advertise给,路由器546端口
#  路由器本身547端口,中继到,PC端口546
#  PC端口546,回应一个Request给路由器547端口
#  路由器本身546端口,中继到,光猫547端口
#  光猫547端口,回应一个Reply给,路由器546端口结束。 
# ip6tables -I zone_lan_input -p udp  --sport 546 --dport 547  -j ACCEPT
# 此条配置istore缺省规则已有,解决上级光猫到路由器本身,DHCPv6续约的icmpv6通讯
# ip6tables -A zone_wan_input -p udp  --dport 546   -j ACCEPT

#ip6tables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 允许进入的数据包只能是刚刚我发出去的数据包的回应
# ESTABLISHED:已建立的链接状态
# RELATED:该数据包与本机发出的数据包有关

-----------------------------------------------

软路由重启(系统--重启)

启用IPV6到IPV4内核转发
# Transmission 51413 tcp udp to ipv4
ip6tables -t nat -A PREROUTING   -p tcp  --dport 51413  -j DNAT --to  192.168.100.100:51413
ip6tables -t nat -A PREROUTING   -p udp --dport 51413  -j DNAT --to  192.168.100.100:51413
ip6tables -t nat -A POSTROUTING -p tcp  -d 192.168.100.100  --dport 51413  -j MASQUERADE
ip6tables -t nat -A POSTROUTING -p udp -d 192.168.100.100  --dport 51413  -j MASQUERADE
ip6tables -I INPUT -p udp --dport 51413 -j ACCEPT
ip6tables -I INPUT -p tcp  --dport 51413 -j ACCEPT
HFS 简易文件共享程序, 19999端口, 192.168.100.151,tcp
http://192.168.100.151:19999/640.png
ip6tables -t nat -A PREROUTING   -p tcp  --dport 19999  -j DNAT --to  192.168.100.151:19999
ip6tables -t nat -A POSTROUTING -p tcp  -d 192.168.100.151  --dport 19999  -j MASQUERADE
ip6tables -I INPUT -p tcp  --dport 19999 -j ACCEPT
UDP 500 VPN使用
PV6联网测试
https://testipv6.cn/
ping -6 www.baidu.com

第六步,其他问题
6.1、如果获得了ipv6地址,缺无法ping通,大概率是以下三个地方
网络--接口--全局网络选项,IPv6 ULA 前缀:空
网络--接口--wan6,IPv6 分配长度:已禁用
网络--接口--lan,IPv6 分配长度:已禁用
原因是纯 relay 模式下客户端不会获取到“IPv6 ULA 前缀”下的地址/路由/邻居信息,当客户端尝试回复从路由器发出的 ULA-prefix 下地址的 neighbor solicitation 时,匹配不到这个 ULA 地址的路由只好放弃。

6.1B 参考此文章,主要是NDP消息的更新机制
odhcpd 中继模式原理、局限以及解决方案
https://blog.icpz.dev/articles/notes/odhcpd-relay-mode-discuss/

6.2、软路由iStore,22.03.6版的防火墙配置,是一个通用配置,不适合国内的IPv6环境,icmpv6的消息被防火墙阻挡,需要根据情况打开。待查
6.3、网络拓扑:电信光猫拨号-->OpenWrt X86电脑(iStore)-->AP。
软件是 iStoreOS 22.03.6 2024012613。3150主板,两个网口,日常CPU负载20%以下,8G内存剩下7G以上空闲。
6.4、iStoreOS 页面设置在网络防火墙一节似乎没有很完美,明明页面设置了,后台文件没变化,经查,zone域规则不能自行修改,要加在用户规则内
6.5、两个网关问题
        iStore首页--终端--输入root和密码,查询路由器的默认 IPv6 网关
        ip -6 route | grep default 得到:
        default from 240e:38a:xxx:xxx::/64 via fe80::133:7cc9:xxx dev eth0 proto static metric 512 pref medium  #外网到光猫lan侧
        default from 240e:38a:xxx:xxx::/64 via fe80::1 dev eth0 proto static metric 640 pref medium
        出现此情况,在本模式(中继SLAAC)下忽略,在IPV6 NAT模式下需要修改若干内容
6.5openwrt 需要的 ipv6 包:
        odhcp6c                  2022-08-05-7d21e8d8-18,DHCPv6 客户端
        odhcpd-ipv6only      2023-01-02-4a673e1c-2, ipv6版本
         luci-proto-ipv6        git-21.148.48881-79947af    git-23.355.78888-e047387,从 luci Web 界面配置 IPv6
         ip6tables-mod-nat      1.8.7-7
         ip6tables-zz-legacy    1.8.7-7
         kmod-ip6tables           5.10.201-1  并非必须,提供IPv6防火墙
         kmod-nf-ipt6               5.10.201-1
         kmod-ipt-nat6            提供IPv6的NAT支持
        netifd                          OpenWrt Network Interface Configuration Daemon
         owipcalc                    计算子网地址 
6.6、文件 /etc/config/dhcp 如下
config dhcp 'lan'
        option interface 'lan' #端口名称
        option start '100'    #端口号起始--结束
        option limit '150'
        option dhcpv4 'server'
        option leasetime '12h'  # infinite 租期,v4v6均有效
        option ra 'relay'
        option ndp 'relay'        #中继运行模式
        option dhcpv6 'relay'
 #存在下级路由器时,将NDP消息扩展到下级路由
config dhcp 'wan'
        option interface 'wan'
        option ignore '1'

config dhcp 'wan6'
        option interface 'wan6'
        option master '1'
        option ra 'relay'
        option ndp 'relay'
        option dhcpv6 'relay'

------------------------------------------------------

6.7、passwall插件,DNS设置,过滤代理域名 IPv6,要勾选,不对IPV6解析,使得IPV6直接连通,不经过passwall。

6.8、静态DHCP
config host
        option name 'nas'
        option dns '1'
        option mac '4C:E6:76:6D:44:3B'
        option ip '192.168.100.100'
        option leasetime 'infinite'

config host
        option name 'Router-net'
        option dns '1'
        option mac '00:0A:CD:00:00:15'
        option ip '192.168.100.1'
        option leasetime 'infinite'

config host
        option name 'AX3pro'
        option dns '1'
        option mac '24:81:C7:C2:8A:9D'
        option ip '192.168.100.2'
        option leasetime 'infinite' 

config host
        option name '68U'
        option dns '1'
        option mac '0C:9D:92:51:E5:F8'
        option ip '192.168.100.20'
----------------------------------------  

6.9 修复日志错误提示
修改 vim /etc/sysctl.conf 文件,添加以下内容(如果没有的话),nlbwmon[14648]: Netlink receive failure: Out of memory
net.core.rmem_default=16777216
net.core.wmem_default=16777216
net.core.rmem_max=16777216
net.core.wmem_max=16777216

6.10、常用命令

网络邻居
ping ff02::1

路由器
ping ff02::2

DHCP服务器
ping ff02::1:2

查询路由器的默认 IPv6 网关
ip -6 route | grep default
ip -6 route show

查看icmp6协议信息
tcpdump  -nn -i eth0 icmp6
tcpdump  -nn -i eth0 icmp6 -v
tcpdump  -nn -i eth0 icmp6 -vv

查看邻居mac地址
ip -6 neighbor show 

检查哪些端口和应用在运行,如过滤19422相关内容
netstat -anp -p udp
netstat -anp -p udp | grep 19422

ipv6 DNS服务器
2001:4860:4860::8888
2001:4860:4860::8844
240e:4c:4008::1
240e:4c:4808::1
2001:dc7:1000::1
240C::6666
240C::6644
2400:3200::1
2402:4e00::
2400:da00::6666

重启网络服务
/etc/init.d/firewall restart
/etc/init.d/network restart

config host
        option name 'JiJia-net'
        option dns '1'
        option mac 'E0:D5:5E:A3:54:F1'
        option ip '192.168.100.3'
        option leasetime 'infinite'

config host
        option name 'huaqing-net'
        option dns '1'
        option mac 'A8:A1:59:2D:0B:E4'
        option ip '192.168.100.5'
        option leasetime 'infinite'

config host
        option name 'MacAir'
        option dns '1'
        option mac 'D4:61:9D:32:50:62'
        option ip '192.168.100.7'
        option leasetime 'infinite'

config host
        option name 'V8'
        option dns '1'
        option mac 'FC:3F:7C:BD:6D:84'
        option ip '192.168.100.11'
        option leasetime 'infinite'

config host
        option dns '1'
        option mac 'B8:94:36:F8:20:E1'
        option ip '192.168.100.13'
        option name '7C'
        option leasetime 'infinite'

config host
        option name 'aprs'
        option dns '1'
        option mac 'EC:FA:BC:AE:81:F5'
        option ip '192.168.100.15'
        option leasetime 'infinite'

config host
        option name 'M5'
        option dns '1'
        option mac '34:79:16:BD:47:FE'
        option ip '192.168.100.17'
        option leasetime 'infinite'

config host
        option name 'ipad1'
        option dns '1'
        option mac 'A4:D1:D2:98:5E:8C'
        option ip '192.168.100.19'
        option leasetime 'infinite'

config host
        option name 'BeiYongShouji'
        option dns '1'
        option mac '00:ED:B8:03:4F:EA'
        option ip '192.168.100.21'
        option leasetime 'infinite'

config host
        option name 'V30'
        option dns '1'
        option mac 'C2:9C:53:E2:31:39'
        option ip '192.168.100.9'
        option leasetime 'infinite'


系统克隆方法
一、执行
fdisk -l
得到以下内容
Device     Boot   Start       End   Sectors   Size Id Type
/dev/sda1  *        512    262655    262144   128M 83 Linux
/dev/sda2        263168    787455    524288   256M 83 Linux
/dev/sda3        787968   4982271   4194304     2G 83 Linux
/dev/sda4       4982784 250069679 245086896 116.9G 83 Linux
二、进入空闲磁盘或U盘,执行以下命令
cd /mnt/sata2-4
dd if=/dev/sda of=iStoreOSbackup20230525.img bs=512 count=4982271
bs内容是sda1的起始,count内容是sda3的结束+1(不用加)
得到/mnt/sata1-4/iStoreOSbackup20230424.img 文件

1. 生成备份/tmp/upload/backup.tar.gz
wget -O backup.run https://raw.githubusercontent.com/wukongdaily/OpenBackRestore/master/backup/backup.run && sh backup.run
wget -O backup.run https://mirror.ghproxy.com/https://raw.githubusercontent.com/wukongdaily/OpenBackRestore/master/backup/backup.run && sh backup.run
2. 恢复备份
使用前提 将备份档案提前上传到 /tmp/upload/ 目录,如图
确定备份文件已经上传了 再执行如下命令即可恢复,恢复完成后会自动重启
复命令如下
wget -O restore.run https://raw.githubusercontent.com/wukongdaily/OpenBackRestore/master/backup/restore.run && sh restore.run
wget -O restore.run https://mirror.ghproxy.com/https://raw.githubusercontent.com/wukongdaily/OpenBackRestore/master/backup/restore.run && sh restore.run

在release页面下载backup.run或restore.run
2、打开iStore应用商店,点击手动安装,将run文件拖拽上去即可执行。
1、执行sh restore.run 后先恢复到iStoreOS风格,执行完毕后会提示用户上传你的备份档案。
2、再次执行sh restore.run 后,提示恢复成功并重启,方可完成


评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×