关于 HiFeng

主要分享Linux、VPS相关的信息。

RSS 地址: https://www.hicairo.com/feed.php

请复制 RSS 到你的阅读器,或快速订阅到 :

HiFeng RSS 预览

IPv4 & IPv6 双栈家庭局域网内将客户端网关指向旁路由的探究

2024-09-02 16:52:36

  这篇文章是透明代理问题的一个延续,旨在解决 IPv4 & IPv6 双栈家庭网络环境中,将所有终端设备网关指向旁路由,实现所有设备均可正常科学上网的问题。在写这篇博客之前,我在 youtube 上翻阅了许多相关视频,发现很多 UP 主对 IPv6 避而不谈,也有 UP 主建议关闭 IPv6 网络。因此决定聊一下这个话题,算是一个探究吧,希望这篇文章对有这方面需求的小伙伴有一些启发。

一、实现目标及解决思路

1、家庭网络中终端设备一般很少,对主路由的数据交换及网络吞吐能力要求并不高,因此在路由器选择方面,尽可能选择性价比及稳定性高、功耗低的产品。

2、在网络拓扑方面,遵循网络拓扑结构越简单越好,这样当出现故障时,我们更容易排查错误。

3、解决 IPv4 & IPv6 双栈家庭局域网环境下,所有终端设备均可通过旁路由科学上网的问题。

4、我不建议将所有功能(例如科学上网插件、分流规则等)都集中在主路由上,一方面需要将主路由替换为性能较好的软路由,另外主路由的配置会变得比较臃肿,牵一发动全身,不利于故障排查。

5、在这篇文章中,主路由我们使用运营商赠送的光猫,然后引入一块 Armbian 操作系统的旁路由实现全局科学上网问题。

二、网络拓扑结构

以上是本实验环境的网络拓扑结构:

1、主路由使用运营商赠送的华为 MA5671 光猫(IPv4地址:192.168.0.1),光猫的 LAN2/LAN4 口被定义为 IPTV 口,专门用于接运营商赠送的 IPTV 机顶盒。

2、光猫采用路由模式,简单配置 IPv4 dhcp 及 IPv6 相关设置后,局域网内的终端设备即获取到有效的 IP 地址,可以正常上网了,这应该是大多数普通家庭最简单的网络结构。

3、斐讯 N1 刷入 Armbian 操作系统(IPv4地址:192.168.0.2),当作旁路由使用,实现全局科学上网问题。旁路由已经被配置为透明代理,可以正常科学上网。具体可参考《在 Armbian 操作系统上使用 dae(大鹅) 搭建透明代理》或《在 Armbian 操作系统上搭建基于 Hysteria2 协议的透明代理》。

三、修改相关设置,使局域网内客户端网关指向旁路由,实现全局科学上网

1、IPv4 DHCP 相关设置

  由于光猫的 IPv4 DHCP Server 的设置不能修改网关地址,我们关掉光猫的 IPv4 DHCP Server 。

2.关闭光猫 IPv4 DHCP Server.webp

  然后在旁路由上安装 IPv4 DHCP Server,解决 IPv4 网关问题。

# 安装 isc-dhcp-server
apt-get install isc-dhcp-server

# 修改 isc-dhcp-server 配置文件,定义网络接口
vi /etc/default/isc-dhcp-server
INTERFACESv4="eth0"
INTERFACESv6="eth0"

# 在 dhcpd.conf 配置文件尾部添加如下配置
vi /etc/dhcp/dhcpd.conf
subnet 192.168.0.0 netmask 255.255.255.0 {
   range 192.168.0.150 192.168.0.200;                          # 开放的地址池
   option domain-name-servers 223.5.5.5,223.6.6.6;             # NS域名服务器,如果没有就注释掉
   #option domain-name "internal.example.org";                 # 域名
   option routers 192.168.0.2;                                 # 网关地址
   option broadcast-address 192.168.0.255;                     # 广播地址
   default-lease-time 259200;                                  # 默认租期,单位:秒
   max-lease-time 259200;                                      # 最大租期
}

# 重启 isc-dhcp-server
systemctl restart isc-dhcp-server

  这时,重启终端设备后,终端设备的 ipv4 网关便指向了旁路由(192.168.0.2)。

2、IPv6 相关设置

  光猫的 IPv6 设置如下图,从 WAN 口获取 IPv6 前缀,采用无状态模式给局域网分配 IPv6 地址。 华为 MA5671 这款光猫是比较傻瓜的,没有 Router Advertisement (RA) 服务的相关设置。

3.光猫 IPv6 设置.webp

  正常情况下,如果设备中的 Router Advertisement (RA)  服务参数无法修改,设备生产商会将 AdvDefaultPreference 和 AdvRoutePreference 参数的优先级设置为 medium 。

  我们可以在旁路由中使用如下命令查询华为 MA5671 光猫 RA 服务中 AdvDefaultPreference 和 AdvRoutePreference 参数的优先级。

root@armbian:~# ip -6 route show
::1 dev lo proto kernel metric 256 pref medium
240e:380:19b3:65f7::/64 dev eth0 proto kernel metric 256 expires 259193sec pref medium
fe80::ecee:eeff:feee:eeee dev dae0 proto kernel metric 256 pref medium
fe80::/64 dev eth0 proto kernel metric 256 pref medium
fe80::/64 dev dae0 proto kernel metric 256 pref medium
default via fe80::1 dev eth0 proto ra metric 1024 expires 1793sec mtu 1472 hoplimit 64 pref medium

相关知识点:

一个局域网内允许同时存在多个 Router Advertisement (RA) 服务。

AdvDefaultPreference:用于设置整个路由器作为默认网关的优先级。

AdvRoutePreference:用于设置特定路由的优先级。

优先级可以是 low、medium 或 high。medium 是默认值,如果设置为 high 意味着这个路由器比其他默认优先级较低的路由器更有可能被选为默认网关。

  鉴于此,我们可以使用光猫的 Router Advertisement (RA) 服务为局域网设备分配 IPv6 地址,同时在旁路由上安装 Router Advertisement (RA) 服务,将 IPv6 的网关指向旁路由。

# 安装 radvd
apt-get install radvd

# 创建 radvd 配置文件,AdvDefaultPreference 和 AdvRoutePreference 设置为 high
cat > /etc/radvd.conf <<EOF
interface eth0 {
    AdvSendAdvert on;
    MinRtrAdvInterval 75;
    MaxRtrAdvInterval 100;
    AdvDefaultPreference high;
    AdvManagedFlag off;
    AdvOtherConfigFlag off;
    route ::/0 {
        AdvRoutePreference high;
        AdvRouteLifetime 300;
    };
};
EOF

# 修改配置文件属性
chmod 755 /etc/radvd.conf

# 设置开机启动并启动 radvd 服务
systemctl enable radvd
systemctl start radvd

四、验证终端设备的路由情况

1、在Windows 客户端上,使用 tracert 命令追踪路由情况

C:\>tracert 114.114.114.114
通过最多 30 个跃点跟踪
到 public1.114dns.com [114.114.114.114] 的路由:
  1     2 ms     1 ms     2 ms  192.168.0.2
  2     3 ms     2 ms     1 ms  192.168.0.1
  3     ......

  使用 tracert 命令追踪 IPv4 的路由情况,第一跳为旁路由(192.168.0.2),第二跳为光猫(192.168.0.1)。

C:\>tracert 240C::6644
通过最多 30 个跃点跟踪到 240c::6644 的路由
  1     2 ms     1 ms     2 ms  240e:380:19b3:65f7:8149:d672:24d4:7a9f
  2     2 ms     2 ms     2 ms  240e:380:19b3:9800:1510:9453:628b:90b0
  3     ......

  使用 tracert 命令追踪 IPv6 的路由情况,第一跳为旁路由(240e:380:19b3:65f7:8149:d672:24d4:7a9f),第二跳为光猫(240e:380:19b3:9800:1510:9453:628b:90b0)。

2、在 Linux / Armbian 客户端上查看路由情况

root@onecloud:~# ip route show
default via 192.168.0.2 dev eth0
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.159

  从以上结果可以看出,IPv4 默认的网关为旁路由(192.168.0.2)。

root@onecloud:~# ip -6 route show
::1 dev lo proto kernel metric 256 pref medium
240e:380:19b3:65f7::/64 dev eth0 proto kernel metric 256 expires 259163sec pref medium
fe80::/64 dev eth0 proto kernel metric 256 pref medium
default via fe80::8149:d672:24d4:7a9f dev eth0 proto ra metric 1024 expires 263sec hoplimit 64 pref high
default via fe80::1 dev eth0 proto ra metric 1024 expires 1763sec mtu 1472 hoplimit 64 pref medium

  从以上结果可以看出,IPv6 有两个默认路由,分别为光猫(fe80::1)和旁路由(fe80::8149:d672:24d4:7a9f),由于旁路由 RA 服务的 AdvDefaultPreference 设置为 high ,操作系统会优先使用旁路由。

3、使用 ADB 工具连接 Android 盒子,在盒子上使用 traceroute 命令追踪路由情况

franklin:/ # traceroute 114.114.114.114
traceroute to 114.114.114.114 (114.114.114.114), 30 hops max, 38 byte packets
 1  192.168.0.2 (192.168.0.2)  1.274 ms  1.422 ms  1.039 ms
 2  192.168.0.1 (192.168.0.1)  1.705 ms  1.707 ms  1.367 ms
 3  ......

  使用 traceroute 命令追踪 IPv4 的路由情况,第一跳为旁路由(192.168.0.2),第二跳为光猫(192.168.0.1)。

franklin:/ # traceroute 240C::6644
traceroute to 240C::6644 (240c::6644), 30 hops max, 64 byte packets
 1  240e:380:19b3:65f7:8149:d672:24d4:7a9f (240e:380:19b3:65f7:8149:d672:24d4:7a9f)  1.426 ms  1.200 ms  1.116 ms
 2  240e:380:19b3:9800:1510:9453:628b:90b0 (240e:380:19b3:9800:1510:9453:628b:90b0)  1.659 ms  1.544 ms  1.267 ms
 3  ......

  使用 traceroute 命令追踪 IPv6 的路由情况,第一跳为旁路由(240e:380:19b3:65f7:8149:d672:24d4:7a9f),第二跳为光猫(240e:380:19b3:9800:1510:9453:628b:90b0)。

五、该方案的局限性

  该方案在 WIndows 、Linux 、macOS 等操作系统中可以完美使用,但是对于低版本的 Android 系统可能达不到预期效果。究其原因为 Android 的某些低版本对 IPv6 的支持有限,尤其是在处理路由广告(RA)消息时,可能并没有完整实现对所有 RA 选项的支持。这意味着即使广告了 AdvDefaultPreference high 或 AdvRoutePreference high,Android 设备可能不会显示或使用这些信息。实验过程中我发现其他操作系统均可以将 IPv6 网关指向旁路由,但是 Android 机顶盒始终存在问题,直到我将 Android 机顶盒的固件版本升级到 Android 9,才解决了上述问题。

相关知识点:Android 对 IPv6 支持的演变

1、早期版本(Android 4.x 及更早版本):

这些版本对 IPv6 支持非常有限,主要用于基础的 IPv6 连接,路由广告(RA)消息的处理也比较简单。

例如:Android 4.4 之前的版本可能不会完全支持 RA 消息中的所有选项,比如 AdvRoutePreference。

2、Android 5.x (Lollipop):

增加了对 IPv6 的支持,包括 RA 的处理,但仍然有限。

具体支持的 RA 选项文档很少,但从用户反馈来看,RA 消息中的一些高级选项可能不会完全处理或显示。

3、Android 6.x (Marshmallow) 及以后:

增强了对 IPv6 的支持,包括对更多 RA 选项的处理。

例如:引入了对 IPv6 快速切换和更好的 RA 消息处理,但具体到 AdvRoutePreference 等选项的支持情况仍然不明确。

4、Android 8.x (Oreo) 及以后:

进一步增强了 IPv6 支持,改进了 RA 消息的处理。

例如:引入了对 IPv6 Dual-Stack 的更好支持,但具体到高级 RA 选项,如 AdvRoutePreference,仍然可能存在支持不完整或不显示的问题。


本文出处:HiFeng's Blog
本文链接:https://www.hicairo.com/post/78.html
版权声明:本博客所有文章除特别声明外,均采用CC BY-NC-SA许可协议。转载请注明出处!

在 Armbian 操作系统上使用 dae(大鹅) 搭建透明代理

2024-07-27 08:54:00

  今年年初,我在 Armbian 操作系统上使用 iptables 、ipset、dnsmasq + gfwlist 搭建了基于 hysteria 协议的透明代理,实现了旁路由的分流功能。其中使用了国内的 IPv4&IPv6 地址集合和被污染的域名列表,大量的命令及 iptables 数据包流向问题让很多小伙伴看起来有些有些晦涩难懂。很开心由 mzz2017 大佬开发的 dae(大鹅) 透明代理工具完美的解决了上述问题,我已经在斐讯 N1玩客云上测试了 dae(大鹅),目前运行稳定。这篇文章将带领大家进行 dae(大鹅)的安装和基本配置。

一、dae(大鹅)简介

  dae 是一款基于 eBPF 技术的 Linux 高性能透明代理工具。而 eBPF 是一个内核技术,允许在 Linux 内核中运行程序来监控网络数据包和系统事件,但不需要修改内核代码或者重新编译内核。简而言之,它可以提供内核级别执行自定义代码的能力,可以实现各种网络和性能优化的需求。它有点类似于脚本语言,只不过它是针对内核开发者的。

项目地址:https://github.com/daeuniverse/dae

二、安装环境

1、Linux 内核版本需要>= 5.8,可以使用如下命令查询:

root@onecloud:~# uname -r
6.6.29-current-meson

2、dae 需要以下内核选项,可以使用如下命令查询:

root@onecloud:~# (zcat /proc/config.gz || cat /boot/{config,config-$(uname -r)}) | grep -E 'CONFIG_(DEBUG_INFO|DEBUG_INFO_BTF|KPROBES|KPROBE_EVENTS|BPF|BPF_SYSCALL|BPF_JIT|BPF_STREAM_PARSER|NET_CLS_ACT|NET_SCH_INGRESS|NET_INGRESS|NET_EGRESS|NET_CLS_BPF|BPF_EVENTS|CGROUPS)=|# CONFIG_DEBUG_INFO_REDUCED is not set' 
CONFIG_BPF=y
CONFIG_BPF_SYSCALL=y
CONFIG_BPF_JIT=y
CONFIG_CGROUPS=y
CONFIG_KPROBES=y
CONFIG_NET_INGRESS=y
CONFIG_NET_EGRESS=y
CONFIG_NET_SCH_INGRESS=m
CONFIG_NET_CLS_BPF=m
CONFIG_NET_CLS_ACT=y
CONFIG_BPF_STREAM_PARSER=y
CONFIG_DEBUG_INFO=y
# CONFIG_DEBUG_INFO_REDUCED is not set
CONFIG_DEBUG_INFO_BTF=y
CONFIG_KPROBE_EVENTS=y
CONFIG_BPF_EVENTS=y

三、启用 IP 转发

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.disable_ipv6 = 0" >> /etc/sysctl.conf
echo "net.ipv6.conf.default.disable_ipv6 = 0" >> /etc/sysctl.conf
echo "net.ipv6.conf.lo.disable_ipv6 = 0" >> /etc/sysctl.conf
echo "net.ipv6.conf.default.use_tempaddr = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.forwarding = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.default.forwarding = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.accept_ra = 2" >> /etc/sysctl.conf
echo "net.ipv6.conf.default.accept_ra = 2" >> /etc/sysctl.conf
echo "net.ipv6.conf.eth0.accept_ra = 2" >> /etc/sysctl.conf

sysctl -p

  本站提供的玩客云固件,BPF(Berkeley Packet Filter)JIT(Just-In-Time)编译器默认没有开启。可以使用如下命令查询开启状态。如果返回值为1,说明已经开启。

root@onecloud:~# cat /proc/sys/net/core/bpf_jit_enable
1

如果返回值为0,请手动开启。

root@onecloud:~# cat /proc/sys/net/core/bpf_jit_enable
0

开启BPF(Berkeley Packet Filter)JIT(Just-In-Time)编译器。

echo "net.core.bpf_jit_enable = 1" >> /etc/sysctl.conf

sysctl -p

四、下载并解压

  请下载你设备对应 CPU 架构的安装包,(备注:本站提供的玩客云 dae 固件, v0.5.1正式版可以正常使用,其他较新版本尚未进行测试。)官方地址如下:

https://github.com/daeuniverse/dae/releases

# 下载 v0.5.1 正式版
wget https://mirror.ghproxy.com/https://github.com/daeuniverse/dae/releases/download/v0.5.1/dae-linux-armv7.zip
# 解压
unzip -d dae dae-linux-armv7.zip
cd dae

五、配置安装

1、配置文件

# 创建配置目录
mkdir -p /etc/dae
# 将示例配置文件移动到配置目录
mv example.dae /etc/dae
# 创建最小配置文件
cat > /etc/dae/config.dae <<EOF
global{}
routing{}
EOF
# 设置配置文件权限,限制只有配置文件所有者才可以读写,不设置dae无法启动
chmod 0640 /etc/dae/config.dae

2.Geo 数据库文件

# 创建数据目录
mkdir -p /usr/local/share/dae/
# 将geo数据库文件移动到数据目录
mv geoip.dat geosite.dat /usr/local/share/dae/

3.主程序文件

# 添加可执行权限
chmod a+x dae-linux-armv7
# 将主程序文件安装到/usr/bin/目录
mv dae-linux-armv7 /usr/bin/dae

4.服务文件

# 将服务文件下载到systemd目录
wget -O /etc/systemd/system/dae.service https://mirror.ghproxy.com/https://raw.githubusercontent.com/daeuniverse/dae/main/install/dae.service
# 刷新配置
systemctl daemon-reload

六、服务管理

1、设置开机自启动

systemctl enable dae

2、启动服务

systemctl start dae

3、查询服务状态

systemctl status dae

4、重载配置

systemctl reload dae

七、config.dae 配置文件示例

  上一步我们创建了一个最简单的配置文件(/etc/dae/config.dae),用于测试 dae(大鹅)能否正常运行。下面是一个 config.dae 配置文件示例,供参考。

  更详细的配置信息,请参考https://github.com/daeuniverse/dae/blob/main/example.dae

  如果你只在 wan_interface 中填写了接口或 auto,而未在 lan_interface 中填写内容,那么从局域网中传来的流量将无法被代理。如果你想同时代理本机和局域网流量,请同时填写 wan_interfacelan_interface

下面的配置,需要注意两个地方:

1,lan_interface: eth0(注意看你的网口名称是不是eth0)

2,节点URI,请修改为你自己的节点URI

# 全局配置
global {
    # 绑定lan网口提供给内网设备,填自己服务器的网口,多个逗号隔开
    lan_interface: eth0
    wan_interface: auto
    log_level: info
    auto_config_kernel_parameter: true
    dial_mode: domain
    allow_insecure: false
    so_mark_from_dae: 1234
    # tls配置
    tls_implementation: utls
    utls_imitate: chrome_auto
}
# 订阅配置
subscription {
}
# 节点配置
node {
    # 节点URI
    #US: 'juicity://uuid:[email protected]:port?congestion_control=bbr&sni=example.domain.com&allow_insecure=0&pinned_certchain_sha256=CERT_HASH'
    HK: 'socks5://username:password@localhost:10808'
    #US: 'hysteria2://authpassword@serverIP:port/?sin=domainname'
}
# 分组配置,以下采用固定策略,使用第一个节点
group {
    ifeng_proxy {
        policy: fixed(0)
    }
}
# dns配置
dns {
  upstream {
    googledns: 'tcp+udp://dns.google.com:53'
    alidns: 'udp://dns.alidns.com:53'
  }
  routing {
    request {
      qname(geosite:cn) -> alidns
      fallback: googledns
    }
    response {
        upstream(googledns) -> accept
        fallback: accept
    }
  }
}
# 路由配置
routing {
    pname(NetworkManager) -> direct
    dip(224.0.0.0/3, 'ff00::/8') -> direct
    dip(geoip:private) -> direct
    ### 以下是自定义规则
    ## 规则
    ip(geoip:cn) -> direct
    domain(geosite:cn) -> direct
    domain(geosite:category-ads) -> block
    # hysteria 配置,将进程名为 hysteria 的流量直接放行,不进行劫持和处理,强制直连。
    pname(hysteria) -> must_direct
    # 默认出站分组
    fallback: ifeng_proxy
}

八、dae(大鹅) 使用 hysteria 协议

  dae(大鹅)从 v.0.7.0 版本开始支持 hysteria2 协议,这样旁路由上就可以少运行一个 hysteria 进程,减少旁路由的压力。经过测试,目前 v0.7.0 版本在使用 hysteria2 时,不支持混淆和端口跳跃功能,URL 中的主机名为域名时,无法正常解析。

  dae v0.7.0 版本目前可用的 URL 格式为:

hysteria2://authpassword@serverIP:port/?sin=domainname

  鉴于有些小伙伴想要用到混淆和端口跳跃功能,目前情况就只能多跑一个 hysteria 进程。

1、创建工作组和用户

#建议尽量不要使用 root 用户运行服务,我们创建一个名为 hysteria 的用户用于运行 hysteria 。 
groupadd --system hysteria
useradd --system \
    --gid hysteria \
    --create-home \
    --home-dir /var/lib/hysteria \
    --shell /usr/sbin/nologin \
    --comment "hysteria server" \
    hysteria

2、下载你设备对应 CPU 架构的安装包。

https://github.com/apernet/hysteria/releases/latest

# 下载对应 CPU 架构的安装包
wget -q -O /usr/bin/hysteria https://mirror.ghproxy.com/https://github.com/apernet/hysteria/releases/download/app%2Fv2.5.0/hysteria-linux-arm
# 设置可执行权限
chmod a+x /usr/bin/hysteria
#创建 hysteria 配置文件目录
mkdir /etc/hysteria

3、请参考以下示例,结合 hysteria 服务端配置,创建 hysteria 客户端配置文件,配置文件的路径为 /etc/hysteria/config.json

{
  "server": "hy2.hicairo.com:10086:30000-35000",
  "obfs": {
    "type": "salamander",
    "salamander": {
      "password": "*******************"
    }
  },
  "auth":"*******************",
   "transport": {
    "type": "udp",
    "udp": {
      "hopInterval": "30s"
    }
  },
  "bandwidth": {
    "up": "35 mbps",
    "down": "225 mbps"
  },
  "fastOpen": true,
  "lazy": true,
  "socks5": {
    "listen": ":10808",
    "username": "username",
    "password": "password"
  },
    "http": {
    "listen": ":10809",
    "username": "username",
    "password": "password"
  }
}

4、将 Hysteria 作为守护进程运行

在 /etc/systemd/system/ 目录创建 hysteria.service

cat > /etc/systemd/system/hysteria.service <<EOF
[Unit]
Description=Hysteria client Service (config.json)
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/hysteria -c /etc/hysteria/config.json client
WorkingDirectory=/etc/hysteria
User=hysteria
Group=hysteria
Environment=HYSTERIA_LOG_LEVEL=info
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW
NoNewPrivileges=true
[Install]
WantedBy=multi-user.target
EOF

5、启动 Hysteria 客户端

chown -R hysteria:hysteria /etc/hysteria/
systemctl daemon-reload
systemctl enable hysteria
systemctl start hysteria
#查看当前状态
systemctl status hysteria
#使用更改的配置文件重新加载 hysteria
systemctl reload hysteria

6、这时 Hysteria 进程就运行起来了,提供了 socks5 和 http 协议。参考本文第七章节,修改 /etc/dae/config.dae 配置文件中的节点配置,连接本地的 socks5 协议。

......
# 节点配置
node {
    # 节点URI
    HK: 'socks5://username:password@localhost:10808'
}
......

同时,请确认你的 /etc/dae/config.dae 配置文件中包含以下这句配置。

# hysteria 配置,将进程名为 hysteria 的流量直接放行,不进行劫持和处理,强制直连。
pname(hysteria) -> must_direct

最后,重启 dae(大鹅)服务即可。

systemctl restart dae

本文出处:HiFeng'Blog
本文链接:https://www.hicairo.com/post/77.html
版权声明:本博客所有文章除特别声明外,均采用CC BY-NC-SA许可协议。转载请注明出处!

玩客云盒子(OneCloud)刷 Armbian 系统

2024-07-16 18:53:15

  玩客云是 2017 年的一款矿渣产品,目前在海鲜市场一块也就 20-30 元左右,鉴于玩客云提供了一个千兆以太网口,想着玩客云能否当作旁路由使用,于是就有了这篇文档。经测试玩客云性能较低,如果用做科学上网的旁路由,会因为硬件性能原因产生降速问题,不推荐再次入手,如果想玩 Armbian 可以考虑入手斐讯 N1,目前我使用斐讯 N1 搭建基于 Armbian 系统的旁路由运行稳定,速度也可以跑满我的宽带。

一、玩客云硬件参数

二、刷机所需的硬件及软件

1、Windows 操作系统电脑一台。经过我的测试,推荐 Win7/10操作系统。

2、USB 双公头线一根。

3、螺丝刀,卡针,一把金属镊子,用来短接用(用金属线也是可以的)。

4、闲置 U 盘一个,或者读卡器配合存储卡也行。

5、一个一字螺丝刀,或者镊子,如果都没有,一截细铁丝也行,或者其他较细且能导电的东西。

6、使用到的固件和相关软件:

https://drive.google.com/drive/folders/1V19083DONzVld3wTPZTHXL4E3uDf6lcw

1. win32diskimager-1.0.0-install.exe                                                 # 写盘工具
2. USB_Burning_Tools_v2.0.7.2_build2.exe                                              # 晶晨线刷工具含驱动
3. eMMC.burn.img                                                                      # U盘引导底包镜像
4. Armbian-unofficial_24.5.0-trunk_Onecloud_jammy_current_6.6.29_minimal.img.gz       # Armbian_24.5.0 版本固件, kernel BPF 模块已打开,可使用 dae
5. onecloud-emmc-install-main.zip                                                     # USB to EMMC 写盘工具

  谷歌云盘里提供的 Armbian 固件是我使用 hzyitc 大佬的仓库编译的,kernel BPF 模块已打开, 可使用 dae ,U 盘引导底包镜像来自 hzyitc 的项目,USB to EMMC写盘工具来自 raysworld 大佬的项目,在此向两位大佬致敬!

三、刷机准备

1、请将用到的固件及软件提前下载到本地,并安装好 1. win32diskimager-1.0.0-install.exe 和 2. USB_Burning_Tools_v2.0.7.2_build2.exe 。

2、将 4. Armbian-unofficial_24.5.0-trunk_Onecloud_jammy_current_6.6.29_minimal.img.gz 解压,插入 U 盘后运行 Win32DiskImager 软件, 选择 Armbian-unofficial_24.5.0-trunk_Onecloud_jammy_current_6.6.29_minimal.img 写入 U 盘备用。

1.写入 Armbian 固件.webp

四、免拆刷机

建议优先尝试此方法,如果此方法可以刷机,可以跳过步骤五。

1、在电脑上运行 USB_Burning_Tools 软件,点击 文件 -> 导入烧录包 ,选择 3. eMMC.burn.img 后点击“开始”按钮。(需要勾选擦除 flash(普通擦除)以及擦除 bootloader )

2.刷入 eMMC.burn.img.webp

2、玩客云盒子暂时不要通电,使用USB 双公头线一端接电脑,另外一端接盒子的 USB1 口(靠近 HDMI 的 USB 口)。然后使用卡针顶住重置键(RJ45口旁边的小孔),再接通电源,等待几秒,如果 USB_Burning_Tools 出现“连接成功”,开始将 U 盘引导底包镜像写入玩客云盒子,说明该盒子支持免拆刷机,请等待刷机完成。

3.刷入 eMMC.burn.img 成功.webp

3、出现“100%:烧录成功”时,点击“停止”按钮、关闭软件后移除电源和 USB 双公头线,这时已经将 U 盘引导底包成功刷入盒子。

如果 USB_Burning_Tools 没有出现“连接成功”,说明此方法无效,只能选择拆机刷机的方式,详细请参照步骤五。

五、拆机刷机

1、撬开玩客云背面的 PVC 贴片,就是有网口的那一面,这个是直接粘上去的,从接口那里撬开就可以(接口处粘的不牢,比较容易翘起来),如果不好撬开可以用吹风机加热下,不要强行撬 PVC 贴片,会断的。

4.撬开 PVC 贴片.webp

2、撬开后拧下螺丝,背板就可以取下了,然后就可以抽出整个主板。

5.拆出的主板.webp

3、我们通常能见到的玩客云版本分为 V1.1 和 V1.3,在主板 SD卡槽位置,如果标明了 V1.3 就是 V1.3 版本,否则应该是  V1.1 版本。

6.玩客云区分版本.webp

4、刷机时,不同版本的主板短接位置不同, V1.1 主板(短接背面两个焊点空焊位)。

7.V1.1版本短接位置.webp

5、V1.3 主板(短接从上往下数第四第五电阻引脚)。

8.V1.3版本短接位置_1.webp
9.V1.3版本短接位置_2.webp

6、短接刷机和免拆机刷一样,首先在电脑上运行 USB_Burning_Tools 软件,点击 文件 -> 导入烧录包 ,选择 3. eMMC.burn.img 后点击“开始”按钮(需要勾选擦除 flash(普通擦除)以及擦除 bootloader )。玩客云盒子暂时不要通电,使用USB 双公头线一端接电脑,另外一端接盒子的 USB1 口(靠近 HDMI 的 USB 口)。然后使用镊子短接上述短接点,再接通电源,等待几秒,USB_Burning_Tools 会出现“连接成功”,并开始将 U 盘引导底包镜像写入玩客云盒子,这时只需等待刷机完成即可。

六、使用 U 盘引导进入 Armbian 系统

1、将 3.2 步骤中准备的 U 盘插入玩客云的 USB1 口(靠近 HDMI 的 USB 口),插入网线,接电源后启动,屏幕会先出现 U-boot 引导画面,之后会进入 U 盘中的 armbian 系统。

10.U-Boot引导画面.webp

2、进入 armbian 以后用 root:1234 登录,会要求修改密码和创建普通用户,不想创建用户可以 Ctrl+C 跳过,完成以后会留在一个 shell 里面。

11.U盘引导首次进入armbian.webp

七、将 U 盘中的 Armbian 系统写入玩客云盒子的 EMMC

  现在的 Armbian 系统是从 U 盘启动的,拔掉 U 盘就无法启动了,接下来还需把系统写入到 EMMC 中。

apt install unzip
wget https://mirror.ghproxy.com/https://github.com/raysworld/onecloud-emmc-install/archive/refs/heads/main.zip
unzip main.zip
mv onecloud-emmc-install-main /boot/install
cd /boot/install
./install.sh

  刷入系统时玩客云的指示灯会蓝/ 紫交替闪烁,表示正在写入 EMMC。

12.将 U 盘中的 Armbian 写入 EMMC.webp

  出现如上界面后,表示已经写入完成,这时拔掉电源后移除 U 盘,再次加电后就可以使用 EMMC 中的固件引导引入 Armbian 系统。

八、Armbian 的简单设置

1、将 armbian 的更新源修改为清华源

  Armbian 操作系统默认使用的官方更新源(ports.ubuntu.com)服务器在海外,连接速度和国内镜像源比起来较慢,建议修改为清华大学提供的镜像源。

mv /etc/apt/sources.list /etc/apt/sources.list.bak
cat > /etc/apt/sources.list <<EOF
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy main restricted universe multiverse
#deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-security main restricted universe multiverse
#deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-security main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-updates main restricted universe multiverse
#deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-backports main restricted universe multiverse
#deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-backports main restricted universe multiverse
EOF
mv /etc/apt/sources.list.d/armbian.list /etc/apt/sources.list.d/armbian.list.bak
cat > /etc/apt/sources.list.d/armbian.list <<EOF
deb [signed-by=/usr/share/keyrings/armbian.gpg] https://mirrors.tuna.tsinghua.edu.cn/armbian jammy main jammy-utils jammy-desktop
EOF

  刷新软件源列表,更新本地软件包索引。

apt update

2、修改时区

# 系统时间和时区
date -R
# 修改时区,使用 tzselect 命令,然后选择 asia china beijing yes。
tzselect
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 再次查询系统时间和时区
date -R

3、为玩客云分配静态 IP 地址

  参考以下示例,为玩客云分配同网段的静态 IP 地址,hwaddress 参数用于固定 Mac 地址,Mac 地址可以在盒子背后的标签上找到,或者使用 ifconfig 命令查询。修改完成后使用 reboot 命令重启盒子,然后使用新的 IP 地址连接盒子。

# 安装 net-tools vim ifupdown
apt install net-tools vim ifupdown

# 备份原始配置,分配静态 IP
mv /etc/network/interfaces /etc/network/interfaces.bak
cat > /etc/network/interfaces <<EOF
source /etc/network/interfaces.d/*
auto lo
iface lo inet loopback
auto eth0
allow-hotplug eth0
iface eth0 inet static
    hwaddress 88:88:88:88:88:88
    address 192.168.0.2
netmask 255.255.255.0
gateway 192.168.0.1
iface eth0 inet6 auto
EOF

# 关闭 NetworkManager 服务
systemctl stop NetworkManager
systemctl disable NetworkManager

# 启动 networking 服务
systemctl start networking

# 重新启动盒子
reboot

本文出处:HiFeng'Blog
本文链接:https://www.hicairo.com/post/76.html
版权声明:本博客所有文章除特别声明外,均采用CC BY-NC-SA许可协议。转载请注明出处!

斐讯 N1 盒子刷 Armbian 系统

2024-05-03 20:11:27

  PHICOMM N1 盒子已经上市很多年了,虽然是一个矿渣产品,但是其优异的硬件配置,丰富的固件适配,目前还被广泛使用。在此首先对 webpad 等几位大佬致敬,由于他们的分享,使得很多人可以很方便的在 N1 盒子上实现自己所需的功能。目前网上有关 N1 盒子刷 TV 系统、OpenWrt 系统、Armbian等系统的文章很多,本来不想水这篇文章的,但是鉴于接下来我会分享使用 N1 盒子吃鹅 的话题,考虑到教程的完整性,于是决定还是把 N1 盒子刷 Armbian 系统的步骤整理一下。

一、斐讯 N1 的硬件参数

产品类型:家庭网络存储,云存储

处理器:Amlogic S905D Cortex-A53,Mali-450 GPU

内存:RAM 2GB, ROM 8GB

接口:USB 2.0 * 2、HDMI * 1、RJ45 * 1(千兆网口)

无线连接:支持2.4G/5G WiFi,蓝牙BT 4.1 BLE低功耗

视频输出分辨率:最高支持到 4K 60 帧硬件解码

电源接口:12V/2A

尺寸与重量:产品尺寸为110mm x 110mm x 40mm,产品重量约为0.248kg

二、刷机准备

1、所需硬件

  N1 盒子一个、8G 以上 U 盘一个、USB 接口键盘一个、USB 鼠标一块、HDMI 晶晨短接神器(作用为线刷时短接,很便宜,海鲜市场有卖,如果没有可以拆机手动短接)、HDMI 接口显示器 / HDMI 接口电视一台、网线一根、HDMI 线一根、路由器、电脑。

2、所需软件

  为方便使用,我已经将所需要的软件整理好,放到了谷歌云盘,大家可以下载后使用。

https://drive.google.com/drive/u/1/folders/1QUhpnzm1CvFHkUh1904EN7QFaJBag8Vb

1. 解压使用-斐讯T1、N1官方系统降级工具.zip                              #斐讯 T1、N1 官方系统降级工具
2. 解压使用-N1U盘启动.zip                                              #N1 U 盘启动
3. USB_Burning_Tools_v2.0.7.2_build2.exe                              #晶晨线刷工具含驱动
4. win32diskimager-1.0.0-install.exe                                  #写盘工具
5. N1_mod_by_webpad_v2.2_20180920.img.7z                              #Android 7.0.1 版本固件, root, 可引导进入 Armbian
6. Reboot to LibreELEC_1.1_Apkpure.apk                                #重启进入 Armbian 软件
7.Armbian_24.5.0_amlogic_s905d_jammy_6.6.28_server_2024.04.25.img.gz  #Armbian_24.5.0 版本固件,kernel BPF 模块已打开,可使用 dae

  谷歌云盘里提供的 Armbian 固件 kernel BPF 模块默认已打开, 经我测试可使用 dae ,来自于 ophub 的 GitHub 项目,如果你更习惯于使用 Debian 固件,请使用如下链接自行下载。

https://github.com/ophub/amlogic-s9xxx-armbian/releases/

  Armbian 是基于 Debian 和 Ubuntu 的 Linux 发行版,专门为 ARM 开发板设计。Armbian 的版本命名通常遵循其基于的 Debian 或 Ubuntu 发行版。Armbian 的这四个版本(Noble、Jammy、Bullseye 和 Bookworm)分别基于不同的 Debian 或 Ubuntu 版本:

三、降级关键分区

  玩 N1 的朋友都知道第一步要对 N1 进行降级,但是却很少有人说明为什么要进行降级,降级针对盒子做了什么事情,这里我参考“if年少有为”在自己博文中的描述,希望大家能明白其中原理。

  连接 HDMI、网线、电源后会进入斐讯自带的安卓系统,安卓系统的标准启动过程如下:

  问题就在于,bootloader 是斐讯针对盒子定制的,它设置了一些限制,比如:

  所以呢,恩山论坛的 webpad 大佬,修改了斐讯的 bootloader,我们要做的就是把  webpad 大佬修改后的 bootloader 覆盖到盒子里面去,这个过程被称之为 N1 降级,一台 N1 这辈子只需要做一次降级操作,后续不需要再研究这个问题了。当然如果你的盒子到手时就已经被刷成了 TV 等其他系统,这一步骤就可以跳过了。

1、将 N1 接上网线,HDMI 线接显示器,离 HDMI 口远的那个 USB 口接一个鼠标。连上网以后,等个五分钟左右,待其自动升级到最新版,中间可能会多次重启升级,直到不再升级为准。否则如果正在刷的过程中 N1 重启可能会有点麻烦。记录一下屏幕上显示的 IP ,下一步会用到。接下来用鼠标点击屏幕上版本号的地方 4 次,屏幕中间会显示一下“开启adb”。

1.N1 在 nas 主界面点击四次固件版本打开 adb.webp

2、下载“1.解压使用-斐讯T1、N1官方系统降级工具.zip”文件并解压,运行 onekey 目录中的 run.bat 批处理文件,按照提示输入 2 选择 N1 降级。

2.N1 降级_1.webp

按照提示输入 N1 的 IP 地址。

2.N1 降级_2.webp

按照提示按任意键开始降级。

2.N1 降级_3.webp

四、制作 Armbian U 盘

1、在电脑上下载并安装“4.win32diskimager-1.0.0-install.exe”写盘工具软件,同时下载并解压镜像文件“7.Armbian_24.5.0_amlogic_s905d_jammy_6.6.28_server_2024.04.25.img.gz”备用。

2、运行 win32diskimager 软件,如下图所示,选择上一步解压好的镜像文件,插入 U 盘后将镜像文件写入 U 盘。

3.给U盘写入armbian镜像.webp

  有关网上流传的 armbian 5.77 版本的最稳定,meson-gxl-s905d-phicomm-n1-xiangsm.dtb 可以解决系统过高等问题,经过我的实际测试,目前 ophub 编译的镜像已经解决了上述问题,大家可以放心使用。

五、在 Android 系统里引导从 U 盘启动

1、下载“2.解压使用-N1U盘启动.zip”并解压,将显示器和键盘接入 N1 盒子,执行“N1-ADBU盘启动(傻瓜包)”文件夹下的“U盘启动.bat”,输入 N1 盒子的 IP 地址,地址可以从路由器管理界面看到。

4.N1盒子U盘启动.webp

2、N1 的两个 USB 口,离 HDMI口 远的接 USB 键盘,另一个接 U 盘。HDMI 线接显示器,加电冷启动。屏幕会先出现启动画面,之后会进入 U 盘的 armbian 系统。这里如果多次重复,还是只能进入 Android 的 recovery 模式,那么请换个 U 盘试试,基本这里不成功都是因为 U 盘兼容性问题导致的,建议最好使用 USB 2.0 的 U 盘。

5.armbian启动界面.webp

3、进入 armbian 以后用 root:1234 登录,会被要求修改密码和创建普通用户,不想创建用户可以 Ctrl+C 跳过,完成以后会留在一个 shell 里面。

6.armbian初始化设置.webp

六、将 U 盘中的 Armbian 系统写入 N1 盒子的 EMMC

  接上一步,使用 root 用户及密码登录 armbian 后,在 bash 下执行 armbian-install 命令。按照提示输入“101”,选择文件系统输入“1”(选择ext4),这时开始将 U 盘中的 armbian 系统 copy 到 emmc ,整个过程大概需要 2~3 分钟,等待文件 copy 完后,按照提示输入 poweroff 命令关机,然后移除盒子上的 U 盘,给盒子重新加电后会使用 emmc 进入 armbian 系统,到此刷机工作就完成了。

  注意:在将 armbian 写入 emmc 成功后,引导的先后顺序为先从 U 盘引导进入系统,没有插 U 盘时才使用 emmc 引导进入系统,所有如果你要使用 emmc 中的系统,请务必拔掉 U 盘。

root@armbian:~# armbian-install
[ STEPS ] Installing Armbian to internal eMMC...
[ STEPS ] Checking dependencies...
[ INFO ] Dependency check completed. Proceeding installation...
[ STEPS ] Initializing the environment...
[ INFO ] Use mainline u-boot: [ no ]
[ INFO ] Use ampart tool: [ yes ]
[ INFO ] Show all devices: [ no ]
[ INFO ] Internal eMMC : [ /dev/mmcblk2 ]
[ STEPS ] Start selecting device...
--------------------------------------------------------------------------------------
ID    SOC        MODEL                               DTB
--------------------------------------------------------------------------------------
101   s905d      Phicomm-N1                          meson-gxl-s905d-phicomm-n1.dtb
102   s905d      Phicomm-N1(DMA-thresh)              meson-gxl-s905d-phicomm-n1-thresh.dtb
103   s905d      MECOOL-KI-Pro                       meson-gxl-s905d-mecool-ki-pro.dtb
104   s905d      SML-5442TW                          meson-gxl-s905d-sml5442tw.dtb
105   s905x      HG680P                              meson-gxl-s905x-p212.dtb
106   s905x      B860H                               meson-gxl-s905x-b860h.dtb
107   s905x      Nexbox-a95x                         meson-gxl-s905x-nexbox-a95x.dtb
108   s905x      TX9                                 meson-gxl-s905x-tx9.dtb
109   s905x      T95,XiaoMI-3S,X96                   meson-gxl-s905x-p212.dtb
110   s905x      TBee                                meson-gxl-s905x-tbee.dtb
--------------------------------------------------------------------------------------
111   s905w      TX3-Mini                            meson-gxl-s905w-tx3-mini.dtb
112   s905w      W95                                 meson-gxl-s905w-p281.dtb
113   s905w      X96-Mini                            meson-gxl-s905w-x96-mini.dtb
114   s905w      X96W,FunTV,MXQ-Pro-4K               meson-gxl-s905w-x96w.dtb
115   s905l      UNT402A,M201-S,MiBox-4C             meson-gxl-s905l3b-m302a.dtb
116   s905l      MG101,Mibox-4                       meson-gxl-s905l-venz-v10.dtb
117   s905l2     MGV2000,MGV3000,M301A,CM201-1       meson-gxl-s905l2-x7-5g.dtb
118   s905l2     E900v21E,MGV2000-K,e900v21d         meson-gxl-s905l2-x7-5g.dtb
119   s905l2     Wojia-TV-IPBS9505                   meson-gxl-s905l2-ipbs9505.dtb
120   s905l3     CM311-1,HG680-LC,M401A,UNT402A      meson-gxl-s905l2-x7-5g.dtb
--------------------------------------------------------------------------------------
121   s905l3     CM211-1,M411A,B860AV3.2-M           meson-gxl-s905l3b-m302a.dtb
122   s905l3     UNT400G1,E900V22D-2                 meson-gxl-s905l2-x7-5g.dtb
123   s905l3b    E900V22D,TY1608                     meson-gxl-s905l2-x7-5g.dtb
124   s905l3b    E900V21E,E900V22E,MGV2000           meson-gxl-s905l3b-e900v22e.dtb
125   s905l3b    M302A,M304A,CM201-1,CM211-1,CM311-1 meson-gxl-s905l3b-m302a.dtb
126   s905l3b    UNT403A                             meson-gxl-s905l3b-m302a.dtb
127   s905l3b    RG020ET-CA                          meson-gxl-s905l3b-e900v22e.dtb
128   s905l3b    IP103H,TY1608,BV310,B860AV-2.1M     meson-gxl-s905l3b-m302a.dtb
129   s905lb     BesTV-R3300L,SumaVision-Q7,MG101    meson-gxl-s905x-p212.dtb
130   s905lb     Q96-mini                            meson-gxl-s905x-p212.dtb
--------------------------------------------------------------------------------------
131   s905mb     S65                                 meson-gxl-s905x-p212.dtb
0     Other      Customize                           Enter-custom-dtb-name
--------------------------------------------------------------------------------------
[ OPTIONS ] Please Input ID: 101
[ INFO ] Input Box ID: [ 101 ]
[ INFO ] Model Name: [ Phicomm-N1 ]
[ INFO ] FDTFILE: [ meson-gxl-s905d-phicomm-n1.dtb ]
[ INFO ] MAINLINE_UBOOT: [  ]
[ INFO ] BOOTLOADER_IMG:  [ u-boot-2015-phicomm-n1.bin ]
[ INFO ] UBOOT_OVERLOAD: [ u-boot-n1.bin ]
[ INFO ] NEED_OVERLOAD: [ no ]
[ STEPS ] Which type of filesystem do you want for your root?
-----------------------------------------------
  ID   TYPE
-----------------------------------------------
  1    ext4
  2    btrfs
-----------------------------------------------
[ OPTIONS ] Please Input ID (1/2): 1
[ INFO ] Input Type ID: [ 1 ]
[ INFO ] Type of filesystem: [ ext4 ]
[ STEPS ] Partitioning eMMC...
[ INFO ] Start backing up the default bootloader.
4+0 records in
4+0 records out
4194304 bytes (4.2 MB, 4.0 MiB) copied, 2.19803 s, 1.9 MB/s
[ INFO ] Delete the existing [ 2 ] partitions.
[ INFO ] Start create MBR and partittion.
[ INFO ] 02. Write Android bootloader: [ u-boot-2015-phicomm-n1.bin ]
444+0 records in
444+0 records out
444 bytes copied, 0.00781175 s, 56.8 kB/s
8191+0 records in
8191+0 records out
4193792 bytes (4.2 MB, 4.0 MiB) copied, 0.450597 s, 9.3 MB/s
[ STEPS ] Processing BOOTFS partition...
[ INFO ] Formatting BOOTFS partition...
mkfs.fat 4.2 (2021-01-31)
[ INFO ] Copying BOOTFS ...
[ INFO ] Update the [ uEnv.txt ] file.
[ STEPS ] Start processing the rootfs partition...
[ INFO ] Formatting ROOTFS ...
/dev/mmcblk2p2 contains a btrfs file system labelled 'ROOTFS_EMMC'
[ INFO ] Copying ROOTFS ...
[ INFO ] Copying [ etc ] ...
[ INFO ] Copying [ home ] ...
[ INFO ] Copying [ opt ] ...
[ INFO ] Copying [ root ] ...
[ INFO ] Copying [ selinux ] ...
[ INFO ] Copying [ srv ] ...
[ INFO ] Copying [ usr ] ...
[ INFO ] Copying [ var ] ...
[ INFO ] Generate the new fstab file.
[ INFO ] Update the relevant parameters.
[ SUCCESS ] Installation successful. Run [ poweroff ], remove the installation media then re-insert the power supply to boot new system.

七、Armbian 的简单设置

1、将 armbian 的更新源修改为清华源

  Armbian 操作系统默认使用的官方更新源(ports.ubuntu.com)服务器在海外,连接速度和国内镜像源比起来较慢,建议修改为清华大学提供的镜像源。

mv /etc/apt/sources.list /etc/apt/sources.list.bak

cat > /etc/apt/sources.list <<EOF
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy main restricted universe multiverse
#deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-security main restricted universe multiverse
#deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-security main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-updates main restricted universe multiverse
#deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-backports main restricted universe multiverse
#deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-backports main restricted universe multiverse
EOF

mv /etc/apt/sources.list.d/armbian.list /etc/apt/sources.list.d/armbian.list.bak

cat > /etc/apt/sources.list.d/armbian.list <<EOF
deb [signed-by=/usr/share/keyrings/armbian.gpg] https://mirrors.tuna.tsinghua.edu.cn/armbian jammy main jammy-utils jammy-desktop
EOF

  更新本机已安装的软件包

apt update
apt upgrade -y

2、修改时区

# 系统时间和时区
date -R

# 修改时区,使用 tzselect 命令,然后选择 asia china beijing yes。
tzselect
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

# 再次查询系统时间和时区
date -R

3、为 N1 分配静态 IP 地址

  参考以下示例,为 N1 分配同网段的静态 IP 地址,hwaddress 参数用于固定 Mac 地址,Mac 地址可以在盒子背后的标签上找到,或者使用 ifconfig 命令查询。修改完成后使用 reboot 命令重启盒子,然后使用新的 IP 地址连接盒子。

# 关闭 NetworkManager 服务
systemctl stop NetworkManager
systemctl disable NetworkManager

# 备份原始配置,分配静态 IP
mv /etc/network/interfaces /etc/network/interfaces.bak
cat > /etc/network/interfaces <<EOF
source /etc/network/interfaces.d/*
auto lo
iface lo inet loopback
auto eth0
allow-hotplug eth0
iface eth0 inet static
    hwaddress 88:88:88:88:88:88
    address 192.168.0.2
netmask 255.255.255.0
gateway 192.168.0.1
iface eth0 inet6 auto
EOF

# 重新启动盒子
reboot

八、从 Armbian 刷到 Android 固件

1、在电脑上下载并安装“3.USB_Burning_Tools_v2.0.7.2_build2.exe”烧录软件,同时下载并解压 android 固件“5.N1_mod_by_webpad_v2.2_20180920.img.7z”备用。

2、运行 USB_Burning_tools 软件,如下图所示,选择 android 固件后,去掉“擦除flash”和“擦除bootloader”前的对勾,然后点击“开始”按钮,将晶晨短接神器插在 HDMI 接口上,USB双公头线插到靠近 HDMI 接口的 USB 口上,然后给 N1 盒子接上电源,这时软件就识别到了 N1 盒子,开始写入固件。

8.N1线刷 Android 系统_1.webp

3、大约等待 3~4 分钟,会提示“100%:烧录成功”,这时先点击“停止”按钮,关闭烧录软件,然后拔掉 USB 线,拔掉电源后再次开机就进入了  android 系统。

8.N1线刷 Android 系统_2.webp


本文出处:HiFeng'Blog
本文链接:https://www.hicairo.com/post/75.html
版权声明:本博客所有文章除特别声明外,均采用CC BY-NC-SA许可协议。转载请注明出处!

Juicity 协议手动安装教程

2024-04-26 20:52:11

  Juicity 协议是一个开源的网络代理协议,作者在开发 Juicity 协议时受到了 TUIC 的启发。Juicity、TUIC、Hysteria 协议一样,均基于 QUIC(Quick UDP Internet Connections)协议实现。QUIC 是一个由 Google 开发的基于 UDP 的传输层网络协议,旨在减少连接和传输延迟。Juicity 与 Hysteria 不同之处主要为使用的拥塞算法,Juicity 可以使用的拥塞算法包括 reno、cubic、bbr 和 bbr2 ,而 hysteria 可以使用 brutal 拥塞算法。 brutal 拥塞算法表现的更为霸道与暴力,因此在网络链路不好的情况下,Hysteria 协议比 Juicity 协议的传输速度要快一些。

  正因为 hysteria 协议使用了 brutal 拥塞算法,可能会被 IDC 提供商误认为服务器在对外进行 DDOS 攻击,从而关停服务器。说明一下,我不是在黑 hysteria ,我目前主线路使用的也是 hysteria 协议,我想表达的是根据情况来选择合适的协议,例如在甲骨文云、谷歌云上可以使用同样基于 QUIC 的 Juicity 协议,以避免被封号的风险。

1.hysteria_DDOS.webp

一、服务器安装环境

  本次教程的测试环境为:Dartnode IPv4&IPv6 双栈 VPS ,1vCPU ,1GB Memory ,10 GB SSD ,Ubuntu 22.04.4 LTS ,同时需要一枚域名。

二、服务器端安装步骤

1、升级软件及操作系统内核

apt update
apt upgrade -y
apt -y install wget unzip uuid-runtime socat
apt-get update
apt-get upgrade
apt-get upgrade linux-image-generic
reboot

2、关闭防火墙

systemctl status ufw
systemctl stop ufw
systemctl disable ufw

3、开启 BBR

#查询支持的 TCP 拥塞控制算法
sysctl net.ipv4.tcp_available_congestion_control
#查询应用的 TCP 拥塞控制算法
sysctl net.ipv4.tcp_congestion_control
#启用 BBR TCP 拥塞控制算法
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
sysctl -p
echo "tcp_bbr" >> /etc/modules-load.d/modules.conf

4、申请域名证书

#创建 Juicity 配置文件目录
mkdir /etc/juicity
#安装 acme.sh
curl https://get.acme.sh | sh
ln -s /root/.acme.sh/acme.sh /usr/local/bin/acme.sh
acme.sh --set-default-ca --server letsencrypt
#申请域名证书
#example.domain.com请替换为你的真实域名
#注意:纯ipv6主机,在下面命令中加上--listen-v6参数
acme.sh --issue -d example.domain.com --keylength ec-256 --standalone --insecure
acme.sh --install-cert -d example.domain.com --ecc \
        --key-file       /etc/juicity/example.domain.com.key  \
        --fullchain-file /etc/juicity/example.domain.com.pem

5、安装 Juicity 服务器端

#下载最新版本的 Juicity
wget -O /tmp/juicity-linux-x86_64.zip https://github.com/juicity/juicity/releases/download/v0.4.2/juicity-linux-x86_64.zip
unzip -d /tmp/juicity /tmp/juicity-linux-x86_64.zip
mv /tmp/juicity/juicity-server /usr/bin
#将 Juicity 作为守护进程运行
mv /tmp/juicity/juicity-server.service /etc/systemd/system/
#服务器端配置文件
#可以使用 'uuidgen' 命令生成 UUID,使用 'openssl rand -base64 8' 命令生成 password 。
cat > /etc/juicity/server.json <<EOF
{
    "listen": ":10086", 
    "users": {
        "UUID": "password"
    },
    "certificate": "/etc/juicity/example.domain.com.pem",
    "private_key": "/etc/juicity/example.domain.com.key",
    "congestion_control": "bbr",
    "disable_outbound_udp443": true,
    "log_level": "info"
}
EOF
#启动 Juicity 服务端
systemctl daemon-reload
systemctl enable juicity-server
systemctl start juicity-server
#查看当前状态
systemctl status juicity-server

三、 客户端配置

Juicity 客户端:https://github.com/juicity/juicity/releases/latest

1、根据客户端操作系统,下载对应的 Juicity 客户端,以 64 位 windows 操作系统,V2rayN V6.29 版本为例。

  在官方网站下载 juicity-linux-x86_64.zip,解压后将 juicity-client.exe 文件 copy 到 v2rayN 安装目录 \bin\juicity 目录中。 如果 bin 目录中没有 juicity 文件夹,请自行创建。

  用记事本创建一个 client.json 文件,内容如下:

  其中 example.domain.com:10086 代表域名和服务器端监听的端口,请根据实际情况修改,同时修改 UUID 和 password 的值。

{
    "listen": ":15000",
    "server": "example.domain.com:10086",
    "uuid": "UUID",
    "password": "password",
    "sni": "example.domain.com",
    "allow_insecure": false,
    "congestion_control": "bbr",
    "log_level": "info"
}

2、v2rayN 客户端配置,点击菜单上“服务器”中的“添加自定义服务器”。

2.V2rayN_import_custom.webp

3、导入上一步配置好的 client.json 文件, Core 类型选择 juicity ,socks 端口填写上一步设置的监听端口 15000 后点确定按钮。

3.V2rayN_import_juicity.webp

4、苹果手机 Shadowrocket 客户端配置,类型选择 juicity ,分别填入地址、端口、UUID、密码、SIN后保存。

4.Shadowrocket_import_juicity.webp

juicity 协议的链接地址格式为:

juicity://uuid:[email protected]:port?congestion_control=bbr&sni=example.domain.com&allow_insecure=0&pinned_certchain_sha256=CERT_HASH

  手机上敲字比较累,可以参考以上格式在计算机上制作好 juicity 协议的链接,然后将链接通过微信等发到手机,复制后在 Shadowrocket 客户端导入即可。

四、测速情况

  我目前使用的是 200M 宽带,以下是使用 Dartnode 同一台 VPS 在晚高峰分别使用 hysteria2 和 juicity 的测速情况,可以看出 juicity 协议的速度的确要比 hysteria2 协议慢一些。

5.SpeedTest_Dartnode_Hysteria2.webp6.SpeedTest_Dartnode_Juicity.webp


本文出处:HiFeng'Blog
本文链接:https://www.hicairo.com/post/74.html
版权声明:本博客所有文章除特别声明外,均采用CC BY-NC-SA许可协议。转载请注明出处!

使用 CloudFlare 源服务器证书时提示 issuer certificate not found 问题

2024-04-06 15:23:19

  前几天将博客迁移到了甲骨文的 vps 上,顺便将 nginx 版本升级到了 1.25.4 ,OpenSSL 版本升级到了 3.0.2 , 迁移完后运行 nginx -t 出现如下提示。

root@blog:~# nginx -t
nginx: [warn] "ssl_stapling" ignored, issuer certificate not found for certificate "/etc/nginx/ssl/hicairo.com.pem"
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

  出现一行警告信息,虽然忽略该提示也可以正常工作,不影响使用,但是作为技术控的你,总感觉心里不舒服,要把这个事情搞明白。于是就看到了这篇文章。^_^

一、相关原理:OCSP 与 CRL

  出于某些原因,证书颁发者有时候需要作废某些证书。那么证书使用者(例如浏览器)如何知道一个证书是否已被作废呢?通常有两种方式:CRL(Certificate Revocation List,证书撤销名单)和 OCSP(Online Certificate Status Protocol,在线证书状态协议)。

CRL 是由证书颁发机构定期更新的一个列表,包含了所有已被作废的证书,浏览器可以定期下载这个列表用于验证证书合法性。不难想象,CRL 会随着时间推移变得越来越大,而且实时性很难得到保证。

  OCSP 则是一个在线查询接口,浏览器可以实时查询单个证书的合法性。在每个证书的详细信息中,都可以找到对应颁发机构的 CRL 和 OCSP 地址。

  OCSP 的问题在于,某些客户端会在 TLS 握手阶段进一步协商时,实时查询 OCSP 接口,并在获得结果前阻塞后续流程,这对性能影响很大。而 OCSP Stapling(OCSP 封套),是指服务端在证书链中包含颁发机构对证书的 OCSP 查询结果,从而让浏览器跳过自己去验证的过程。服务端有更快的网络,获取 OCSP 响应更容易,也可以将 OCSP 响应缓存起来。OCSP 响应本身经过了数字签名,无法伪造,所以 OCSP Stapling 技术既提高了握手效率,也不会影响安全性。

二、启用 OCSP

  如下所示,为了解决上述问题,我们会在 Nginx 配置中 SSL 段内加入 ssl_staplingssl_stapling_verify 指令。

    server {
        ......
        ssl_stapling on;
        ssl_stapling_verify on;
        ......
    }

  正常情况下,当我们运行 nginx -t 会出现如下提示。

root@blog:~# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

  但是却出现了本文开始提到的警告信息。

三、原因分析

  CloudFlare 为用户提供的源服务器证书是由 Cloudflare 签名的免费 TLS 证书,该域名证书属于泛域名证书,最长支持 15 年,主要用于源服务器和 Cloudflare 之间的流量加密。但是这个证书属于自签名证书,证书链不完整,缺少根证书。因此也就出现了本文开始提到的警告信息。

四、解决方法

1、使用如下网址下载 CloudFlare 的根证书/证书链文件,并上传到您的源 Web 服务器。请注意, CloudFlare 提供了 ECC 和 RSA 版本两个文件,具体下载哪一个参考上图,根据自己申请源服务器证书时选择的“私钥类型”来决定。

https://developers.cloudflare.com/ssl/origin-configuration/origin-ca/#cloudflare-origin-ca-root-certificate

2、参考如下配置,修改 nginx 中 SSL 的相关配置,增加 ssl_trusted_certificate 一行,指向上一步你上传到服务器上的根证书/证书链文件。

    server {
        ......
        ssl_stapling on;
        ssl_stapling_verify on;
        ssl_session_tickets off;
        ssl_trusted_certificate /etc/nginx/ssl/origin_ca_rsa_root.pem;
        ssl_certificate /etc/nginx/ssl/hicairo.com.pem;
        ssl_certificate_key /etc/nginx/ssl/hicairo.com.key;
        ......
    }

本文出处:HiFeng'Blog
本文链接:https://www.hicairo.com/post/73.html
版权声明:本博客所有文章除特别声明外,均采用CC BY-NC-SA许可协议。转载请注明出处!

通过 Jekyll 在 GitHub Pages 上搭建博客系统

2024-04-06 14:08:56

  谈到博客,可能很多小伙伴有过搭建的冲动或者经历,但是能坚持下来,不停更的却寥寥无几。我想告诉大家的是,一个博客最重要的是内容,任何人都可以写博文,但是如果写出来的博文对自己都没有多大用处,自己都懒得看的时候,可能也没有太多人愿意阅读这篇文章,这一点至关重要。如果你已经准备好搭建自己的博客了,那请你能放下手机、少刷视频,静下心来开始一点点的写作之路,同时也不要为了追求更新速度,降低博文的质量,更不要大量转载自己没有验证过别人写的博文。请不要告诉我,你自己是小白,写不出技术含量很高的博文,这一点不重要,每个人都有自己熟悉的领域,例如你擅长摄影、室内装修设计或者影视剪辑等,你完全可以将自己的心得记录下来,过了一段时间忘了的时候,也可以找出自己以前写的博文再学习一下。同样,你记录的这些知识点可能对其他人也是有用的,这才是博客存在的价值。

  早些年前在搭建博客系统时,还有一些技术门槛,你需要掌握一些专业知识,例如UI设计、编程语言、Html、CSS、Javascript、数据库、WebServer、网络安全,SEO 优化等等。这些年随着 WordPress、Hexo、Typecho、Jekyll 等免费开源系统的相继推出,搭建一个属于自己的博客系统变得越来越简单,上述的这些系统也都基本解决了程序安全性、健壮性、SEO优化等方面的问题,功能可以满足一般用户需求,你只要选择安装一个自己喜欢的模板,就可以开始博客的写作之路了。

  今天我就带领大家在 GitHub Pages 上搭建基于 Jekyll 的博客系统。为了简单化,本文省略掉了本地 Jekyll 运行环境的配置与安装,网络上有很多同类教程,有这方面需求的小伙伴在 google 自行搜索一下。

一、项目地址及演示地址

项目地址:https://github.com/hiifeng/hiifeng.github.io

演示地址:https://demo.hidoha.net

  本项目基于黄玄的项目修改,同时参考了 elmagnifico 的项目,在此首先对原作者表示感谢。目前版本主要修改的内容为增加了站点地图;切换 fontawesome-webfont 版本为 4.7.0 ,支持 QQ 、Telgram 等图标;增加返回顶部按钮;修改首页底部在手机浏览器中出现空白块的 BUG 等。

二、博客搭建

1、登录 github ,如果没有账号请提前创建一个。

https://github.com/login

1.Sign in to GitHub.webp

2、打开如下项目地址,然后点击页面右上方的“Fork”按钮。

项目地址:https://github.com/hiifeng/hiifeng.github.io

2.Fork.webp

3、如下图所示,修改仓库名为“账号名称.github.io“。例如:我的账号名是hicairo,仓库名就是 hicairo.github.io(仓库名即博客网址)。最后点击“Create Fork”按钮。

3.Create a new fork.webp

4、为当前仓库配置发布源,点击当前仓库右上角的“Settings”按钮后,再点击左侧菜单中的“Pages”按钮。

4.Settings.webp

5、如图所示,确认“Branch”选项选择的是“main”中的“/root”后点击“Save”按钮。如果“Save”按钮为灰色不能点击,先将选项框中的“main”修改为“None”点击“Save”按钮后,再次选择“main”中的“/root”后点击“Save”按钮。

5.Build and deployment.webp

6、页面提示“GitHub Pages source saved.”然后点击顶部的仓库名称,返回仓库首页。

6.GitHub Pages source saved.webp

7、查看页面右侧的部署状态,如图所示当出现“github-pages now”后,说明静态页面已经生成完毕。这时在浏览器中打开博客网址,就可以访问了。

7.Deployments.webp

三、博客配置

1、由于 github.io 域名被污染,我们可以绑定一个被 cloudflare 代理的自定义域名解决。如下图所示,新建一条 CNAME 记录,目标指向 github 为了分配的域名,同时打开代理状态开关。

8.CNAME.webp

2、同 2.4 步骤,先点击当前仓库右上角的“Settings”按钮后,再点击左侧菜单中的“Pages”按钮。然后输入 Custom domain 后,点击“Save”按钮。

9.Custom domain.webp

3、当出现“DNS check successful”时,说明域名绑定成功,这时就可以使用新的域名访问你的博客了。

10.DNS check successful.webp

4、Jekyll 是一个静态网站生成器,它使用 Ruby 编程语言编写,可以将使用标记语言编写的内容文件生成网页。下面是本项目的目录结构:

├── _includes                            # 包含文件目录
│   └── about                             # 自我介绍文件
├── _layouts                              # 布局目录
│   ├── default.html                      # 缺省页面布局文件
│   └── post.html                         # 文章页面布局文件
└── _posts                                # 已发布文章目录
│   └── 2023-04-30-Goodbye-my-youth.md    # 示例文章
├── css                                   # 样式表目录
├── fonts                                 # 字体目录
├── img                                   # 图片目录,可根据自己情况定义目录结构
├── js                                    # Javascript 文件目录
├── less                                  # Less 文件目录
├── pwa                                   # 渐进式 Web 应用配置文件目录
├── 404.html                              # 404页面模板
├── CNAME                                 # Github Page 创建的自定义域名文件,无需手动修改
├── Gemfile                               # 定义 Ruby 项目的依赖关系
├── Gruntfile.js                          # 配置 Grunt 任务运行器
├── LICENSE                               # 开源项目许可信息和使用条款
├── README.md                             # 项目的自述文件
├── Rakefile                              # Ruby 项目用于定义和管理任务的文件
├── _config.yml                           # 博客配置文件,根据情况自行修改
├── about.html                            # about 页面模板
├── archive.html                          # archive 页面模板
├── feed.xml                              # RSS 文件模板
├── index.html                            # index 页面模板
├── offline.html                          # offline 页面模板
├── sitemap.xml                           # 站点地图文件

5、参考以下提示,修改_config.yml文件,配置自己的博客。

# Site settings
title: HiFeng's Blog                  # Blog 的名字
SEOTitle: HiFeng's Blog_记录学习中的点点滴滴......# 指定 Blog 网页的描述信息
header-img: img/home-bg.jpg# Blog首页 header 调用的图片
email: [email protected]邮箱地址
description: "HiFeng's Blog_记录学习中的点点滴滴......"# 指定 Blog 网页的描述信息
keyword: "linux,debian,gentoo,ubuntu"# keyword信息,主要用途告诉搜索引擎这个 BLog 的关键词
url: "https://demo.hidoha.net" # your host, for absolute URL
baseurl: "" # for example, '/blog' if your blog hosted on 'host/blog'
# Publish posts or collection documents with a future date.
future: true
# 在这里设置 QQ、github、telegram 等账号信息
RSS: false
wechat: false
#qq_username: 10000
#weibo_username: ifeng
#zhihu_username: ifeng
github_username: hiifeng
twitter_username: HiaiFeng
facebook_username: HiaiFeng
telegram_username: HiaiFeng
#linkedin_username:  firstname-lastname-idxxxx
# Build settings
# from 2016, 'pygments' is unsupported on GitHub Pages. Use 'rouge' for highlighting instead.
highlighter: rouge
permalink: pretty
paginate: 10#每页显示几篇文章
exclude:
  [
    "less",
    "node_modules",
    "Gruntfile.js",
    "package.json",
    "README.md",
    "README.zh.md",
  ]
anchorjs: true # if you want to customize anchor. check out line:181 of `post.html`
# If you have timezone issue (e.g. #68) in China, uncomment to use this:
#timezone: CN
# Gems
# from PR#40, to support local preview for Jekyll 3.0
# make sure you have this gem installed
# `$ gem install jekyll-paginate`
plugins: [jekyll-paginate]
# Markdown settings
# replace redcarpet to kramdown,
# although redcarpet can auto highlight code, the lack of header-id make the catalog impossible, so I switch to kramdown
# document: http://jekyllrb.com/docs/configuration/#kramdown
markdown: kramdown
kramdown:
  input: GFM # use Github Flavored Markdown !important
  syntax_highlighter_opts:
    span:
      line_numbers: false
    block:
      line_numbers: true
      start_line: 1
# Disqus评论系统账号设置
disqus_username: iifeng
# Netease settings
netease_comment: false
# Analytics settings
# ba_track_id: [your track id]
# Google Analytics
# ga_track_id: "G-L0885W521V" # Format: UA-xxxxxx-xx
# ga_domain: demo.hidoha.net
# 右侧 sidebar(ABOUT ME)设置
sidebar: true # whether or not using Sidebar.
p>
# Baidu Analytics
sidebar-about-description: "好好工作 快乐生活 ... <br> Contact me "
sidebar-avatar: /img/Hiifeng.png # use absolute URL, seeing it's used in both `/` and `/about/`
# Featured Tags
featured-tags: true # whether or not using Feature-Tags
featured-condition-size: 1 # A tag will be featured if the size of it is more than this condition value
# Progressive Web Apps
chrome-tab-theme-color: "#000000"
service-worker: true
# MathJax rendering for layout:page (e.g. post preview)
page-mathjax: false
# 友情链接设置:
  [
    { title: "HiFeng's Blog", href: "http://www.hicairo.com" },
    { title: "新月的博客", href: "https://blog.a--i.eu.org" },
#    { title: "Kun Qian", href: "http://kunq.me" },
#    { title: "Sherry Woo", href: "https://sherrywoo.me" },
  ]

6、修改_config.yml文件后,然后修改 index.html、about.html、archive.html 等文件中的 description 和 header-img,这样 Blog 就替换成了你喜欢的风格。

7、_posts 目录中给出了文章的示例,在熟悉命名规则和相关语法后,删除该目录中的所有文件,然后就可以自己写博文了。

四、写到最后

  看到这里,我相信你已经可以使用 Jekyll 在 GitHub Pages 搭建博客了,同时通过看_posts 目录中给出了示例文件,可以开始发布博文。但是可能出现对于 Jekyll 配置和 markdown 的语法还是一知半解的状态,在这篇文章开始,我已经说到了,对于一个博客最重要的是内容,至于页面做到清爽即可。如果你需要了解更多有关 Jekyll 配置和 markdown 的语法可以使用如下链接查看官方文档。

https://jekyllcn.com

https://markdown.com.cn


本文出处:HiFeng'Blog
本文链接:https://www.hicairo.com/post/72.html
版权声明:本博客所有文章除特别声明外,均采用CC BY-NC-SA许可协议。转载请注明出处!

DartNode 无限流量 vps 注册申请教程

2024-03-03 16:12:43

DartNode 成立于 2023年,总部位于休斯顿技术中心的中心地带,是 Snaju® Inc. 的一个部门,在 NASA 约翰逊航天中心附近运营着一个 24/7/365 网络运营中心。DartNode 提供带宽  1 Gb/s 不限流量的 vps 套餐,其中 VPS-1 Plan 每月仅需 2 美元,对于经常看 Netflix、youtube 或需要大量下载的小伙伴,终于不用担心流量用超的问题了。

一、测试 vps 速度

经过我一个多月的试用,vps 运行基本稳定,晚高峰时速度还比较理想,我使用的是电信 200M 宽带,以下为直连的测速情况。

1.DartNode Speed Test.webp

以下为使用 hysteria2 协议的测速情况,可以跑满我的宽带。

2.SpeedTest.webp

以下是使用 Bench.sh 的检测情况,其中包含服务器硬件配置信息、 I/O 速度、与各个国家/地区的网速情况。虽然 DartNode 在其官网说明提供带宽为  1 Gb/s 不限流量套餐,但从以下的测试结果来看,并没有达到 1 Gb/s 的速度,但是我感觉 200-300 Mb/s 的速度也基本可以满足日常工作和学习的需求。

-------------------- A Bench.sh Script By Teddysun -------------------
 Version            : v2023-10-15
 Usage              : wget -qO- bench.sh | bash
----------------------------------------------------------------------
 CPU Model          : Intel(R) Xeon(R) CPU E5-2697 v2 @ 2.70GHz
 CPU Cores          : 1 @ 2699.998 MHz
 CPU Cache          : 16384 KB
 AES-NI             : ✓ Enabled
 VM-x/AMD-V         : ✗ Disabled
 Total Disk         : 10.0 GB (2.4 GB Used)
 Total Mem          : 974.7 MB (315.7 MB Used)
 System uptime      : 37 days, 21 hour 45 min
 Load average       : 0.05, 0.07, 0.02
 OS                 : CentOS Linux release 7.9.2009 (Core)
 Arch               : x86_64 (64 Bit)
 Kernel             : 6.7.1-1.el7.elrepo.x86_64
 TCP CC             : cubic
 Virtualization     : KVM
 IPv4/IPv6          : ✓ Online / ✓ Online
 Organization       : AS399646 Snaju Development
 Location           : Houston / US
 Region             : Texas
----------------------------------------------------------------------
 I/O Speed(1st run) : 85.4 MB/s
 I/O Speed(2nd run) : 71.0 MB/s
 I/O Speed(3rd run) : 81.5 MB/s
 I/O Speed(average) : 79.3 MB/s
----------------------------------------------------------------------
 Node Name        Upload Speed      Download Speed      Latency
 Speedtest.net    337.18 Mbps       619.38 Mbps         18.19 ms
 Los Angeles, US  257.40 Mbps       371.00 Mbps         37.94 ms
 Dallas, US       462.26 Mbps       374.00 Mbps         8.31 ms
 Montreal, CA     587.50 Mbps       677.16 Mbps         48.13 ms
 Paris, FR        76.74 Mbps        454.88 Mbps         113.21 ms
 Amsterdam, NL    224.56 Mbps       791.66 Mbps         116.42 ms
 Shanghai, CN     185.50 Mbps       924.59 Mbps         193.23 ms
 Hongkong, CN     187.20 Mbps       65.38 Mbps          217.23 ms
 Mumbai, IN       24.22 Mbps        233.17 Mbps         254.74 ms
 Singapore, SG    97.70 Mbps        551.87 Mbps         207.44 ms
 Tokyo, JP        76.76 Mbps        354.08 Mbps         136.26 ms
----------------------------------------------------------------------
 Finished in        : 6 min 45 sec
 Timestamp          : 2024-03-01 01:42:00 UTC
----------------------------------------------------------------------

二、账号注册

1、打开如下网址,点击屏幕右上角的“Dashboard”按钮。

https://dartnode.com/?via=ifeng

3.Register an account_1.webp

2、如图所示,点击“Join Today”。当然如果你有 Gmail 邮箱,也可以选择“Sign with in Google”。

4.Register an account_2.webp

3、如图所示,输入相关信息后,点击“Join Today”按钮。由于 DartNode 在注册过程中,不验证信息的真实性,请确认邮箱是否输入正确,在忘记密码时,邮箱是取回密码的唯一凭证。

5.Register an account_3.webp

4、这时会自动登录,跳转至如下页面,然后点击页面右上角你的用户名中的“Settings”。

6.Register an account_4.webp

5、输入个人信息后点击页面底部的“>>Save && Update”按钮。请注意,Phone Number 请输入真实的号码,Google voice 号码也可以。

7.Register an account_5.webp

三、开通 vps 套餐

1、如图所示,点击“Cloud Services”中的“Cloud VPS”按钮。

8.Create cloud vps_1.webp

2、如图所示,点击“Provision New Server”按钮,创建 VPS。

9.Provision New Server_2.webp

3、如图所示,选择适合自己的 vps 套餐,然后点击“Order Today”按钮。

10.VPS-1 Plan_3.webp

4、如图所示,填写 Hostname ,选择操作系统后,点击右下角的“Continue”按钮。

11.SERVER INFORMATION_4.webp

5、如图所示,选择 DDOS 防护设置、自动备份设置、IP 设置后,点击右下角的“Continue”按钮。

12.SERVER INFORMATION_5.webp

6、如图所示,点击“Order Now”按钮。

13.Order Now_6.webp

7、DartNode 支持多种付款方式,我们选择使用支付宝进行付款,如图所示,点击右下角的“Reload & Pay $***”按钮。

14.Complete Your Order_7.webp

8、选择“支付宝”后点击“支付”按钮。

15.Pre-Load Account_8.webp

9、这时页面跳转至支付宝收银台,使用手机扫描二维码完成支付即可。

16.Alipay_9.webp

四、管理自己的 vps

1、点击顶部菜单“Cloud Services”中的“Cloud VPS”后,你会看到你的 vps,如图所示,点击你的 vps 。

17.Cloud-compute_1.webp

2、这时,你将看到你的 vps 的相关信息,包含 IP 地址、root 用户密码等,在这个页面你可以设置反向 DNS 解析,重装操作系统等。

18.Cloud-compute_2.webp

五、DartNode 账户充值

DartNode vps 是按月进行计费的,如果您没有绑定信用卡,建议给 DartNode 充值一些费用,避免 vps 到期后忘记充值带来不必要的麻烦。

1、点击页面顶部的“Biling”按钮,然后点击页面右侧的“Reload Account Balance”按钮。

19.Reload Account Balance_1.webp

2、DartNode 支持每次最低充值 5 美元,选择充值金额后,点击“Reload With Stripe”按钮。

20.Reload With Stripe_2.webp

3、这时页面再次跳转至 Stripe 的页面,选择“支付宝”后点击“支付”按钮,按照提示完成充值即可。

21.Stripe_3.webp

六、有关 DartNode vps 的一些说明

1、DartNode 的介绍中提到,vps的出口带宽为 1 Gb/s ,但是在我的实际测试过程中,并没有达到 1 Gb/s 的速度,从本文第一章节可以看到有关测速的详细情况。目前的这个速度基本上也可以满足工作和学习的需要,我感觉性价比还是可以的。

22.DartNode vps Speed.webp

2、 DartNode vps 提供的是不限流量套餐,但是在相关描述中提到“我们不限制或计量我们服务器的带宽,您每月可以使用大量带宽,只要它符合我们的可接受使用政策。”,有关符合 DartNode 可接受的政策,我也咨询了 DartNode 的客服人员,是否会因为 vps 占用 CPU 资源过高或流量使用过多而终止服务,对方的回复是他们并没有因为CPU使用率或带宽而取消任何服务,该政策是针对严重滥用行为的包罗万象。如果 DartNode 的带宽接近容量,他们会进行设备或网络的升级。因此目前来看,我认为是可以放心使用的。

23.Unlimited Bandwidth.webp

以下为 DartNode 客服的回复截图。

24.Unlimited Bandwidth_2.webp


本文出处:HiFeng'Blog
本文链接:https://www.hicairo.com/post/71.html
版权声明:本博客所有文章除特别声明外,均采用CC BY-NC-SA许可协议。转载请注明出处!

在 Armbian 操作系统上搭建基于 Hysteria2 协议的透明代理

2024-01-31 16:16:20

  上一篇文章我们提到了如何为中兴 B860AV1.1-T 电视盒子刷入 Armbian 操作系统,相信看到这篇文章的新老朋友已经拥有了一块基于 Armbian 操作系统的开发板或电视盒子,这篇文章将带领大家一起在 Armbian 操作系统中搭建 Hysteria2 协议的透明代理。

  谈到在软路由上实现透明代理功能,很多朋友首先想到的是 OpenWrt 系统。的确,在 OpenWrt 上实现透明代理功能,只需要轻点几下鼠标,简单配置一下即可完成。OpenWrt 是一个基于 Linux 内核的开源系统,有大量的插件,软件生态丰富。很遗憾的一件事情,我至今都没使用过 OpenWrt 系统,虽然网络上也有很多博主在分享 Openwrt 的教程,但是没有系统性的教程,加上 OpenWrt 拥有大量的插件,每个插件具体可以实现什么功能、应该如何配置,把这些插件全部弄明白,需要花费太多的精力。因此,我更倾向于在 Linux 操作系统上实现透明代理的功能。虽然实现起来显得有点复杂,需要掌握好几个知识点,大量的命令看起来也有些晦涩难懂。但是我仍然建议大家可以耐心的看完,遇到不懂的命令,可以借助 ChatGPT 等工具查明白每条命令的含义,从原理上搞清楚数据包的流向,以及使用 iptables 是如果处理的。我也尽可能的注释清楚命令的含义,在明白原理后,今后不管使用 OpenWRT 或 routeOS 遇到相关问题,也会迎刃而解。

一、在 Armbian 操作系统中,解决不能使用鼠标在 vi 中实现粘贴功能

cat > ~/.vimrc <<EOF
set mouse=c
syntax on
EOF

说明:

第一行:设置成命令行模式,设置完成后代码高亮会消失;

第二行:设置代码高亮。

二、修改更新源为清华源

  Armbian 操作系统默认使用的官方更新源(deb.debian.org)服务器在海外,连接速度和国内镜像源比起来较慢,建议修改为清华大学提供的镜像源。

1、首先使 apt 支持 https 传输协议,如果只用 http 传输协议可忽略这一步。

apt install apt-transport-https ca-certificates

2、修改更新源

mv /etc/apt/sources.list /etc/apt/sources.list.bak
cat > /etc/apt/sources.list <<EOF
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-free
#deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-updates main contrib non-free
#deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-updates main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-backports main contrib non-free
#deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-backports main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian-security/ buster/updates main contrib non-free
#deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security/ buster/updates main contrib non-free
EOF

mv /etc/apt/sources.list.d/armbian.list /etc/apt/sources.list.d/armbian.list.bak
cat > /etc/apt/sources.list.d/armbian.list <<EOF
deb https://mirrors.tuna.tsinghua.edu.cn/armbian buster main buster-utils buster-desktop
EOF

3、更新本机已安装的软件包

apt update
apt upgrade -y

4、在更新过程中可能会出现的错误及解决办法

. 如出现如下错误,先使用 http 源,然后再执行 apt upgrade 更新 ca-certificates 即可解决,最后可以将源修改为 https 源。

Err:8 https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports focal Release
Certificate verification failed: The certificate is NOT trusted. The certificate chain uses expired certificate. Could not handshake: Error in the certificate verification. [IP: 101.6.15.130 443]
Err:9 https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports focal-security Release
Certificate verification failed: The certificate is NOT trusted. The certificate chain uses expired certificate. Could not handshake: Error in the certificate verification. [IP: 101.6.15.130 443]
Err:10 https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports focal-updates Release
Certificate verification failed: The certificate is NOT trusted. The certificate chain uses expired certificate. Could not handshake: Error in the certificate verification. [IP: 101.6.15.130 443]
Err:11 https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports focal-backports Release
Certificate verification failed: The certificate is NOT trusted. The certificate chain uses expired certificate. Could not handshake: Error in the certificate verification. [IP: 101.6.15.130 443]
Err:12 https://mirrors.tuna.tsinghua.edu.cn/mongodb/apt/ubuntu focal/mongodb-org/4.4 Release
Certificate verification failed: The certificate is NOT trusted. The certificate chain uses expired certificate. Could not handshake: Error in the certificate verification. [IP: 101.6.15.130 443]

. 如果出现没有公匙,NO_PUBKEY 错误。

Reading package lists... Done
W: GPG error: https://mirrors.tuna.tsinghua.edu.cn/debian buster-backports InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 0E98404D386FA1D9 NO_PUBKEY 6ED0E7B82643E131
E: The repository 'https://mirrors.tuna.tsinghua.edu.cn/debian buster-backports InRelease' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.

首先执行

# 查看你的错误输出,将下面命令中的 E77FC0EC34276B4B 替换为你实际的 recv-keys 值。
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 0E98404D386FA1D9
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 6ED0E7B82643E131

然后再次执行更新即可

apt update
apt upgrade -y

三、修改网卡地址

  参考以下示例,为旁路由分配同网段的静态 IP 地址,hwaddress 参数用于固定 Mac 地址,Mac 地址可以在电视盒子背后的标签上找到,或者使用 ifconfig 命令查询。修改完成后使用 reboot 命令重启电视盒子,然后使用新的 IP 地址连接电视盒子。

vi /etc/network/interfaces

source /etc/network/interfaces.d/*
auto lo
iface lo inet loopback
auto eth0
allow-hotplug eth0
iface eth0 inet static
    hwaddress 88:88:88:88:88:88
    address 192.168.0.2
netmask 255.255.255.0
gateway 192.168.0.1
iface eth0 inet6 auto

四、关闭 NetworkManager

systemctl stop NetworkManager
systemctl disable NetworkManager

五、修改时区

1、查询系统时间和时区

# 可以使用 timedatectl 或 date -R 命令。
timedatectl
date -R

2、修改时区

#使用 tzselect 命令,然后选择 asia china beijing yes。
tzselect
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

3、再次查询系统时间和时区

# 可以使用 timedatectl 或 date -R 命令。
timedatectl
date -R

六、开启 IP 转发

1、在 /etc/sysctl.conf 的末尾添加以下内容(其中 eth0 修改为你网络接口的名称)。

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.disable_ipv6 = 0" >> /etc/sysctl.conf
echo "net.ipv6.conf.default.disable_ipv6 = 0" >> /etc/sysctl.conf
echo "net.ipv6.conf.lo.disable_ipv6 = 0" >> /etc/sysctl.conf
echo "net.ipv6.conf.default.use_tempaddr = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.forwarding = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.default.forwarding = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.accept_ra = 2" >> /etc/sysctl.conf
echo "net.ipv6.conf.default.accept_ra = 2" >> /etc/sysctl.conf
echo "net.ipv6.conf.eth0.accept_ra = 2" >> /etc/sysctl.conf

2、应用配置

sysctl -p

七、IP 分流

  www.ipdeny.com 为我们提供了各个国家或地区的 ip 地址块,而且更新很及时。通过该项目提供的 ip 块列表,我们可以生成出 ipset 格式的 ip 集合,实现目标地址为国内的直连,目标地址为国外的走代理。

#安装 ipset
apt install ipset

# 创建国内的 IPv4 和 IPv6 地址集合
ipset -N cnipv4 hash:net
ipset -N cnipv6 hash:net family inet6

# 下载国内的 IPv4 和 IPv6 地址文件
wget https://www.ipdeny.com/ipv6/ipaddresses/aggregated/cn-aggregated.zone -P /tmp
wget https://www.ipdeny.com/ipblocks/data/countries/cn.zone -P /tmp

# 将内的 IPv4 和 IPv6 地址文件的内容导入 ipset 集合
for i in $(cat /tmp/cn.zone ); do ipset -A cnipv4 $i; done
for i in $(cat /tmp/cn-aggregated.zone ); do ipset -A cnipv6 $i; done
mkdir /etc/proxy

# 将 IPv4 和 IPv6 地址集合保存为 ipset 格式
ipset save cnipv4 > /etc/proxy/cnipv4.conf
ipset save cnipv6 > /etc/proxy/cnipv6.conf

八、加载 TProxy 模块

1、查询操作系统是否安装了 Tproxy 模块

root@arm-64:~# grep -i tproxy /boot/config-$(uname -r)
CONFIG_NFT_TPROXY=m
CONFIG_NETFILTER_XT_TARGET_TPROXY=m
CONFIG_NF_TPROXY_IPV4=m
CONFIG_NF_TPROXY_IPV6=m

2、加载 TProxy 模块

echo "nf_tables" >> /etc/modules
echo "nf_tables_ipv6" >> /etc/modules
echo "nf_tables_ipv4" >> /etc/modules
echo "xt_TPROXY" >> /etc/modules

九、修改系统的DNS服务器地址

echo "nameserver 1.1.1.1" > /etc/resolv.conf
echo "nameserver 1.0.0.1" >> /etc/resolv.conf
echo "nameserver 2606:4700:4700::1111" >> /etc/resolv.conf
echo "nameserver 2606:4700:4700::1001" >> /etc/resolv.conf

十、安装 hysteria2 客户端

  hysteria2 的 v 2.2.3 及以下版本 ,有一个 Bug 尚未修复。具体表现为使用端口跳跃、同时使用了混淆,udpForwarding 转发失效。 例如转发 udp 数据包到 1.1.1.1 查询域名解析记录,会出现卡死的情况。如使用 v 2.2.3 及以下版本时,请关闭混淆后使用。建议服务器端及客户端均使用最新的 v 2.2.4 版本。 

1、服务端配置示例,有关服务端的安装可参考《垃圾 VPS 线路的救星 - Hysteria1 节点纯手动安装教程》。

{
        "listen": ":8550",
        "tls": {
        "cert": "/etc/hysteria/example.hicairo.com.pem",
        "key": "/etc/hysteria/example.hicairo.com.hr.key"
        },
        "auth":{
        "type": "password",
        "password": "12345678"
        },
        "bandwidth":{
        "up": "1000 mbps",
        "down": "1000 mbps"
        },
        "ignoreClientBandwidth": false
}

2、在 Armbian 上安装 hysteria2 客户端

# 建议尽量不要使用 root 用户运行服务,我们创建一个名为 hysteria 的用户用于运行 hysteria 。 
groupadd --system hysteria
useradd --system \
    --gid hysteria \
    --create-home \
    --home-dir /var/lib/hysteria \
    --shell /usr/sbin/nologin \
    --comment "hysteria server" \
    hysteria
    
# 下载 hysteria 可执行文件并修改文件属性
wget -O /usr/bin/hysteria https://mirror.ghproxy.com/https://github.com/apernet/hysteria/releases/download/app%2Fv2.2.4/hysteria-linux-arm64
chmod a+x /usr/bin/hysteria

# 创建配置文件目录
mkdir /etc/hysteria

# 客户端配置文件示例,其中 tcpTProxy 和 udpTProxy 定义了 Tproxy 监听的端口。
cat > /etc/hysteria/config.json <<EOF
{
  "server": "example.hicairo.com:8550,40000-45000",
  "auth":"12345678",
   "transport": {
    "type": "udp",
    "udp": {
      "hopInterval": "30s"
    }
  },
  "bandwidth": {
    "up": "30 mbps",
    "down": "100 mbps"
  },
  "fastOpen": true,
  "lazy": true,
  "tcpTProxy": {
    "listen": ":2500"
  },
    "udpTProxy": {
    "listen": ":2500"
  }
}
EOF

# 将 Hysteria 作为守护进程运行
# 在 /etc/systemd/system/ 目录创建 hysteria.service
cat > /etc/systemd/system/hysteria.service <<EOF
[Unit]
Description=Hysteria client Service (config.json)
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/hysteria -c /etc/hysteria/config.json client
WorkingDirectory=/etc/hysteria
User=hysteria
Group=hysteria
Environment=HYSTERIA_LOG_LEVEL=info
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW
NoNewPrivileges=true
[Install]
WantedBy=multi-user.target
EOF

# 启动 Hysteria 服务端
chown -R hysteria:hysteria /etc/hysteria/
systemctl daemon-reload
systemctl enable hysteria
systemctl start hysteria

#查看当前状态
systemctl status hysteria

#使用更改的配置文件重新加载 hysteria
systemctl reload hysteria

十一、使用 dnsmasq + gfwlist 进行域名解析分流

  对于已经被污染的域名,我们需要使用国外的 dns 服务器解析出正确的 ip 。gfwlist 项目为我们提供了被污染的域名列表,同时 dnsmasq 支持设置某个域名使用那个 dns 服务器进行解析,这样就完美的解决了该问题。当然可能有小伙伴会提出,所有的域名全部通过代理走国外的 dns 服务器进行解析,这样该问题也不就解决了吗?是的,这样的确解决了该问题。但是国外的 dns 的服务器延迟往往很高,会造成打开网页速度慢等情况,这也就是在本地使用 dnsmasq 架设小型 dns 服务器的原因,另外 dnsmasq 支持 cache 功能,通过 dnsmasq 解析过的域名,会缓存在本地 dns 服务器里,在 ttl 有效期内,当客户端再次发起对该域名的解析请求时,dnsmasq 会直接将该域名的 ip 发送给客户端,从而提高域名的解析效率。

# 安装 dnsmasq
apt install dnsmasq

# 修改dnsmasq.conf文件
echo "port=53" >> /etc/dnsmasq.conf
echo "cache-size=10240" >> /etc/dnsmasq.conf
# 以下两行是 dnsmasq 的日志功能,默认已经注释,如需要调试,去掉前面的 #
echo "#log-queries" >> /etc/dnsmasq.conf
echo "#log-facility=/var/log/dnsmasq.log" >> /etc/dnsmasq.conf

#创建上游dns服务器地址文件,建议使用本地运营商提供的dns地址,这样速度最快。
cat > /etc/dnsmasq.d/upstream.conf <<EOF
server=223.5.5.5
server=223.6.6.6
server=2400:3200::1
server=2400:3200:baba::1
EOF

# 使用 gfwlist 生成黑名单域名列表
wget -O /usr/bin/gfwlist2dnsmasq.sh https://mirror.ghproxy.com/https://raw.githubusercontent.com/hiifeng/gfwlist2dnsmasq/master/gfwlist2dnsmasq.sh
chmod a+x /usr/bin/gfwlist2dnsmasq.sh
sh /usr/bin/gfwlist2dnsmasq.sh -d 1.1.1.1 -p 53 -o /etc/dnsmasq.d/dnsmasq_gfwlist.conf

# 重启 dnsmasq
systemctl restart dnsmasq

十二、配置透明代理并设置分流

1、常见错误的处理方法

# 如果出现如下错误,原因为 Debian buster 使用 nftables 而不是 iptables,处理方法是调用 update-alternatives 强制 Debian 用 iptables 而不是 nftables。
root@aml:/usr/sbin# iptables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-ports 53
iptables v1.8.2 (nf_tables):  CHAIN_ADD failed (No such file or directory): chain PREROUTING

# 执行如下两行命令
sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy

2、配置 ipv4 透明代理并设置分流

# IPV4 开始
# 劫持客户端的 DNS
iptables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-ports 53
iptables -t nat -A PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports 53
# === 代理客户端流量 - 开始 === 
iptables -t mangle -N HYSTERIA
# 跳过已经由 TProxy 接管的流量,目标端口为53的数据包不进行标记
iptables -t mangle -A HYSTERIA -p tcp -m socket --transparent ! --dport 53 -j MARK --set-mark 0x1
iptables -t mangle -A HYSTERIA -p udp -m socket --transparent ! --dport 53 -j MARK --set-mark 0x1
iptables -t mangle -A HYSTERIA -m socket -j RETURN
# 绕过私有和特殊 IPv4 地址 
iptables -t mangle -A HYSTERIA -d 0.0.0.0/8 -j RETURN
iptables -t mangle -A HYSTERIA -d 10.0.0.0/8 -j RETURN
iptables -t mangle -A HYSTERIA -d 127.0.0.0/8 -j RETURN
iptables -t mangle -A HYSTERIA -d 169.254.0.0/16 -j RETURN
iptables -t mangle -A HYSTERIA -d 172.16.0.0/12 -j RETURN
iptables -t mangle -A HYSTERIA -d 192.168.0.0/16 -j RETURN
iptables -t mangle -A HYSTERIA -d 224.0.0.0/4 -j RETURN
iptables -t mangle -A HYSTERIA -d 240.0.0.0/4 -j RETURN
# 目标地址为中国的IPv4地址直连
iptables -t mangle -A HYSTERIA -m set --match-set cnipv4 dst -j RETURN
# 重定向流量到 TProxy 端口
iptables -t mangle -A HYSTERIA -p tcp -j TPROXY --on-port 2500 --on-ip 127.0.0.1 --tproxy-mark 0x1
iptables -t mangle -A HYSTERIA -p udp -j TPROXY --on-port 2500 --on-ip 127.0.0.1 --tproxy-mark 0x1 
# 启用上述规则
iptables -t mangle -A PREROUTING -j HYSTERIA
# === 代理客户端流量 - 结束 === 
# === 代理本机流量 - 开始 === 
iptables -t mangle -N HYSTERIA_MARK
# 通过匹配用户来避免环路
iptables -t mangle -A HYSTERIA_MARK -m owner --uid-owner hysteria -j RETURN
# 绕过局域网和特殊 IPv4 地址
iptables -t mangle -A HYSTERIA_MARK -d 0.0.0.0/8 -j RETURN
iptables -t mangle -A HYSTERIA_MARK -d 10.0.0.0/8 -j RETURN
iptables -t mangle -A HYSTERIA_MARK -d 127.0.0.0/8 -j RETURN
iptables -t mangle -A HYSTERIA_MARK -d 169.254.0.0/16 -j RETURN
iptables -t mangle -A HYSTERIA_MARK -d 172.16.0.0/12 -j RETURN
iptables -t mangle -A HYSTERIA_MARK -d 192.168.0.0/16 -j RETURN
iptables -t mangle -A HYSTERIA_MARK -d 224.0.0.0/4 -j RETURN
iptables -t mangle -A HYSTERIA_MARK -d 240.0.0.0/4 -j RETURN
# 目标地址为中国的IPv4地址直连
iptables -t mangle -A HYSTERIA_MARK -m set --match-set cnipv4 dst -j RETURN
# 重路由 OUTPUT 链流量到 PREROUTING 链
iptables -t mangle -A HYSTERIA_MARK -p tcp -j MARK --set-mark 0x1
iptables -t mangle -A HYSTERIA_MARK -p udp -j MARK --set-mark 0x1
# 启用上述规则
iptables -t mangle -A OUTPUT -j HYSTERIA_MARK
# === 代理本机流量 - 结束 ===
# IPV4 结束

3、配置 ipv6 透明代理并设置分流

# IPV6 开始
# 劫持客户端的 DNS
ip6tables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-ports 53
ip6tables -t nat -A PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports 53
# === 代理客户端流量 - 开始 === 
ip6tables -t mangle -N HYSTERIA
# 跳过已经由 TProxy 接管的流量,目标端口为53的数据包不进行标记
ip6tables -t mangle -A HYSTERIA -p tcp -m socket --transparent ! --dport 53 -j MARK --set-mark 0x1
ip6tables -t mangle -A HYSTERIA -p udp -m socket --transparent ! --dport 53 -j MARK --set-mark 0x1
ip6tables -t mangle -A HYSTERIA -m socket -j RETURN
# 仅对公网 IPv6 启用代理 
ip6tables -t mangle -A HYSTERIA ! -d 2000::/3 -j RETURN
# 目标地址为中国的IPv6地址直连
ip6tables -t mangle -A HYSTERIA -m set --match-set cnipv6 dst -j RETURN
# 重定向流量到 TProxy 端口
ip6tables -t mangle -A HYSTERIA -p tcp -j TPROXY --on-port 2500 --on-ip ::1 --tproxy-mark 0x1
ip6tables -t mangle -A HYSTERIA -p udp -j TPROXY --on-port 2500 --on-ip ::1 --tproxy-mark 0x1 
# 启用上述规则
ip6tables -t mangle -A PREROUTING -j HYSTERIA
# === 代理客户端流量 - 结束 === 
# === 代理本机流量 - 开始 === 
ip6tables -t mangle -N HYSTERIA_MARK
# 通过匹配用户来避免环路
ip6tables -t mangle -A HYSTERIA_MARK -m owner --uid-owner hysteria -j RETURN
# 仅对公网 IPv6 启用代理
ip6tables -t mangle -A HYSTERIA_MARK ! -d 2000::/3 -j RETURN
# 目标地址为中国的IPv6地址直连
ip6tables -t mangle -A HYSTERIA_MARK -m set --match-set cnipv6 dst -j RETURN
# 重路由 OUTPUT 链流量到 PREROUTING 链
ip6tables -t mangle -A HYSTERIA_MARK -p tcp -j MARK --set-mark 0x1
ip6tables -t mangle -A HYSTERIA_MARK -p udp -j MARK --set-mark 0x1
# 启用上述规则
ip6tables -t mangle -A OUTPUT -j HYSTERIA_MARK
# === 代理本机流量 - 结束 ===
# IPV6 结束

4、设置开机启动透明代理

# 保存 iptable 规则
iptables-save > /etc/proxy/rules.v4
ip6tables-save > /etc/proxy/rules.v6

# 设置透明代理启动脚本
cat > /etc/proxy/start_proxy.sh <<EOF
#!/bin/bash
# Create By ifeng
# Web Site:https://www.hicairo.com
# Telegram:https://t.me/HiaiFeng
ipset restore < /etc/proxy/cnipv4.conf
ipset restore < /etc/proxy/cnipv6.conf
ip rule add fwmark 0x1 lookup 100
ip route add local default dev lo table 100
ip -6 rule add fwmark 0x1 lookup 100
ip -6 route add local default dev lo table 100
iptables-restore /etc/proxy/rules.v4
ip6tables-restore /etc/proxy/rules.v6
EOF
chmod a+x /etc/proxy/start_proxy.sh

# 设置关闭透明代理脚本
cat > /etc/proxy/stop_proxy.sh <<EOF
#!/bin/bash
# Create By ifeng
# Web Site:https://www.hicairo.com
# Telegram:https://t.me/HiaiFeng
ip rule del fwmark 0x1 lookup 100
ip route del local default dev lo table 100
ip -6 rule del fwmark 0x1 lookup 100
ip -6 route del local default dev lo table 100
iptables -t mangle -F
ip6tables -t mangle -F
sleep 5
ipset destroy cnipv4
ipset destroy cnipv6
EOF
chmod a+x /etc/proxy/stop_proxy.sh

# 通过 systemctl 启动透明代理,设置启动文件
cat > /etc/systemd/system/proxy.service <<EOF
[Unit]
Description=Tproxy rule
After=network.target
Wants=network.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/etc/proxy/start_proxy.sh
ExecStop=/etc/proxy/stop_proxy.sh
[Install]
WantedBy=multi-user.target
EOF

# 启动透明代理
systemctl daemon-reload
systemctl enable proxy
systemctl start proxy

# 查看当前状态
systemctl status proxy

十三、创建定时任务

  gfwlist 项目提供的被污染域名列表和 www.ipdeny.com 提供的 ip 地址块会随时进行更新,我们使用 crontab 创建一个定时任务,可以定时抓取最新的域名列表和 ip 地址块。

1、创建更新脚本

echo -e '#!/bin/bash
# Create By ifeng
# Web Site:https://www.hicairo.com
# Telegram:https://t.me/HiaiFeng\n
export PATH=/bin:/sbin:/usr/bin:/usr/sbin\n
sh /usr/bin/gfwlist2dnsmasq.sh -d 1.1.1.1 -p 53 -o /etc/dnsmasq.d/dnsmasq_gfwlist.conf
systemctl restart dnsmasq\n
rm /tmp/cn*\n
wget -q https://www.ipdeny.com/ipv6/ipaddresses/aggregated/cn-aggregated.zone -P /tmp
wget -q https://www.ipdeny.com/ipblocks/data/countries/cn.zone -P /tmp\n
ipset flush cnipv4
ipset flush cnipv6\n
for i in $(cat /tmp/cn.zone ); do ipset -A cnipv4 $i; done
for i in $(cat /tmp/cn-aggregated.zone ); do ipset -A cnipv6 $i; done\n
ipset save cnipv4 > /etc/proxy/cnipv4.conf
ipset save cnipv6 > /etc/proxy/cnipv6.conf' > /etc/proxy/crontab.sh

chmod a+x /etc/proxy/crontab.sh

2、设置定时任务

以下示例给出了两条规则,任选其一即可,你也可以参考 crontab 语法,自定义更新频率。

# 每天 3:00 执行定时更新任务
echo "0 3 * * * /bin/bash /etc/proxy/crontab.sh" | crontab -

# 每周星期天 3:00 执行定时更新任务
echo "0 3 * * 0 /bin/bash /etc/proxy/crontab.sh" | crontab -

十四、性能优化

  hysteria 官方建议我们调整 Linux 系统的缓冲区大小来提供性能。

# 查询缓冲区大小
root@arm-64:~# sysctl net.core.rmem_max
net.core.rmem_max = 212992
root@arm-64:~# sysctl net.core.wmem_max
net.core.wmem_max = 212992

# 默认的缓冲区只有208KB,将发送、接收两个缓冲区都设置为 16 MB。
echo "net.core.rmem_max=16777216" >> /etc/sysctl.conf
echo "net.core.wmem_max=16777216" >> /etc/sysctl.conf

# 应用配置
sysctl -p

十五、实现原理的简单介绍

  到这一步透明代理的功能就已经实现了,当把局域网中其他客户端的 dns 设置为公网中的任意 dns 服务器,同时将网关指向这台旁路由,就可以科学上网了。但是有些小伙伴可能还是有点懵,不知道数据包在旁路由中是如果进行处理的,下面我就根据自己的理解简单介绍以下,如有不对之处,请通过 telegram (https://t.me/HiaiFeng)告诉我,谢谢

1、ip 分流

  ip 分流应该比较好理解,使用了 www.ipdeny.com 提供的大陆地区的 ip 地址块,然后在 iptables 规则中进行判断,如果数据包中目标地址为大陆地区的 ip ,直接 RETURN ,使其不走代理。

2、域名解析劫持

  域名解析服务器默认监听的端口为 53 ,如果发现数据包的目标端口为 53 ,则重定向到本地的 53 端口。本地运行的 dnsmasq 服务监听了 53号端口,这样不管局域网内客户端设置了公网上的那个 dns 服务器,都会劫持到 dnsmasq 服务进行解析。

  同时,我再解释一下在处理局域网其他主机传入的数据包时,目标端口为 53 的数据包为什么不能标记。因为我们要使用 dnsmasq 进行域名解析分流,有 0x1 标记的数据包会被重定向到本地的透明代理服务,该服务(hysteria TProxy)监听在本地的2500端口上,这样该数据包就走代理服务出去了。

# 跳过已经由 TProxy 接管的流量,目标端口为53的数据包不进行标记
iptables -t mangle -A HYSTERIA -p tcp -m socket --transparent ! --dport 53 -j MARK --set-mark 0x1
iptables -t mangle -A HYSTERIA -p udp -m socket --transparent ! --dport 53 -j MARK --set-mark 0x1

局域网内域名解析的数据包流向如下:

局域网内域名解析的数据包 -> mangle表  -> nat表

3、域名解析分流

  gfwlist 项目提供了受污染的域名列表,同时 dnsmasq 支持针对不同的域名,使用不同的 dns 服务器(上游 dns 服务器)进行解析。举一个简单的例子,www.google.com 这个域名包含在 gfwlist 黑名单中,当客户端发起对该域名解析请求时, dnsmasq 会通过设置的 1.1.1.1 进行解析;www.sohu.com 这个域名没有在 gfwlist 黑名单中,当客户端发起对该域名解析请求时, dnsmasq 会通过 /etc/dnsmasq.d/upstream.conf 文件中设置的 dns 服务器进行解析。 同时 dnsmasq 支持 cache 功能,通过 dnsmasq 解析过的域名,会缓存在本地 dns 服务器里,在 ttl 有效期内,当客户端再次发起对该域名的解析请求时,dnsmasq 会直接将该域名的 ip 发送给客户端。从而提高域名的解析效率。

4、iptable 数据包流向

  iptable 其实并不复杂,但是要搞明白,就需要从最基本的三个要素讲起,iptables 规则的三个要素是表(table)、链(chain)和规则(rule)。另外,很多小伙伴一上手就直接写 iptable 规则,或者看到别人写的规则进行简单的复制粘贴,也搞不清楚为什么要那样写,这样出现问题的时候,没办法自己进行排查。所以我的建议是,有关 iptable 尽可能的从最基础的基本概念学起,把大学还给老师的内容,再一点点的学回来。虽然这些最基本的概念很枯燥乏味,但是是必须要了解的。下面我尽量简单的讲一下在透明代理中的数据包流向问题。

下图描述了 iptables 的 5 张表和主要功能,其中常用的三张主表为 filter、nat 和 mangle 表。

1.iptables表.webp下图描述了 iptables 中的 3 张主表可以使用 5 个链中的那几个链。

2、iptable链.webp下图描述了 iptables 规则的写法及常用动作。有关 iptables 详细的用法可以在 archwiki 上查询。

3、iptable规则.webp下图描述了数据包经过 iptable各个表/链的先后次序。

4、数据包流向图.webp

当一个数据包从某个 interface(网络接口) 进来时,会以这张图所示的顺序经过各个链。

图中第一个 Routing decision 取决于包的目的地是否是本机。如果是,则进入 INPUT 链 ,否则进入 FORWARD 链。

可以在链里写入-A(ppend) / -I(nsert) 规则来对包进行操作。规则会被逐个遍历,方式如下图。

5、iptable规则顺序.webp

规则里可以写匹配规则来实现包的过滤,如 -s|-d <IP range> 匹配 source/dest ip-p <protocol> 匹配协议等。用来反匹配。

-j TARGET 来指定要对匹配到的包进行的操作。

内建的 TARGET ACCEPT(停止遍历当前表的所有规则,进入下一个表的链),DROP(直接丢掉)和 RETURN(停止遍历当前链的规则,返回调用当前链的上一级链,继续遍历)等,具体见 man iptables

有若干 extension 可以使用,见 man iptables-extensions。也可以将自定义的链作为 TARGET

-j LOG --log-prefix "netfilter "很适合用来输出日志帮助调试。日志可以用 dmesg -S | grep netfilter 来查看。

  以上是有关 iptables 的一些基本概念。另外细心的小伙伴应该也发现了,上述iptable规则中,分为了两大块,一块是针对 ipv4 数据包的处理,使用的是 iptables ,另一块是针对 ipv6 数据包的处理,使用的是 ip6tables。同时每大块又分为了两小块,一块是针对局域网内传入的数据包进行处理,另一块是针对本机产生的流量进行处理。

我们参考“数据包经过 iptable各个表/链的先后次序”那张图片,思考几个问题。

① 15.2 中提到的域名解析劫持,如果对目标端口为 53 的数据包进行了标记,那这个数据包将重定向到本地的 2500 端口,被本地运行的 TProxy 服务接管了,就不会经过 nat 表中的 PREROUTING 链进行处理,从而无法实现域名解析劫持。

iptables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-ports 53
iptables -t nat -A PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports 53

有关 ip 分流我们使用了如下规则:

# 目标地址为中国的IPv4地址直连
iptables -t mangle -A HYSTERIA -m set --match-set cnipv4 dst -j RETURN

  我们来思考一下数据包流向,首先一个目的地址 ip 为大陆的数据包传入,首先进入 mangle 表,mangle 的 PREROUTING 链有如下一条规则。这时该数据包会进入 mangle 表中名称为 HYSTERIA 的自定义链中进行规则匹配,上面的规则就匹配到了,动作是 RETURN ,RETURN 的含义是停止遍历当前链的规则,返回调用当前链的上一级链,继续遍历。意味着该数据包返回到调用当前链的上一级链(mangle 表的 PREROUTING 链)继续遍历。结果mangle 的 PREROUTING 链只有如下一条规则,并且已经遍历过了,该数据包就会查找 mangle 表的其他链是否有规则需要遍历,结果发现没有,这样就进入 nat 表,一步步的按照设定的 iptable 规则和路由表流出了。

iptables -t mangle -A PREROUTING -j HYSTERIA

  通过以上示例,我相信大家针对 iptables 这个知识点,脑子里有一个大致的概念,当然详细的规则和用法需要参考官方的文档。同时针对不同的软路由,例如 routeOS 、OpenWRT对于数据包过滤、数据包的重定向原理都是一样的,搞明白基本概念和原理,在遇到故障时,也可以轻松排除,这也是本文真正的目的。

参考文献:

https://wiki.archlinux.org/title/iptables#Basic_concepts
https://manpages.debian.org/unstable/manpages-zh/iptables.8.zh_CN.html
https://strugglers.net/~andy/blog/2011/09/04/linux-ipv6-router-advertisements-and-forwarding/
https://fishbubble.foxb612.com/post/iptables-tproxy-v2ray.html
https://v2.hysteria.network/zh/docs/advanced/TPROXY/


本文出处:HiFeng'Blog
本文链接:https://www.hicairo.com/post/70.html
版权声明:本博客所有文章除特别声明外,均采用CC BY-NC-SA许可协议。转载请注明出处!

中兴 B860AV1.1-T 电视盒子刷 Armbian 操作系统

2024-01-26 19:11:38

  前段时间在网上摸鱼,发现斐讯 N1 盒子在刷入 Armbian 操作系统后可以充当软路由使用,立刻就产生了浓厚的兴趣。于是在海鲜市场查了一下,一块斐讯 N1 盒子最高卖到了 260 左右,炒作的简直太离谱了。同为晶晨 CPU 的其他电视盒子能否也可以刷入 Armbian 操作系统呢?查资料,然后通过自己的实践,结论是可行的。中兴 B860 V1.1-T 、中兴 B860AV2.1、魔百盒 CM101H 等使用晶晨 S905L 或 S905X CPU 的盒子均可以正常刷入 Armbian 操作系统。这几款盒子当时运营商送的很多,很容易找到,另外中兴 B860 V1.1-T 在海鲜市场上最便宜 20-30 就可以买一块,这也许是全网最便宜的软路由解决方案了。

一、中兴 B860AV1.1-T 基于 Armbian 操作系统软路由解决方案的优缺点

1、这几款盒子很容易找到,价格也很便宜。

2、低功耗。这几款盒子的功率都很低,24小时不间断运行,每个月也用不了多少电费。

3、这几款盒子均为百兆 LAN 口,在作为软路由使用时,带宽会被限制在百兆以内。如果你不是完美主义者,在家庭网络环境下作为科学上网旁路由使用,百兆速度也完全够用了。

二、还有哪些盒子可以刷 Armbian 操作系统

  下述项目针对 Amlogic(晶晨) CPU 的开发板及电视盒子做了罗列,你可以通过以下网址查询你的电视盒子是否可以刷入 Armbian ,同时也可以在该项目中下载相关的 Armbian 映像。

https://github.com/ophub/amlogic-s9xxx-armbian/blob/main/README.cn.md

三、需要准备的工具及软件

1、中兴 B860AV1.1-T 电视盒子一块。

2、一条 USB 双公头刷机线,没有的可以找 2 个没用的 USB 设备,剪断后接起来。

3、HDMI 接口的晶晨短接神器,价格很便宜,在海鲜市场一块也就不到 10 元钱,关键是很方便,在刷机的过程中,插到盒子的 HDMI 接口即可,不用拆电视盒子进行短接了。当然如果你动手能力很强,也可以选择拆机后使用镊子等工具进行短接。

1.晶晨刷机短接神器.webp

4、多准备几个不同品牌的 U 盘或 micro SD 卡,建议 USB 2.0 8G以上容量。在刷机成功后,尝试使用 U 盘引导进入 Armbian 操作系统时,可能会出现进入了 Recovery 模式,无法正常进入 Armbian 操作系统的情况。分析原因应该是 USB 口供电不足引起的,建议更换一个 U 盘进行尝试。我使用 Lexar SUB 2.0 8G 的 U 盘和 KingOK 16G 的 micro SD 卡均可以正常引导进入 Armbian 操作系统。

5、有 HDMI 接口的显示器一台,也可以使用家里的电视机。当然也需要 HDMI 线一条。

6、电脑一台,建议 Windows 7 64位旗舰版。

7、USB 接口的键盘一个。

8、使用到的固件和相关软件:

https://drive.google.com/drive/u/1/folders/11GwfUoTW-Rz8qu78GIKJILhCIA7kmNWX

1. 201908-ZTE-b860aV2.1_1.1T-android4.42-root-qlzy.rar		#Android 4.4.2 版本固件,root,当贝桌面,有WIFi驱动,不能引导进入Armbian。
2. 20191218-Q7-4.4.2-root-twrp-Milton.rar					#Android 4.4.2 版本固件,root,当贝桌面,无WiFi驱动,可引导进入Armbian。
3. 20191218-R3300L-Q7-6.0-root-twrp-Milton.rar				#Android 6.0.1 版本固件,root,Simple TV Launcher 桌面,无WiFi驱动,可引导进入Armbian。
4. 20191219-R3300L-Q7-6.0-root-twrp-Milton.rar				#Android 6.0.1 版本固件,root,MBox Launcher 桌面,无WiFi驱动,可引导进入Armbian。
5. Armbian_20.10_Arm-64_buster_current_5.9.0.img.xz			#Armbian_20.10 版本映像。
6. Reboot to LibreELEC_1.1_Apkpure.apk						#重启进入 Armbian 软件。
7. USB_Burning_Tools_v2.0.7.2_build2.exe					#晶晨线刷工具含驱动。
8. win32diskimager-1.0.0-install.exe						#写盘工具。

四、给电视盒子刷入新的 Android 固件

1、在计算机上安装晶晨线刷工具(USB_Burning_Tools_v2.0.7.2_build2.exe)和写盘工具(win32diskimager-1.0.0-install.exe),上述工具包里提供了 3 个可引导进入 Armbian 的固件,任选其中一个即可,以下以刷入20191218-R3300L-Q7-6.0-root-twrp-Milton.rar固件为例。

2、在计算机上运行晶晨线刷工具,导入 Android 6.0.1 版本固件、勾选“擦除flash”和“擦除bootloader”后点“开始”按钮。

2.擦除bootloader.webp

3、拆开电视盒子,连接 USB 双公头到靠近 LAN 口的那个USB2,使用镊子或螺丝刀等工具短接 C125 两个焊点(可以稍微压重一点,我在这里翻车多次,还以为工具或者盒子是坏的,实际需要用一点力压。),接通电视盒子电源后,计算机会识别到电视盒子并开始刷入固件。写入进度在 4% 刷写 u-boot 的时候一定不要松开。等到 7% 开始格式化 EMMC 分区的时候就可以松开了。当然强迫症可以等到 8%。不用担心刷怀,如果失败红字了。再来一遍即可。再来的时候记得拔掉 USB 和电源,再按顺序插入。

  如果你有晶晨短接神器,首先将晶晨短接神器插在电视盒子的 HDMI 口,然后连接 USB 双公头到靠近 LAN 口的那个USB2,接通电视盒子电源后,计算机就会识别到电视盒子并开始刷入固件。

3.短接点_C125.webp4、如无意外会显示 100%:烧录成功。首先点击“停止”按钮,拔掉电源、USB 双公头线,然后连接 HDMI,在插入电源后会启动进入 Android 6.0.1 版本固件,首次启动时间会比较长,耐心等待即可。

4.烧录成功.webp

5、在电视盒子上安装 Reboot to LibreELEC_1.1_Apkpure.apk 软件,安装成功后点“完成”按钮即可,先不用运行,留下来备用。

5.安装Reboot to LibreELEC.webp

五、给 U盘刷入 Armbian 映像

1、在计算机上插入 U 盘,运行写盘工具,选择 Armbian_20.10_Arm-64_buster_current_5.9.0.img,然后点击“写入”按钮后,等待写入完成。

6.写入Armbian映像.webp

2、将 U 盘 boot 分区根目录中的 u-boot-s905x-s912 文件的文件名修改为 u-boot.ext。

3、修改 U 盘 boot 分区 /extlinux/extlinux.conf 文件,注释 # rk-3399 块中的第 7 行和第 9 行,去掉 # aml s9xxx 块中第 24 行和第 28 行前的 # 号。

LABEL Armbian
LINUX /zImage
INITRD /uInitrd

# rk-3399
#FDT /dtb/rockchip/rk3399-rock-pi-4.dtb
#FDT /dtb/rockchip/rk3399-nanopc-t4.dtb
#FDT /dtb/rockchip/rk3399-roc-pc-mezzanine.dtb
#APPEND root=LABEL=ROOTFS rootflags=data=writeback rw console=uart8250,mmio32,0xff1a0000 console=tty0 no_console_suspend consoleblank=0 fsck.fix=yes fsck.repair=yes net.ifnames=0

# rk-3328
#FDT /dtb/rockchip/rk3328-roc-pc.dtb
#FDT /dtb/rockchip/rk3328-box-trn9.dtb
#FDT /dtb/rockchip/rk3328-box.dtb
#APPEND root=LABEL=ROOTFS rootflags=data=writeback rw console=uart8250,mmio32,0xff130000 console=tty0 no_console_suspend consoleblank=0 fsck.fix=yes fsck.repair=yes net.ifnames=0

# aw h6
#FDT /dtb/allwinner/sun50i-h6-tanix-tx6.dtb
#APPEND root=LABEL=ROOTFS rootflags=data=writeback rw console=ttyS0,115200 console=tty0 no_console_suspend consoleblank=0 fsck.fix=yes fsck.repair=yes net.ifnames=0 video=HDMI-A-1:e
#APPEND root=LABEL=ROOTFS rootflags=data=writeback rw console=ttyS0,115200 console=tty0 no_console_suspend consoleblank=0 fsck.fix=yes fsck.repair=yes net.ifnames=0 mem=2048M video=HDMI-A-1:e

# aml s9xxx
#FDT /dtb/amlogic/meson-gxbb-p200.dtb
FDT /dtb/amlogic/meson-gxl-s905x-p212.dtb
#FDT /dtb/amlogic/meson-gxm-q200.dtb
#FDT /dtb/amlogic/meson-g12a-x96-max.dtb
#FDT /dtb/amlogic/meson-g12b-odroid-n2.dtb
APPEND root=LABEL=ROOTFS rootflags=data=writeback rw console=ttyAML0,115200n8 console=tty0 no_console_suspend consoleblank=0 fsck.fix=yes fsck.repair=yes net.ifnames=0

4、运行电视盒子中安装的 LibreELEC 软件,当出现超级用户申请时,选择“授权”。这时电视盒子会重新启动,待安卓完全关闭后,重启前,插入 U 盘到 USB2 口。千万不要在此之前插入 U 盘。安卓系统会污染 Armbian 文件权限。

7.运行LibreELEC并授权.webp

5、正常情况下会使用 U 盘的引导进入 Armbian 操作系统,如进入了 Recovery 模式,建议更换 U 盘试试。root 用户的默认密码为 1234 ,首次进入会要求你更改 root 用户的密码,同时要求你创建一个新的用户,在电视盒子上接上键盘操作即可。进入操作系统后,修改一下的 IP 地址,建议给电视盒子分配一个同网段的静态 IPv4 地址,今后就可以通过 ssh 对电视进行管理了。

8.引导进入Armbian.webp6、将 Armbian 写入 EMMC ,执行 /root/install-aml.sh 即可。如果不是特殊情况小白强烈建议不要写入 EMMC 。这时电视盒子已经可以当作双系统进行使用,插上 U 盘进入 Armbian 操作系统,拔掉 U 盘进入 Android 电视系统,如果 Armbian 玩崩了,直接给 U 盘上写入一份 Armbian 即可。

参考文档:

https://www.right.com.cn/forum/thread-5862691-1-1.html
https://www.right.com.cn/forum/thread-1761250-1-1.html
https://www.right.com.cn/forum/thread-1769596-1-2.html
https://vps.pc6a.com/2988.html


本文出处:HiFeng'Blog
本文链接:https://www.hicairo.com/post/69.html
版权声明:本博客所有文章除特别声明外,均采用CC BY-NC-SA许可协议。转载请注明出处!