普通视图

Received before yesterdayDolingou

EasyTier内网穿透及组网教程

2025年3月30日 08:00
😀
最近出门的次数变得越来越多,在外出的时间,家里的网络维护以及内网数据资料的获取成为了一个新的难题。之前我也有尝试过使用Tailscale以及Zerotier等方式进行内网穿透回家,但是由于Zerotier和Tailscale的中心服务器都是在国外,同时父母家那边的网络由于是社区宽带,已经不知道NAT了多少次,所以远程管理的效果还差也很折磨。这次发现了一个新的内网穿透软件:EasyTier,可以在一定程度上缓解上述提到的问题。这篇文章进行一些EasyTier的配置讲解
notion image

📝 EasyTier 介绍

EasyTier是一个去中心化的VPN组网方案,由Rust和Tokio驱动。相对于Zerotier、Tailscale的区别也在于去中心化这个特点,客户端即服务端,处于不同网络环境下的客户端在组网的同时,也是服务端的一部分,提供基于RPC的中继能力。相比于Zerotier于Tailscale的中心化组网方案,EasyTier在具有多客户端的情况下,借助P2P异地组网,相比传统的中心化组网方案,成功率更高,可实现更好的内网穿透效果,更有效的利用家宽的上下行带宽。

EasyTier 特点

以下部分内容摘选自EasyTier的Github项目介绍页面
  • 去中心化:无需依赖中心化服务,节点平等且独立。
  • 安全:支持利用 WireGuard 加密通信,也支持 AES-GCM 加密保护中转流量。
  • 高性能:全链路零拷贝,性能与主流组网软件相当。
  • 跨平台:支持 MacOS/Linux/Windows/Android,未来将支持 IOS。可执行文件静态链接,部署简单。
  • 无公网 IP 组网:支持利用共享的公网节点组网,
  • NAT 穿透:支持基于 UDP 的 NAT 穿透,即使在复杂的网络环境下也能建立稳定的连接。(据说在NAT4-NAT4网络下也可能打洞成功)
  • 子网代理(点对网):节点可以将可访问的网段作为代理暴露给 VPN 子网,允许其他节点通过该节点访问这些子网。
  • 智能路由:根据流量智能选择链路,减少延迟,提高吞吐量。
  • TCP 支持:在 UDP 受限的情况下,通过并发 TCP 链接提供可靠的数据传输,优化性能。
  • 高可用性:支持多路径和在检测到高丢包率或网络错误时切换到健康路径。
  • IPV6 支持:支持利用 IPV6 组网。
  • 多协议类型: 支持使用 WebSocket、QUIC 等协议进行节点间通信。
  • Web 管理界面:支持通过 Web 界面管理节点。

个人使用感受

目前我的网络环境为电信宽带,具有公网IPv4 + 公网IPv6,手机使用联通5G,正常情况下可以实现在建立连接之后3-5秒内实现P2P的内网穿透,不再借助中继服务器进行数据传输,同城延迟在50ms左右,如果是相同运营商的宽带,理论上同城延迟会更低。
同时,在CoalCloud(碳云)的VPS,在启用EasyTier作为节点后,与家里的Debian旁路网关和手机均可即时建立P2P连接,无需EasyTier提供公共服务器进行数据传输。

📝 EasyTier 安装方法

目前EasyTier提供了多种安装方式,以适应不同的系统平台,同时提供多种第三方工具,可用于对EasyTier节点进行管理,例如EasyTier Game ( Windows )EasyTier Manager ( Windows )luci-app-easytier ( OpenWrt )等。
我个人目前将EasyTier部署在家庭网络内的旁路网关上,并使用了点对网的子网代理,整体使用官方所提供的一键安装脚本。同时为了进行中继通信和在与NAT44网络内设备建立连接情况下,我通过Docker Compose方式将EasyTier也部署在了CoalCloud的VPS上。在旁路网关部署未使用Docker Compose的原因在于我需要使用点对网的子网代理,即通过旁路网关作为跳板,实现对局域网内其他设备的访问与管理,如果通过Docker实现,可能会增加网络的复杂性,所以只使用了脚本安装。
EasyTier不区分服务端与客户端,所以的节点所使用的程序都是一样的,所以在了解以下基于Debian的节点安装及配置之后,可以举一反三,在其他设备进行配置。如果使用OpenWRT,可以尝试在软件仓库中搜索,大部分软件仓库均已收录EasyTier。

EasyTier 一键安装脚本

首先确保你的系统以及安装了wgetunzip 这两个必须的依赖,如果没有安装可通过如下命令安装(Debian、Ubuntu等使用apt进行软件包管理的系统):
然后通过如下命令进行EasyTier的脚本一键安装:
默认脚本下载位置位于/tmp 临时文件夹下,安装完成后可进行删除。

EasyTier 基础配置

EasyTier安装后,默认的配置文件位于/opt/easytier/config/default.conf ,下面列出我的配置文件宫参考,你也可以通过config_generator生成自己的配置文件:
各项参数意义如下:
instance_name: 实例名称
instance_id : 实例的uuid,可以使用config_generator生成
ipv4 :当前设备的虚拟局域网IPv4地址,如果你需要手动为设备指定虚拟局域网的IPv4地址,则需要此项,否则可删除。
dhcp : 如果你需要手动为当前设备指定虚拟局域网IPv4地址,并已经包含了ipv4的参数项,则此项填写为false,如果你希望自动为当前设备分配虚拟局域网IPv4地址,则填写true.
listeners : 一般情况下无需改动。如果你希望使用不同的端口,则自行修改端口并对端口进行防火墙放行。
rpc_portal : 默认端口为0,在官方文档中表示默认会尝试使用15888,但实际并没有使用,EasyTier启动后无法通过easytier-cli进行数据获取,报错信息如下所示。所以建议修改监听端口为15888
network_name:虚拟局域网的名称。EasyTier是通过network_namenetwork_secret进行网络的识别与连接确认,所以需要客户端的network_namenetwork_secret 完全一致。建议使用复杂一些的网络名称
network_secret :虚拟局域网的网络密钥。
uri :节点地址,可使用官方提供的节点(tcp://public.easytier.cn:11010),如果你自建了VPS节点,也可填写tcp://IP:PORT ,默认端口为11010。也可以查看EasyTier 公共服务器列表,选择最适合自己网络环境的公共服务器节点。
enable_kcp_proxy :是否开启KCP代理,将TCP流量转换为KCP流量,提升传输速度与降低延迟。建议开启。
latency_first : 延迟优先,建议开启。
enable_exit_node:是否设置当前节点为出口节点。目前建议关闭,由于EasyTier无法进行DNS劫持,所以暂时无法像Tailscale或者Zerotier使用出口节点进行翻墙等科学上网操作。
dev_name : 设置tun网卡名称,如果你的设备具有多个程序在使用tun设备,那么建议修改一下名称,避免产生冲突。
proxy_forward_by_system : 使用系统转发替代EasyTier内置转发。相对来说性能会有所提高,但是你需要对防火墙有一定的了解,或者你的节点部署在局域网环境内,没有开启防火墙。 bind_device : 没有在配置项中列出的部分。即是否绑定物理设备,如果你的机器使用了很多的虚拟网络设备,建议删除该项,使其绑定物理网卡,避免产生无法连接问题 use_smoltcp : 是否使用用户态协议栈,避免操作系统防火墙导致的无法子网代理 / KCP 代理。个人目前是删除了该项,因为暂时没有发现因防火墙导致的无法子网代理问题,同时在开启用户态时,性能损耗较为严重。 relay_all_peer_rpc : 转发所有对等节点的RPC数据包,帮助非当前虚拟局域网的其他节点建立连接。为了安全以及流量考虑,建议关闭或删除。 enable_encryption : 是否禁用加密。false为开启加密,true为禁用加密,默认为false

防火墙放行EasyTier端口

EasyTier默认监听端口为11010 ,如果你使用系统防火墙,需要对端口进行放行。同时如果部署在家庭网络内,需要在路由器的防火墙对11010端口也需要进行放行操作(Forward)。

EasyTier 运行命令

启动EasyTier

其中@default即使用defalt.conf配置文件,以下皆同。控制命令基于Systemd。

重启EasyTier

停止EasyTier

查看EasyTier运行状态

EasyTier-CLI命令

查看EasyTier已连接的节点

返回结果类似于如下,即已经建立连接的节点和目前的基本情况,包括是否使用P2P、延迟、丢包、NAT类型等:

查看EasyTier当前节点信息

返回结果大概与下面的信息相似,包括当前的虚拟局域网IPv4地址,子网代理范围,节点ID、公网IPv4地址、公网IPv6地址等。

EasyTier 子网代理

子网代理即点对网的组网方案,可通过一台跳板机进行局域网内其他设备的访问,且无需为局域网内其他设备配置EasyTier。例如你的EasyTier部署在主路由上,但在外面时候想访问家里的NAS,那么就需要点对网的组网方案。
EasyTier的点对网组网非常简单,在配置文件中增加如下部分:
cidr即你需要实现点对网组网的网段,例如我家里的局域网网段为10.0.0.0/24,那么即填写这个网段,如果你的是192.168.1.1类似的局域网地址,那么对应的cidr为192.168.1.0/24

🤗 总结归纳

目前在测试过程中还存在如下问题或未测试项:
  • 出口节点目前不能代理DNS流量,即EasyTier无法对设备的DNS进行劫持,所以无法实现通过节点进行科学上网。目前也不支持Magic DNS功能。
  • 两侧完全NAT44且不具有IPv6公网地址情况下的内网穿透表现还未进行测试。目前已经确认在一方具有公网IPv6情况下或IPv4处于端口映射及以上,即便另一方处于NAT44环境,P2P可建立连接。
  • WireGuard目前还未进行测试,因为我基本上不用WireGuard。这几天看看抽空研究一下。

📎 参考文章

 
💡
有关Easytier安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~ 版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
 
  •  

InnerTune,一个第三方Youtue Music客户端

2024年10月6日 08:00
😀
自从网易云音乐的黑胶VIP到期之后,网易云音乐变得越来越难用,哪有听歌还要看广告之后才能听的,而且很多音乐提供的版本音质差就算了,有的只播放一个开头就因为不是VIP自动切歌,尤其是在健身房时候,突然切歌的伤害实在是太大了。在Android上,没有什么太好的选择,我又不是苹果用户,所以Apple Music就算了,选来选去,最后还是决定用Youtube Music。但是Youtube Music Android版本本身也有个问题,在不是Premium会员的情况下,是没有办法背景播放的,例如在手机息屏或者切换应用程序之后,音乐就暂停了,但是这个对于Android用户来说不是什么问题,毕竟我们什么样的App都有。
notion image

📝 InnerTune介绍

InnerTune是一个基于Material 3设计风格的YouTube Music客户端,专为Android平台开发,是一个开源项目,提供了YouTube Music官方客户端的绝大多数功能,并极大的提升在没有订阅Youtube Premium情况下的听歌体验。而且InnerTune非常贴心的内置了Proxy代理选项,可以方便的通过科学上网来访问Youtube Music的曲库。
InnerTune项目地址如下:
InnerTune
z-huangUpdated Mar 12, 2025
项目从2020年2月11日在Github提交了第一次Commit,到现在已经近5年的时间,是一个长期在维护的项目,所以暂时不用担心烂尾等问题。目前项目总计获得了4.3K的Star,266的Fork,1015条Issues已经被解决,是一个很负责的项目。
整体程序大小24.6M,比网易云音乐那种动辄占用1G多的程序简洁太多了,而且日常运行中也不会有事没事发个Push通知或者自己唤醒耗电。要说唯一的缺点,就是得有代理科学上网了,而且听歌要费流量。
目前已经是我手机上主要听音乐的App,即便是我在订阅了Youtube Premium的情况下。

功能特点:

  • 无广告播放:可以从YouTube/YouTube Music播放歌曲,且没有广告干扰。
  • 后台播放:支持在后台播放音乐,即使切换到其他应用,音乐也能继续播放。
  • 搜索功能:支持从YouTube Music搜索歌曲、视频、专辑和播放列表。
  • 登录支持:用户可以通过YouTube Music账号登录获取个性化推荐和收藏内容。
  • 缓存与离线播放:可以缓存和下载歌曲,支持离线播放。
  • 同步歌词:提供与歌曲同步显示的歌词功能。
  • 歌词翻译:内置歌词翻译功能,帮助用户理解外语歌曲。
  • 跳过静音:自动跳过歌曲中的静音部分,提升播放体验。
  • 音频标准化:自动调整音量,保持不同歌曲之间的音量一致。
  • 节奏/音高调整:可以调节歌曲的播放速度和音调,满足不同需求。
  • 动态主题:根据系统主题动态变化应用的外观,带来个性化体验。
  • Android Auto支持:在Android Auto环境中使用该应用,适用于车载系统。
  • 个性化快捷选择:提供快速选择功能,便捷找到用户喜爱的音乐。
  • Discord Rich Presence支持:与Discord集成,展示正在播放的歌曲信息。

程序界面:

程序界面整体遵循Material 3设计风格,简洁不花哨,完全够用。

主界面:

notion image

音乐播放界面及歌词界面:

notion image
notion image
notion image
 

设置界面:

notion image

InnerTune下载地址

目前开发者提供三个下载方式,Github、F-Droid市场以及IzzyOnDroid市场,通过下面图片点击超链接即可进入下载页面。
需要注意:如果通过Github Release进行下载*.apk 安装包进行下载,手机用户需要选择full_arm64-v8a.apk 的安装包:

InnerTune提示Unknown Error播放失败

最近InnerTune出现音乐无法播放问题(Songs not playable),提示Unknown Error,对应的InnerTune版本为0.5.10版本,解决方法如下:

使用Debug的Foss版本

如果出现播放失败问题,例如InnerTune版本为0.5.10 ,在播放页面提示Unknown Error,可以尝试使用debug版本,目前InnerTune Debug版本工作正常:

自行编译安装包

另外一种解决办法为尝试自行编译InnerTune的APK安装包,步骤大概如下:

1. 设置开发环境

下载Android Studio:在你的电脑上下载Android Studio,访问https://developer.android.com/studio。这是一款官方的集成开发环境(IDE),专门用于安卓应用开发。

2. 下载或克隆InnerTune仓库

访问InnerTune的GitHub仓库:https://github.com/z-huang/InnerTune/archive/refs/heads/dev.zip,下载或克隆项目的ZIP文件。

3. 解压项目

如果下载的文件是压缩包(ZIP格式),请解压项目文件。

4. 在Android Studio中打开项目

启动Android Studio,点击左上角菜单按钮,选择File -> Open,然后选择解压后的项目文件夹。

5. 生成签名APK

点击顶部左侧的菜单按钮,然后依次选择Build -> Generate Signed App Bundle / APK
选择APK选项,然后点击Next
如果你已经有签名密钥,请提供密码并继续;如果没有,请选择Create New创建新密钥。只需要填写路径、别名和密码即可,其他信息可以随意填写。完成后点击Next
选择fossRelease构建目标,然后点击Create按钮。
等待1到10分钟,直到构建完成。

6. 定位生成的APK文件

如果右下角弹出通知,标题为Generate signed APK with locate button,点击通知中的locate按钮。
APK文件会显示在你的默认文件浏览器中。你可以通过USB、电子邮件或其他方式将APK文件传输到你的手机。

7. 备份并替换现有InnerTune应用

在使用新APK之前,请在当前InnerTune应用的设置中创建备份。
只有完成备份后,才能卸载现有的InnerTune应用。
定位你制作的APK文件,像安装其他APK一样进行安装。

8. 恢复备份并登录Google账号

打开新安装的应用,从设置中恢复之前的备份。
如果你遇到问题,请尝试登录或退出你的Google账号。一些用户发现,在登录和退出账号后再进行操作可以解决问题。

9. 安全提示

切勿安装他人提供的APK:出于明显的安全原因,强烈建议你亲自制作和安装APK文件。这是确保应用安全的最佳方式。

📎 参考文章

 
💡
有关Android APP安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~
  •  

以太坊(ETH)公共RPC节点推荐

2023年3月25日 08:00
😀
以太坊(Ethereum as known as ETH)是一种基于区块链技术的开源平台,支持智能合约(Smart Contract)、去中心化应用(DApps)以及加密货币代币发行(Token)等功能。作为一个分布式系统,以太坊网络由众多节点组成,并通过公共RPC(Remote Procedure Call)接口提供与其他节点通信的方式,可以将RPC理解为提供接入区块链网络的入口,类似一扇门,我们所有在ETH链上的交易,均需要通过这扇门才能进行。本文将介绍以太坊的公共RPC节点。
 

📝 什么是以太坊公共RPC节点?

以太坊(ETH)公共RPC节点是一种与以太坊网络进行交互的方式,通过RPC,允许开发人员查询区块链数据、广播交易以及执行智能合约(Smart Contract)等操作。这些节点由不同的服务提供商托管,可以通过使用HTTP或WebSocket协议连接到它们,并通过节点提供的JSON-RPC接口与以太坊的区块链网络(ETH Mainnet)通信。

🤗 为什么需要以太坊公共RPC节点?

在链上交互、交易时,程序需要与以太坊网络进行交互时,或者作为开发者在开发DApps和智能合约时,在自己的节点上运行完整的以太坊客户端可能会很耗费资源和时间。相反,使用公共RPC节点可以更快地获取数据和执行交易,同时还可以节省部署和维护以太坊节点所需的成本。
在ETH拥堵的时候,通过切换公共RPC节点,选择延迟较低的RPC入口,减少延迟,避免塞车,加快交易速度,抢占先机。需要注意的是,切换RPC节点,并不能降低Gas费用,RPC解决的是区块链的入口问题,而不是解决整条链的性能与费用问题。

📎 常用的以太坊公共RPC节点有哪些?

  1. https://mainnet.infura.io - Infura是以太坊和IPFS的托管节点服务,提供了以太坊主网和测试网络的RPC节点。
  1. https://cloudflare-eth.com - Cloudflare提供的以太坊主网RPC节点。
  1. https://api.mycryptoapi.com/eth - MyCrypto API提供的以太坊主网RPC节点。
  1. https://rpc.slock.it/mainnet - Slock.it提供的以太坊主网RPC节点。
  1. https://eth.rpc.rivet.cloud - Rivet提供的以太坊主网RPC节点。
  1. https://mainnet-rpc.dexon.org - Dexon提供的以太坊主网RPC节点。
  1. https://eth-mainnet.alchemyapi.io/v2/{API_KEY} - Alchemy提供的以太坊主网RPC节点,可申请私有api key使用。
  1. https://rpc.moonriver.moonbeam.network - Moonriver提供的以太坊主网RPC节点。
  1. https://eth.rpc.tor.us - Torus提供的以太坊主网RPC节点。
  1. https://mainnet-rpc.thundercore.com - ThunderCore提供的以太坊主网RPC节点。
  1. https://rpc.ankr.com/eth - Ankr提供的ETH主网RPC节点。付费版本支持Websocket协议。
  1. https://quicknode.com - 提供支持DApp构建者使用的专业以太坊RPC和Web3 API接入服务。需要注册,免费版提供http provider和wss的API。
  1. https://eth.llamarpc.com - llamarpc提供的以太坊主网RPC节点,提供隐私保护
  1. https://eth.drpc.org - drpc提供的以太坊主网RPC节点,提供隐私保护
以上这些节点,都是由相对知名与安全的厂商提供,例如Cloudflare,借助他们的服务调度与边缘计算网络,能够更快、就近实现接入ETH网络,实现交易。在选择上,我一般是对这些节点都做测速,选择延迟最低的来使用。同时,例如Alchemy这种需要自己申请api key的节点,在访问请求数量上会相比其他节点更少一些,所以速度上也会较快一些。
 

英文版本

 
💡
有关Notion安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~
  •  

Recommendation of ETH Public RPC Nodes

2023年3月9日 08:00
💰
Ethereum (ETH) is an open-source platform based on blockchain technology that supports smart contracts, decentralized applications (DApps), and functions such as cryptocurrency token issuance. As a distributed system, the Ethereum network consists of numerous nodes and provides a way to communicate with other nodes through a public Remote Procedure Call (RPC) interface. RPC can be understood as an entry point for accessing the blockchain network, much like a door. All transactions on the ETH chain require this door to be accessed. This article will introduce public RPC nodes for Ethereum.

What is an Ethereum public RPC node?

An Ethereum (ETH) public RPC node is a way to interact with the Ethereum network, allowing developers to query blockchain data, broadcast transactions, and execute smart contracts through RPC. These nodes are hosted by various service providers and can be connected to via HTTP or WebSocket protocols, communicating with the Ethereum blockchain network (ETH Mainnet) through the JSON-RPC interface provided by the nodes.

Why do we need Ethereum public RPC nodes?

When interacting and trading on the blockchain, programs need to communicate with the Ethereum network. Running a complete Ethereum client on one's own node as a developer when developing DApps and smart contracts can be resource-intensive and time-consuming. Instead, using public RPC nodes can allow for faster data retrieval and transaction execution while saving costs associated with deploying and maintaining an Ethereum node.
During times of ETH congestion, switching public RPC nodes and selecting RPC entry points with lower latency can reduce delays, avoid traffic jams, increase transaction speed, and gain a competitive edge. It is important to note that switching RPC nodes does not necessarily reduce gas fees. RPC solves the problem of access to the blockchain rather than addressing the overall performance and cost issues of the entire chain.

What are some commonly used public RPC nodes for Ethereum?

  • https://mainnet.infura.io - Infura provides hosted node services for Ethereum and IPFS, offering RPC nodes for both the Ethereum mainnet and test networks.
  • https://eth-mainnet.alchemyapi.io/v2/{API_KEY} - Alchemy offers an Ethereum mainnet RPC node, with a private API key available upon request.
  • https://eth.rpc.tor.us - Torus manages an Ethereum mainnet RPC node.
  • https://rpc.ankr.com/eth - Ankr provides an ETH mainnet RPC node. Their paid version also supports the WebSocket protocol.
These nodes are all operated by reputable and secure vendors, like Cloudflare. They leverage service scheduling and edge computing networks to achieve faster, more localized access to the ETH network, facilitating transactions. When choosing a node, I typically run speed tests on all options and pick the one with the lowest latency. It's worth noting that nodes requiring API key applications, such as Alchemy, often have fewer access requests than their counterparts. This can result in improved speed.
  •  

挖Kaspa应该选哪家矿池

2023年3月3日 08:00
Kaspa最近几天的涨势可以用超乎寻常来形容,真的是涨疯了!不少老矿工也因为这一波涨势,准备再次开机开挖,为区块链的建设添砖添瓦(开机!加卡!电表转的飞快!国家电网合作伙伴!)。附图是今天在miningpoolstat上的PoW Token热度截图,目前Kaspa已经进入矿币排行的前20 13,且算力还在不断的上涨中,截至目前,网络总算力491.97 Th/s700.71 TH/s,相比上次文章内容更新,网络总算力又上升了将近10%, 难度(Difficulty) 491.83 T 748.08 T,综合来说算是为数不多能够正收益的PoW加密货币(也就是矿币)。我也是第一次简单难度比算力还高的情况。球球各位大佬别卷了呜呜呜,孩子连矿渣都挖不到了。
Nvidia RTX 3070显卡,日收益为$0.32;
Nvidia RTX 4080显卡,日收益为$0.65;
矿老板们最爱的AMD R580,日收益$0.09。
虽然比不上巅峰时期的ETH,但是也算是正收益,终于可以打开矿机了。但依旧提示不要盲目投资,当心血本无归。
我已经卖飞了。全仓卖飞。
notion image

📝 主旨内容

在矿池的选择上,首先考虑到我与看到这篇文章的您,可能都处于东亚地区,所以以是否具有东亚的节点(例如香港、新加坡、韩国等等)作为一个重要的考虑因素,同时结合矿池总算力、矿池最低付款门槛、手续费等进行综合。
在挖矿所使用的Proxy(代理)上,可以参考TAG Internet
 

支持KASPA的矿池列表

矿池名称
手续费
起付门槛
目前算力
是否有亚洲节点
SSL
图标
1 %PPLNS
100
48.80 TH/s
支持
0.9 %PROP 0.9 %SOLO
1
36.37 TH/s
有(香港、韩国)
支持
0.8 %PPLNS
100
34.78 TH/s
有(香港)
支持
0.8 %PPLNS
100
10.71 TH/s
未知
1 %PPLNS
100
6.77 TH/s
不支持
0.75 %PPLNS 0.75 %SOLO
100
4.99 TH/s
支持
f2pool.com(鱼池)
1 %PPLNS
未知
3.96 TH/s
支持
1 %PPS+
100
3.41 TH/s
未知
gpumine.org(已跑路)
1 %PPS+
30
1.69 TH/s
未知
1 %PPLNS 1 %PPS
10
1.38 TH/s
未知
我现在在使用的是acc-pool的香港节点,延迟控制在40ms(accepted 41ms)左右。
最后,强烈建议不要!不要!不要!使用woolypooly矿池,这家矿池偷算力基本上已经在业界臭名昭著了,请注意。
The LARGEST POOL FRAUD in the history! WOOLY POOLY!

🤗 总结归纳

  • Kaspa 网络算力显著增长,目前总算力达到 700.71 TH/s,难度为 748.08 T。
  • 矿池选择考虑因素:东亚节点可用性、总算力、最低付款门槛和手续费。
  • 强烈建议避免使用 woolypooly 矿池,因其存在偷算力问题。
  • 推荐的交易所为 Gate.io 和 MEXC,用于 Kaspa 交易和出金。

📎 更新

f2pool(鱼池)已开始支持kaspa挖矿
软件及程序参考:Kaspa挖矿软件
在交易出金方面,Kaspa推荐的交易所为:芝麻开门(Gate.io)和抹茶(MEXC)。其他不入流的小交易所不建议使用。
 
💡
有关Kaspa挖矿上的问题,欢迎您在底部评论区留言,一起交流~
 
  •  

新矿工初入DEFI的必备工具

2022年2月12日 08:00
😀
不少新矿工是趁着这波动物币的热潮,才进入到了DEFI领域,开始接触区块链、DEFI、DEX(去中心化交易所)、以及流动性挖矿等等。由于DEX本身的特点,以及目前还处于发展阶段,功能性相比CEX(中心化交易所,例如币安等等)有所欠缺。下面就列出一些我自己常用的工具。工欲善其事必先利其器。

1. 钱包

钱包顾名思义就是存取代币的地方,在DEFI领域中,钱包是一切的基础,有钱包才存在支付的可能,也就才有后续各种智能合约的执行。
以上是我在使用的两款,Trust Wallet为App,MetaMask是Chrome插件,用在PC上,现在也提供了手机版本的App。 同在交易所的钱包相比,这两者区别于在中心化交易所的钱包仅仅是余额,而参与DEFI是需要一个自己的钱包的,这个钱包也可以称为冷钱包。

2. 交易

与CEX(中心化交易所)不同,DEX并没有审核上所的规范,也就是DEX上可以买到任何在链上发行的代币,这些代币中可能有蕴含百倍的可能,也可以只是一缕空气。
DEFI中所有的交易,都需要通过DEX进行,BSC链上为PancakeSwap、BakerySwap、ApeSwap, ETH链上位Uniswap、SushiSwap、1inch, HECO上为MEDX。其他类似SOL链的DEX也在蓬勃的发展中(截至到现在,sol上也已经有很多家dex在提供服务,更多的公链也不断的在完善在dex领域的布局)。

3. 链上记录查询

加密货币的交易都是有迹可循的,通过地址、或者hash就可以查找到对应的交易记录,公开且透明

4. 图表

由于DEX并不提供交易的价格趋势表,所以需要通过第三方的图表来进行价格的监控
Bog:BoggedFinance - Part of the BogTools Ecosystem (能够查看Ape池的代币价格)

5. 流动性挖矿/质押挖矿管理

矿工们往往是趋利的,并且不会将所有的代币放在一个Yield池子中。同时当代币用于提供流动性,或质押挖矿的时候,钱包里是看不到的,所以就需要一款工具能够查看分布于不同Yield池子里面的质押情况以及收益情况。
0xtracker:0xTracker | Hellonext(链接已失效)
BSC & ETH & Polygon打赏地址:
0x026C3c919A70F4d08518Fc4f637A28260901C57c

6. 浏览器

浏览器推荐Brave或者Microsoft Edge,无论如何也得是Chromium核心的浏览器,这样才可以方便安装Metamask等等插件。但是不建议使用国产的360浏览器等。
同时由于部分撸空投需要隐藏或者擦除指纹,类似的WebRTC插件只有Chromium浏览器可以安装,所以还是推荐这些。
此为以前旧文,由于知乎的审核政策,所以迁移至自己的博客。
 
💡
有关Notion安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~
  •  

探索Polygon网络的公共RPC节点

2022年1月18日 08:00
😀
本文推荐多个可靠的Polygon主网RPC地址,包括MaticVigil、Polygon官方等提供的节点,从而可以选择延迟最低的RPC服务器加速交易。了解如何安全且高效地与Polygon区块链交互,适合开发者和加密货币爱好者阅读。
 

📝 主旨内容

 
Polygon是一个基于以太坊的可扩展Layer 2解决方案,通过增加网络吞吐量和降低交易费用来提高以太坊网络的性能。今天为大家推荐一些常见的Polygon公共RPC地址:
  1. https://rpc-mainnet.maticvigil.com - MaticVigil提供的Polygon主网RPC节点。
  1. https://polygon-rpc.com - Polygon官方提供的Polygon主网RPC节点。
  1. https://rpc-mainnet.matic.network - Matic Network提供的Polygon主网RPC节点。
  1. https://matic-mainnet.chainstacklabs.com - Chainstack Labs提供的Polygon主网RPC节点。
  1. https://rpc-mainnet.moonbeam.network - Moonbeam Network提供的Polygon主网RPC节点。
  1. https://matic-mainnet-full-rpc.bwarelabs.com - BwareLabs提供的Polygon主网RPC节点,目前已迁移到Blast使用。
  1. https://rpc-mainnet.matic.quiknode.pro - QuikNode提供的Polygon主网RPC节点。
  1. https://rpc-mainnet.maticvigil.com/v1/{your-api-key} - MaticVigil提供的Polygon主网RPC节点,需要申请私有api key。
  1. https://rpc-mainnet.matic.network/v1/{your-api-key} - Matic Network提供的Polygon主网RPC节点,需要申请私有 api key。
  1. https://matic-mainnet-archive-rpc.bwarelabs.com - BwareLabs提供的Polygon主网归档RPC节点,目前已迁移到Blast使用。
  1. https://polygon-rpc.com/ - Ankr提供的Polygon主网RPC节点
这些公共RPC地址可以用于与Polygon网络进行交互,例如获取区块链数据、广播交易等。使用公共RPC地址时,要注意请求来源和数据安全性。建议开发人员在生产环境中使用自己的节点或者受信任的第三方节点服务。
 

📝 英文版本

 
💡
有关Notion安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~
  •  

【Horace And Pete】百年酒馆 第一季 1080P 阿里云

2020年10月1日 08:00
😀
《Horace and Pete》(百年酒馆)是一部美国电视剧,由作家和演员Louis C.K.编剧、导演和主演。这部剧集讲述了两兄弟Horace和Pete经营的一家酒吧的故事,这家酒吧一直由他们的祖先经营,传至两人,已经百年。剧集主要探讨了家族之间的复杂关系、社会经济阶层的问题、政治失望和文化变迁。这是一部种类独特、定位明确、电视现实主义剧集,令很多观众反思人生和生活。
 

📝 剧集介绍

 
《Horace and Pete》(百年酒馆)展示了当代社会的一些阴暗面和问题,比如家庭问题、政治失望、社会经济阶层的差异等等。它的情节和人物都非常真实,关注的是生活中的细节和琐事,让人产生一种压抑和沉重的感觉。此外,这部剧还有很多悲剧元素,角色面临的是一些遭遇和困境,比如精神疾病、家庭暴力、性侵等问题,这些情节会让观众感到非常的悲伤和绝望。因此,看完这部剧可能会让人感到很沉重。
《Horace and Pete》(百年酒馆)在荧屏上的表现和创新得到了大多数评论家的好评,并吸引了数千名观众。尽管没有受到多少主流媒体和工会的认可和奖励,但剧集仍然斩获了一些国内和国际荣誉,包括:
  1. 2017美国影视艺术与科学学院奖 - 突出原创短剧的一般杰出表演
  1. 2017 Writers Guild America奖 - 最佳短剧系列剧本
  1. 2017Online Film Critics Society奖 - 最佳短剧系列
  1. 2017隐形画廊最佳网剧
虽然荣誉与奖项相对较少,但这并不影响《Horace and Pete》成为一部经典影视作品,获得广泛的认可。
这也是我最喜欢的一部美剧。
为什么不用Torrent做种方式?因为我的上传带宽都给了网心云。

元数据信息

IMDB评分:8.4/10
IMDB编号:tt5425186
TVDB编号:309765
豆瓣:26719562
类型: 剧情 / 喜剧
制片国家/地区: 美国
语言: 英语
首播: 2016-01-30(美国)
集数: 10
单集片长: 67分钟
又名: Horace & Pete
该剧共有10集,每一集的时长不同。最短的一集为30分钟,最长的一集为67分钟。该剧的首播日期是2016年1月30日。
该剧的主演包括:Louis C.K.、Steve Buscemi、Edie Falco、Alan Alda、Jessica Lange 等(路易·C·K / 史蒂夫·布西密 / 埃迪·法可 / 史蒂夫·赖特 / 阿伦·阿尔达 / 杰西卡·兰格 / 艾迪·布莱恩特 / Kurt Metzger / 丽贝卡·豪尔)。
 
 
  •  

云服务器(VPS)购买之后的防火墙配置

2024年9月4日 08:00
😀
炭云煤老板买了一台香港云服务器,用来放tiny-tiny-rss、监控面板还有跑一些Docker服务,主要用于监控一下家里OpenWRT的主路由和旁路由这些网络状态,速度稳定性什么的都OK,就是网页功能不提供防火墙配置的相关选项,我安装的系统是Ubuntu 22.04,还使用的是iptables ,我也还懂一点点,搞一些基础的防火墙规则配置还是没问题的。那就自己上手弄一下配置吧。

📝 IPv4规则配置

首先建议先使用iptables -L查看已有规则,确保不会和已有规则形成冲突。同时防火墙规则配置建议按照顺序进行,先进行本地配置,再进行放行端口配置,最后进行全局配置,避免iptables规则配置到一半登不进服务器的情况。

允许本地回环接口

允许 lo 接口的流量,本地回环的流量是系统自身的通信,不应被阻止。

允许已建立的连接

允许已建立和相关的连接继续通过,以便服务器正常处理响应流量

允许特定服务端口

允许你需要的服务端口流量,如 SSH、HTTP/HTTPS、DNS 等。具体端口按需要的顺序添加。

SSH

如果你已经在sshd_config中修改了SSH的监听端口,那下面的22修改成你自己配置的端口

HTTP(80)和HTTPS(443)

基础访问流量

Tinny Tinny RSS (181)

DNS

如果你在云服务器上需要搭建DNS服务器,那么建议放行。如果没有这个计划,那不添加DNS端口规则也可以。

ICMP (Ping)

允许ICMP流量,用于服务器可用性检测。

限制SSH登录尝试

添加限制SSH登录尝试的规则,保护服务器免受暴力攻击。目前配置的3分钟5次(1分钟1次也很棒了)。

日志记录和丢弃其他流量

添加日志记录规则,并丢弃所有其他未明确允许的流量。

设置默认策略

所有规则添加完成后,设置默认策略为丢弃未匹配到的输入流量和转发流量,允许输出流量。这个步骤通常放在规则之后是为了避免在规则设置过程中意外中断服务。

规则保存

我使用的是Ubuntu系统,在不想使用iptables-saveiptabels-restore的情况下,希望每次系统重启可以自动加载已经配置好的规则,所以需要使用iptables-persistent

📝 IPv6规则配置

因为云服务器也有分配IPv6地址,我在平常也更倾向使用IPv6,所以IPv6的iptables防火墙规则也需要进行配置。具体与IPv4的规则配置基本相同,配置使用的命令由iptables更换为ip6tables

允许本地回环接口

允许 lo 接口的流量,本地回环的流量是系统自身的通信,不应被阻止。

允许已建立的连接

允许已建立和相关的连接继续通过,以便服务器正常处理响应流量

允许特定服务端口

允许你需要的服务端口流量,如SSH、HTTP/HTTPS、DNS等。具体端口按需要的顺序添加。

SSH

如果你已经在sshd_config中修改了SSH的监听端口,那下面的22修改成你自己配置的端口

HTTP(80)和HTTPS(443)

基础访问流量

Tinny Tinny RSS(181)

DNS

如果你在云服务器上需要搭建DNS服务器,那么建议放行。如果没有这个计划,那不添加DNS端口规则也可以。

ICMP(Ping)

允许ICMP流量,用于服务器可用性检测。

限制SSH登录尝试

添加限制SSH登录尝试的规则,保护服务器免受暴力攻击。这里建议如果有修改sshd_config的SSH服务监听端口的话,修改后的端口和原22端口都添加限制登录尝试规则,扫22端口的没有好人。

日志记录和丢弃其他流量

添加日志记录规则,并丢弃所有其他未明确允许的流量。

设置默认策略

所有规则添加完成后,设置默认策略为丢弃未匹配到的输入流量和转发流量,允许输出流量。这个步骤通常放在规则之后是为了避免在规则设置过程中意外中断服务。

规则保存

我使用的是Ubuntu系统,在不想使用iptables-saveiptabels-restore的情况下,希望每次系统重启可以自动加载已经配置好的规则,并且支持IPv4和IPv6的规则。以上这些需求,通过iptables-persistent可以实现。
安装过程中的提示全部Yes。 进行已配置规则保存:
检查是否成功加载:

📎 参考文章

 
💡
有关云服务器(VPS)安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~
  •  

在Steam Deck上玩国服最终幻想14

2021年7月2日 08:00
😀
XIVLauncherCN是一个针对《最终幻想14》国服玩家定制的启动器(Launcher),可以快速、便捷地启动游戏、管理插件(addons)和进行路径设置。该软件由一名中国玩家开发,旨在改善FF14国服玩家在游戏启动、插件管理等方面的体验。通过XIVLauncherCN,可以绕过最终幻想14的国服官方启动器,从而实现在Steam Deck上尽情畅玩FF14。同时FF14本身对手柄的优化也极其良好,不少UP主也尝试并通过了使用手柄通关高难本。
XIVLauncherCN提供了多种崭新的功能,如安装插件时的模块化界面、插件备份和恢复功能以及在自定义路径下安装游戏等。此外,该软件也带有常见插件的中文版,可满足广大玩家在使用插件时的语言需求。

安装步骤:

准备工作

切换到桌面模式
按住电源按钮。 选择“切换到桌面模式”

安装 XIVLauncherCN

请打开“Discover Store”,搜索“XIVLauncherCN”,然后进行安装。
如果您希望将Final Fantasy XIV安装于您的Deck的MicroSD卡或默认以外的其他文件夹 (~/.xlcore_cn/ffxiv),则需要下载Discover Store中的Flatseal(可选)。

拷贝国服游戏文件

鉴于盛趣已经删除了前期的游戏补丁,因此启动器并不能从头开始下载游戏。因而我们建议您通过各种其他的途径下载国服游戏文件,并将其转移到Steam Deck中。

添加非 Steam 游戏

通过在Steam桌面模式中选择“添加游戏”,向下滚动并单击XIVLauncherCN复选框,随后单击“添加所选程序”来加入Steam游戏库中。为了使国服启动器正常运行并下载登陆二维码,您必须将XIVLauncher的“启动目录”替换为一个具备写入权限的目录,如:/home/deck或者任何一个非只读目录。
同时,请注意将XIVLauncher的“启动选项”替换为以下语句:
然而需要注意的是 - 在这个特定的 XIVlLauncher 配置下,Valve 并没有提供更安全的密码存储方式,所以它会将您的密码存储于 Steam Deck 中。如果您对此有质疑,请减掉上述语句中的"XL_SECRET_PROVIDER=FILE"。这样一来,XIVLauncher 便无法保存您的密码,但仍能运转。
请勿为XIVLauncher设置兼容模式。XIVLauncher是本地的Linux应用程序,在其上开启兼容模式将会破坏其基本功能。

允许外部文件夹访问 XIVLauncher

请运行 Flatseal, 在左侧边栏,向下滚动,并找到XIVLauncherCN。在窗口的主要部分中,向下滚动至“文件系统”选项板块。请点击场景右侧“其他文件夹”的文件夹图标,并输入您所安装最终幻想 XIV 的安装路径。默认情况下,MicroSD 的安装路径应该为/run/media/mmcblk0p1。
在此之后,一定要将启动目录更改为可访问的目录。

切换到游戏模式

请在桌面上点击“返回游戏模式”按钮。

第一次设置/运行游戏

要在Steam中运行XIVLauncherCN,请首先打开Steam。然后启动XIVLauncherCN,点击左下角的齿轮图标以设置游戏数据路径以及Dalamud注入相关设置。在确保您做出更改后,请单击确认按钮。接着,输入您的用户名,点击登录按钮,在弹出窗口中完成二维码扫描,并启动XIVLauncher以更新游戏。
出现窗口提示时,请点击“Steam”按钮,并选择“FINAL FANTASY XIV Online Free Trial”选项。稍等片刻后,最终幻想 XIV 国服就在Steam Deck上成功运行啦!!

最后

折腾完之后,登录上去看看,就可以关机了。 游戏阳痿是没救的。
 

📎 参考文章

 
 
💡
有关Notion安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~
  •  

同步豆瓣RSS到Twitter(X.com)的另一个方案:Dlvr.it

2023年8月15日 08:00

背景

notion image
💡
IFTTT在今年5月份的时候,把Twitter的同步部分功能加入到了会员清单里面,只允许Premium会员使用,不再免费开放,这造成我从5月份开始的读书、看电影和听音乐的内容无法再从豆瓣通过RSS的方式发送到Twitter(也许现在应该叫X,该死的马斯克)。
我大概是在7月份才发现这个问题,所以开始在Google上寻找各种IFTTT的替代品。基于豆瓣提供RSS的前提,以及自己的自身需要等情况,选择基于以下标准:
  • 免费:我的对自动化的需求仅停留在同步豆瓣的内容到Twitter,并不需要其他功能,所以我希望在花费上尽可能的免费。
  • 支持RSS → Twitter同步
  • 同步频率:最低限度每日一次
  • 非山寨厂商:由于需要Twitter账户的授权,所以我希望是一个尽可能可靠的服务商,从而避免对我的Twitter账户的滥用。
  • 尽量的操作简单
期间,我大概尝试了Microsoft的Automate、Make、Zapier等等,均无法直接或间接满足以上的需求。但是最终,我找到了dlvr.it

Dlvr.it配置同步RSS至Twitter

notion image
豆瓣提供RSS的方式输出动态信息,而在同步至Twitter的过程中,也是需要RSS。Dlvr.it恰巧就支持Website Feed。
notion image
在选择Website Feed之后,填入我们在豆瓣的rss地址,在Dlvr.it获取到feed信息之后,点击Connect,然后点击POST SETTING进入发布绑定页面。
notion image
在发布绑定页面可以编辑feed的名称,同步更新的时间(这个选择Share Immediately,也就是feed更新后立即发布),以及第一篇发什么(这个默认就可以),然后就可以进入到账户绑定页面。
notion image
点击Connect New即可进行Twitter账户的选择绑定,同时也支持Mastodon账户、Facebook账户、Instagram账户等等的绑定。

支持的社交媒体账户

Dlvr.it对目前的大多数热门社会化媒体账户都有支持,以下是可以进行绑定的列表:
  • Facebook
  • Threads
  • Pinterest
  • Linedin
  • Google Business Profile
  • Bluesky
  • Instagram
  • Tiktok
  • Reddit
  • Wordpress
  • Tumblr
  • Blogger
  • Discord
  • Mastodon
  • Feed
  • Slack
  • StockTwits
  • Nextdoor
上面标注加粗的都是我目前在用的服务。

Dlvr.it的价格

最重要的!最重要的!是免费的!
免费版支持2个社交账户,每个月最多发送50条同步信息,可以添加3个feed,feed的更新时间是3个小时。
当然也有收费的套餐,但是免费版本已经足够我们进行日常的同步使用。

2024年12月30日更新

目前dlvr.it免费版已经无法同步Twitter,但是通过Pipedream可以解决,具体可见:🐦使用Pipedream同步RSS至Twitter(X.com)
 
 
 
  •  

面向PageSpeed Insights的WordPress优化

2022年8月19日 08:00
😀
Does not use passive listeners to improve scrolling performance;本文介绍了如何针对Google的PageSpeed Insights工具优化WordPress网站性能。文章涵盖包括使用被动事件监听器改善滚动性能、优化最大内容绘制图像的加载、使用新一代图片格式如WebP、改善链接和按钮的可访问性等优化方案。

📝 WordPress优化内容

最近在使用Google提供的PageSpeed Insights(Lighthouse)进行WordPress的优化,希望在网页的访问速度以及访问体验上,能够做到更好。同时也发现不少坑可以填,也改变了我一些关于写博客的想法,这篇文章就主要用来记录填坑的记录。目前我在使用的WordPress版本为6.1.1版本。目前的优化情况如下:
notion image
总体来说情况还不错。但是在使用Google Adsense的Auto Ads之后,Performance表现分数有所下降,在将Auto Ads的<script>放在footer之后,依旧会存在js加载耗时长以及CLS偏移问题,之后一段时间的重心就放在如何优化Google Adsense的代码以及Google Fonts字体上。另外值得注意的是,在浏览器的开发者工具中,使用lighthouse所得的分数,相比PageSpeed Insights会高,最终应该是以PageSpeed Insights为准,毕竟更接近Google以及搜索引擎的视角。造成这种情况的原因是,Lighthouse使用的是自己网络与设备,相对来说网络情况与设备性能都会更好,而PageSpeed Insights所使用的是平均情况下的网络情况与设备,例如3G网络和模拟比较古早的移动设备性能,这也更贴合日常用户访问时所使用的网络与设备性能。
单纯在系统层面与网络的层面的优化就不在本篇文章里面进行叙述了,例如使用CDN内容分发网络进行加速,使用Redis等持久化缓存,通过sysctl.conf优化服务器吞吐性能,以及nginx优化等等。以下的操作内容,在完成代码修改之后,记得清空WordPress以及Cloudflare的缓存后再重新进行跑分,避免缓存影响。Cloudflare的清空缓存位置位于:
今天我们就面向PageSpeed Insights优化!

1. Does not use passive listeners to improve scrolling performance

这种情况一方面是因为在Cloudflare打开了Rocket Loader的功能(因为我在使用Cloudflare的CDN提供网站的加速)。可以在Speed选项卡中关掉。
Quote:
So that notice is being triggered for the Cloudflare Rocket Loader feature - you can disable this in the Speed tab of your Cloudflare dashboard.
另一方面,这个问题也来源于WordPress的自带评论功能存在移动端访问的缺陷,没有使用Passive Listeners。通过将如下代码添加至主题的js文件中可以解决,代码已经经过压缩:
但是需要注意,修复这个问题后,评分并不会上升,仅仅是减少一个红色报错。

2. Largest contentful paint image was lazily loaded.

一般这种问题都是出现在首页中的banner图,或者首页的轮播图。通过使用浏览器开发者工具,对主题代码定位,可以找到对应的图片使用了loading= “lazy”标签。解决方式也很简单,对引用图片the_post_thumbnail()的funtion添加指定loading参数,这样既可以不完全关闭WordPress默认的lazy加载策略,又可以让首屏大图直接进行加载。
代码的意思就是在调用文章缩略图的同时,赋予loading一个空值,替代WordPress默认提供的lazy值。

3. Serve images in next-gen formats

一般PageSpeed Insights的这个提示,都是由于使用了png、jpg、jpeg、bmp等旧格式图片,需要将图片格式修改为.webp格式。
也就是需要将网站所使用的传统png、jpg、jpeg、gif等格式图片,更换为.webp或者.avif格式文件,因为后面两者能够提供更好的压缩率以及更好的质量,从而缩小整体页面大小,提高加载速度。
什么是WebP格式:
WebP是一种同时提供失真与无失真压缩的图片档案格式,目的在于减少图片的档案大小、提高图片档案在网路上的传送时间,但同时又能和JPG与PNG等格式相同的图片品质。根据维基百科的资料显示,WebP的档案大小比PNG档少了45%,即使PNG档已经使用压缩工具进行压缩处理过,WrbP仍可以减少28%的档案大小。
notion image
转换格式的事情,我们通过插件解决。我现在在使用的是Plus WebP这个插件,可以通过ajax批量将已经上传媒体库的图片进行格式转换,同时支持质量选择,并替换掉旧文章中的媒体链接,而且难能可贵的是,没有花哨的界面,也不收费。
当然,Smush也是一个不错的选择。

4. Links do not have a discernible name

这个问题不是Performance(性能)问题,是一个Accessibility(易用性)问题,原因在于对于部分链接,未添加有效的说明。
通过PageSpeed Insights查看出现问题的<a href=""></a>的位置,定位之后,在<a>标签内增加:

5. Buttons Do Not Have Accessible Names

同样是一个Accessibility(易用性)问题,原因在于对于<button>,也就是按钮没有进行有效的描述。
通过PageSpeed Insights查看出现问题的<button></button>的位置,定位之后,在<button>标签内增加:

6. Serve static assets with an efficient cache policy

这个问题是由于缓存策略引起的,每个站点的缓存策略不同,处理方式也不同。但是需要注意,修复这个问题后,评分并不会上升。
例如在Moby这里,缓存的时间是由Cloudflare进行控制,那么就需要在Cloudflare的控制台中进行缓存时间(TTL)的修改。不用担心修改后无法及时更新内容,这个缓存策略主要是针对字体等静态内容。
具体位置:Caching - Configuration - Browser Cache TTL
在缓存时间的选择上,目前最低选择5天的情况下,是不会在PageSpeed Insights报错。
同时,在网站运行趋于稳定之后,对CSS以及JS修改减少,5天的缓存期也不会影响网站或博客的样式呈现。如果真的需要修改CSS样式或者JS,那么完成之后记得在Cloudflare清空一次缓存。

7. <code></code>标签内容太长,CSS不折行或样式错误问题

我在修改整个主题的过程中,发现code标签存在样式错误的问题。解决办法为找到<code>对应的样式,增加:

8. 尽量不要使用Google Adsense的Auto ads

Google Adsense的Auto Ads会主动在页面中插入更多JavaScript脚本,可能导致页面加载时间增加,尤其是在低端设备和网络环境下。而Google将页面速度纳入排名因素,如果广告脚本延迟了主要内容(如文本或图片)的加载,可能对SEO产生负面影响。同时,若Auto Ads导致交互延迟(如CLS 累积布局偏移、FID 输入延迟),可能影响页面在搜索结果中的排名。
周末时候,我需要抽出一些时间重新规划一下Google Adsense的位置。自动广告很简单,但是会严重影响页面的加载速度以及页面偏移量,体验非常差。

📝 WordPress优化总结

这篇文章写于我还是使用WordPress的时期,现在我已经将博客迁移到了NotionNext,并且也做了一定的优化,具体优化内容可以参考:
 
  •  

OpenWRT限速插件推荐:QoS Mate

2024年9月19日 08:00
😀
OpenWRT上的Qos插件并不算太多,相对知名的有luci-app-sqm和OpenWRT官方的tc,今天为大家介绍一款OpenWRT新的Qos插件:QosMate
Qos插件的主要作用是管理局域网与公网之间的网络流量,通过不同的算法,对不同的流量分配优先级,从而提高整体的网络性能。在我这种长期上下行跑满的网络环境下(BT、PCDN等等),如果不想因为上传或下载服务影响到家庭网络日常的使用,例如打游戏、观看流媒体等等,配置Qos还是有很大的必要。

📝 QosMate介绍

QosMate是最近在OpenWRT论坛上新发布的一个OpenWRT插件,支持几乎全部OpenWRT架构,不论是X86mipsel_24kcarm_cortex-a9还是arm_cortex-a7。同时由于QosMate作者已经提供了二进制的运行文件,所以也不需要预编译或重新编译固件安装,在安装上来说,已经是很方便了。

算法支持

QoSMate提供了两种队列调度算法供用户选择:HFSC(分层公平服务曲线)和CAKE(Common Applications Kept Enhanced)。
  • HFSC:适用于需要精细控制不同类型流量的环境。它通过分层调度来确保实时应用(如在线游戏、VoIP)的带宽优先分配。
  • CAKE:CAKE算法应该是大多数人都熟悉的一种算法,专为简化和优化家庭网络而设计,具有自动调整网络带宽的功能,帮助减少延迟问题,尤其是当多设备同时连接网络时。

插件自动配置

QoSMate提供了自动设置选项,通过自动速度测试来分析用户的网络情况并根据测试结果进行相应的调整。用户可以简单地点击“自动设置”,QoSMate会自动计算最佳的下载和上传速率,并根据实际网络带宽调整流量分配。同时,还允许用户输入游戏设备的IP地址,以确保游戏流量得到优先处理,这对需要低延迟的应用尤为有利。

游戏流量优化

除了自动配置功能,QoSMate还专门提供了针对游戏的流量优化选项。通过设置特定的队列调度算法(如pfifofq_codel),确保游戏数据包在传输中享有低延迟的优先级,从而提高在线游戏的流畅度,降低延迟和丢包。

与SQM对比

在讨论QoS管理时,不得不提到另一个常见的OpenWRT插件——SQM(Smart Queue Management)。作为广泛应用的插件,SQM 也能很好地管理家庭网络流量。QoSMate与SQM的功能对比如下:
特性
QoSMate
SQM
调度算法
支持HFSC和CAKE
主要支持CAKE和fq_codel
自动配置功能
支持,自动测速并根据结果进行限速及优先级配置
无自动测速功能,需要手动设置带宽限速
游戏优化
提供专门的游戏流量优化,支持手动指定设备优先级
无专门的游戏优化功能,主要依赖 CAKE 调度
灵活性
提供更多高级配置选项,适合有网络管理经验的用户
配置简单,适合普通用户
使用界面
配置更复杂,提供更精细的控制
界面简洁易用
QoSMate提供了比SQM更加灵活的网络流量管理功能,特别是针对游戏流量的优化能力,使其非常适合对网络质量有更高要求的用户。同时QosMate可以进行自动测速及自动配置,降低Qos插件的使用门槛。

📝 QosMate安装方法

QosMate目前并没有提供*.ipk 的包安装方式,无法通过opkg直接进行安装,需要通过SSH在终端进行安装。

安装须知

在安装QoSMate之前,请确保:
  1. 已禁用并停止任何现有的QoS服务或脚本(如SQM、Qosify、DSCPCLASSIFY、SimpleHFSCgamerscript等),以避免冲突。
  1. 重新启动路由器,以清除旧设置,确保一个干净的启动环境。
  1. Qos插件需安装在主路由上,即直接与外网进行连接的拨号路由。在旁路由或旁路网关上安装没有作用,同时如果使用硬件加速情况下,可能存在无法精确控制的情况。
  1. 使用更为贴近官方OpenWRT固件的版本,例如ImmortalWRT。选择固件可以参考《2025年国内OpenWRT主流固件对比 | Deep Router

QosMate后端执行文件安装

使用以下命令安装QoSmate后端(其中包含主脚本/初始化脚本/hotplug和配置文件):
 
如果无法正常连接raw.githubusercontent.com ,可使用下面命令安装,或替换为可使用的其他CDN:

Luci前端控制页面安装

与我们熟悉的其他OpenWRT插件安装方式不同,QosMate的前端UI控制界面安装是通过在/www/luci-static/resources/view文件夹下直接建立目录及页面文件方式安装,没有使用*.ipk的包安装方式,个人猜测可能是作者不想编译OpenWRT各种架构的软件包,但不一定对。
 
如果无法正常连接raw.githubusercontent.com ,可使用下面命令安装:

🤗 QosMate使用指南

安装后,通过下面的命令启动QoSmate服务:
或者,通过OpenWRT的Luci控制页面的方式进行使用。
  • 访问OpenWRT的LuCI控制网页界面,并打开网络 - QoSmate
notion image
  • 配置基本设置。对于基础配置,调整以下关键参数:
    • WAN接口:选择你的 WAN接口,一般为wan
    • 下载速度 (kbps):设置为实际下载速度的80%-90%
    • 上传速度 (kbps):设置为实际上传速度的80%-90%
    • 根队列调度算法:选择HFSC(默认)或CAKE
  • 应用更改。

自动配置

如果你更倾向于自动配置,QoSmate提供了自动设置功能:
  1. 在QoSmate设置页面,点击Start Auto Setup
  1. (可选)输入游戏设备的IP地址以优先处理其流量,地址支持IPv4和IPv6。
  1. 等待宽带网络测速和配置完成。
注意:基于路由器的测速可能会低估你的实际网速。为了获得更准确的设置,可以从局域网设备运行测速,例如使用fast.com或者speedtest,并手动输入结果。自动设置为初步配置提供了方便,但为了获得最佳性能,可能需要手动微调。

已知问题

如果通过/etc/init.d/qosmate 命令无法启动QosMate,或者通过Luci控制页面无法启动QosMate,并提示XHR错误,一般是因为raw.githubusercontent.com 在国内无法访问的原因,所以导致连接超时,需要修改/etc/init.d/qosmate 文件:
通过vim 打开/etc/init.d/qosmate ,修改SCRIPT_URLHOTPLUG_SCRIPT_URL 所对应的地址,替换为镜像CDN地址:

📎 参考文章

 
💡
有关OpenWRT安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~
  •  

Twitter Click'n'Save,Twitter视频下载脚本

2023年3月5日 08:00
📌
最近Twitter上小黄视频那么多,这个脚本你难道不尝试一下,把赛博菩萨们的资源都保存下来。Twitter Click'n'Save 是一个基于油猴脚本(greasyfork)的网页处理工具,主要用于在 Twitter 平台上保存多媒体资料(如视频、图片等)时进行自动化下载保存操作。

🍿 Twitter Click'n'Save介绍

notion image
Twitter Click'n'Save 是一个基于油猴脚本(greasyfork)的网页处理工具,主要用于在 Twitter 平台上保存多媒体资料(如视频、图片等)时进行自动化操作。 通过监测用户在 Twitter 上的点击触发下载推文(Tweet)内的视频或者图片,甚至是gif。特别是对于喜爱Twitter上的图片或视频内容的用户来说,这个工具提供了快速、高效的极为方便的收集和下载方式。而且这个油猴脚本不需要直接与 Twitter API 交互,因此可以确保用户可以安全且不受限制地使用它来下载推文中的多媒体资料。
相比同类脚本,Twitter Click'n'Save的另一个优点是,现在还在更新,其他大部分的脚本由于依赖Twitter的API,目前都处于暂停更新的状态。
同时,这个油猴脚本会让资料以最适当的文件名保存(下载)下来。而且该脚本还会保存Twitter推特视频下载历史,这样你就不用重新下载某个你不需要的多媒体文件了。
最近Twitter上小黄视频那么多,这个脚本你难道不尝试一下?

Twitter Click'n'Save增强功能:

  1. 把推文(Tweets)中的链接直接转化为链接以及在浏览器标题中合并;
  1. 高亮显示已访问的推文(Tweets)链接;
  1. 自动展开“折叠区域”,免除手动点开的麻烦;
  1. 隐藏签名栏、注册攻略、趋势和推荐话题等Twitter界面元素,但是不包括广告。

Twitter Click'n'Save使用方法:

仅需三步即可开始使用推特视频下载油猴插件:
  1. 点击下载按钮(从greasyfork网站下脚本),或直接点击这个链接
  1. 在你的用户脚本管理器(例如TampermonkeyGreasemonkeyViolentmonkey等)中确认安装即可。
  1. 刷新你的Twitter推特页面,然后你会在Tweets推文的视频或者图片左上角看到一个的按钮,点击之后即可下载对应的视频、图片或者GIF。已经下载过的视频或者图片,红色的按钮会变成绿色。

Twitter Click'n'Save下载地址:

Greasyfork下载地址:Twitter Click'n'Save
  •  

2025年国内OpenWRT主流固件项目对比

2025年3月7日 08:00
😀
从2018年我开始接触LEDE固件开始,到现在稳定使用ImmortalWRT作为软路由(旁路网关)的生产环境固件,中间也使用过各种OpenWRT的第三方固件。这些固件大多是在官方OpenWRT的基础上进行定制开发,提供更贴合国内用户使用习惯的功能。今天这篇文章,主要是对目前主流的第三方OpenWRT固件进行梳理与介绍,算是一篇OpenWRT入门的文章,提供一些固件选择上的建议。

📝 国内OpenWRT固件开发环境介绍

OpenWRT大概在2017年左右开始进入国内,那个时候OpenWRT还叫LEDE,但都是基于Linux系统内核所开发的路由器系统。OpenWRT在国内的发展,与两个关键词具有强关联关系:科学上网与软路由。科学上网作为部分互联网从业者的刚需,在需求的不断升级下,演变为需要家庭网络的设备均可以通过路由器使用,从而为智能电视、笔记本电脑、iPad等智能终端设备提供翻墙服务,且这一类人的动手能力本身就相对较强。而软路由,作为用户群体庞大的X86架构,天然与OpenWRT适配,在各种虚拟机的加持下,笔记本电脑、NUC等等搭配一个交换机,均可以成为高性能、高扩展性的路由器。
随着LEDE合并至OpenWRT,OpenWRT的开发和版本发布越来越规范化以及软路由设备的性能提升与推陈出新,国内主流的OpenWRT第三方固件也逐渐形成,大多数使用者在选择OpenWRT固件时,更趋向于选择这些知名开发者或团队开发的固件,原因如下:

功能的完善性

国内目前主流的OpenWRT系统固件分支的开发者,基本都处于持续更新状态,对上游OpenWRT的版本更新跟进相对更积极。同时由于OpenWRT官方固件对路由器常用功能的完善,以及软件库的建设,相对来说在高版本的固件中,功能更完善。

系统的稳定性

目前国内主流的OpenWRT开发者或开发团队均在OpenWRT固件开发领域深耕多年,例如大雕Lean的LEDE,从2020年开始开发维护至今;Lienol的OpenWRT固件从2019年开始开发维护至今等等。开发者和团队在OpenWRT系统、硬件驱动等方面的熟悉程度也相对较高,从而固件的稳定程度也更高,较少出现各种离奇的Bug。即便存在Bug,在Github进行反馈后也会即使进行修复。

软件生态的完整性

主流团队所开发的OpenWRT固件基本都有自己固件的opkg软件源,这些固件的软件源均为编译时所产生,同时经过开发者或开发团队的调整与优化,在兼容官方固件软件的同时,也能够提供一些类似科学上网或其他独特的固件加成。
对于通用插件,例如Docker、文件管理、DDNS、内网穿透、FullCone全锥NAT等等,目前主流的固件均可以正常支持,所以这些在下面的对比中,也不再作为独立对比项出现。部分科学上网插件,由于各种原因,未收录于官方OpenWRT软件源中,对于使用OpenWRT官方软件源的固件,由于未编译集成特定依赖(例如kmod-*),可能需要进行编译安装,这在一定程度上增加了固件的使用门槛,所以也会将软件源的丰富程度作为一个衡量指标。

几乎为0的盈利能力

国内的OpenWRT固件开发者基本都是为爱发电,在这方面所能获得的收益无限趋近于零。事实上国内开源开发者在通过开源项目获取的收益一直都不是很乐观,这也是大部分开发者放弃OpenWRT这个开源项目固件开发与维护的原因之一。目前在OpenWRT固件圈子内,主要的盈利与收费方式为:定制编译、闭源驱动固件收费、合作与推广特定硬件软路由等等。

📝 国内主流OpenWRT固件

目前在国内的软路由领域,OpenWRT的固件开发有且仅有以下五个主流的开发者或开发团队:
  • ImmortalWRT
  • Lienol源码固件
  • Lean源码固件
  • iStoreOS固件
  • KWRT固件(原openwrt.ai)
本篇文章的介绍重点也围绕这五个OpenWRT的第三方固件进行展开,对比项也与日常使用、固件安装与插件是否全面更为相关,系统特殊优化部分就不班门弄斧了。其他的第三方固件,类似X-WRT、CatWRT主要用于校园网,基于Lean开源固件,但追求稳定性,经过多所高校学生和开源开发者认证)、BleachWRT、eSir、DD-WRT或者其他恩山论坛的固件等等,或因使用规模较小,或目标使用场景限定,或仅编译添加软件包等,就不包括在这篇固件对比文章中。
在系统架构上,由于我个人使用的架构是X86_64的软路由,所以本片内容更倾向于在X86_64架构下的OpenWRT表现。

📝 ImmortalWRT

notion image
ImmortalWRT,作者1715173329 (Tianling Shen),项目自2020年3月1日开始。项目作为OpenWRT的fork分支,主要为国内用户提供更贴近国内网络情况的OpenWRT固件。
最新版本:ImmortalWRT 24.10,Linux Kernel版本为6.6

ImmortalWRT的优势:

  • 默认配置国内的软件源
  • 默认系统参数优化
  • ImmortalWRT软件源收录一些OpenWRT没有的应用,相对更全,例如Dae、OpenClash等科学上网插件。
  • 替换部分精简版系统软件为完整版(例如dnsmasq-full)
  • 支持opkg在线安装kmod模块
  • 内核跟进更为迅速
  • 提供在线编译与下载选项

ImmortalWRT的缺点:

  • 部分硬件驱动为开源版本,性能与稳定性可能不如闭源的商业版本
  • 软件源对闭源的软件不进行收录
  • 默认固件预分配磁盘空间较小,只有300MB,需要自己手动扩容。

ImmortalWRT的相关地址

IPK软件仓库:ImmortalWrt Downloads

📝 Lienol源码固件

Lienol源码固件,作者Lienol,项目自2019年开始。在硬件支持方面较为广泛,对多种硬路由均有很好的兼容与支持,这也使得对Lienol的当前OpenWRT版本难以确认。
最新版本:OpenWRT 24.10, 最高支持Linux Kernel版本为6.6.79 ,编译后版本默认空间450MB ,后续使用需要自行扩容

Lienol固件的优势:

  • 预置热门插件(例如Passwall、SSR Plus+等,这两个插件也是最早一批在OpenWRT上的师夷长技以制夷插件,预置插件降低使用门槛)
  • 相对OpenWRT官方固件更轻量化,移除非必要组件,适配低配设备,例如硬路由等
  • 传闻更稳定
  • 及时跟进上游OpenWRT官方更新

Lienol固件的缺点:

  • 轻量化及深度定制带来的系统兼容性下降,跨固件安装插件可能存在问题。
  • 定制化门槛较高,无法在线自定义编译固件,需手动自行编译固件。

Lienol的相关地址

📝 Lean源码固件(QWRT+)

Lean源码固件作者为coolsnowwolf (coolsnowwolf),又称大雕LEDE固件,同样是来自恩山论坛的大神。大雕Lean应该是国内很早一批开始做OpenWRT固件的开发者(那时候LEDE还没有合并到OpenWRT分支,大雕是在LEDE的基础上进行开发,大概是在18.0版本之前)。Lean的LEDE项目自2020年5月开始,初期提供了不要OpenWRT的插件,例如luci-app-adbyby、UnblockNeteaseMusicGO等插件,部分插件至今还在发挥作用。目前
最新版本:OpenWRT 24.10,最高支持Linux Kernel版本为6.6.75

Lean源码固件优势

  • 收费固件(QWRT)使用闭源驱动,性能更好,例如MTK系列,经miaoer指正,主要以高通QCA系列为主
  • 早期支持Fullcone NAT、SFE(Shortcut Forwarding Engine)混合加速等
  • 模块化代码结构通过 package/lean 目录提供独立的功能包
  • 第三方衍生版本较多,例如eSir、Sirpdboy等,插件与配置可共享使用。

Lean源码固件缺点

  • 部分使用闭源驱动的固件版本需要购买(QWRT)
  • 轻量化及深度定制带来的系统兼容性下降,跨固件安装插件可能存在问题。
  • 定制化门槛较高,无法在线自定义编译固件,需手动自行编译固件。
  • 版本过多,选择恐惧症。
  • 文档碎片化严重,分散在恩山论坛的各个角落
  • 需要使用OpenWRT官方软件源或镜像软件源

Lean的相关地址

📝 iStoreOS固件

notion image
iStoreOS固件的开发团队来自Koolshare,其目标是将OpenWRT打造为一个轻NAS系统,即在OpenWRT的基础上,通过磁盘与存储相关功能和插件的优化,使软路由具备NAS功能。同时对功能及界面进行优化,对新手软路由用户的体验较好,门槛较低。
最新版本:OpenWRT 22.03.7 (24.10 kernel 6.6目前处于内测阶段)

iStoreOS固件优势

  • 集成软件中心KoolCenter,插件安装门槛进一步降低
  • NAS功能集成,适合有内网存储与传输的用户
  • 功能界面优化,更适合新手入门使用
  • 颜值相对较高
  • 升级时可保留插件
  • 支持在线升级,免刷固件

iStoreOS固件缺点

  • 固件内部分插件闭源
  • 无法在线定制固件
  • 硬路由兼容范围较窄(仅支持ARS2、H6XK、H88K、R2S、R4S、R4SE、R5S、R66S、R68S、R6S、RPI4、RTD1619B、Station P2、T68M、X86_64等)
  • 系统版本落后,对新版本插件可能存在不兼容

iStoreOS相关地址:

Github:iStoreOS

📝 KWRT固件(原kiddin9固件)

notion image
KWRT固件作者kiddin9,最早是开发了OpenWRT的在线编译网站,后续在用户数量增长之后,开始进行第三方固件的开发。
最新版本:OpenWRT 23.05

KWRT固件优势

  • 提供自建软件仓库(软件源),插件数量有保证
  • 提供在线编译及自定义编译
  • 预置配置支持编译时选择,例如伪装成iStoreOS、预置Docker、预置科学上网插件等
  • 支持一键配置旁路由模式,降低旁路由用户使用门槛
  • 支持opkg在线安装k-mod模块

KWRT固件缺点

  • 在线固件编译需要登录,免费账户存在限制
  • 内核版本跟进不及时
  • 开发者较少为系统进行定制优化

KWRT相关地址:

在线编译固件:https://openwrt.ai/

🤗 总结归纳

ImmortalWRT
Lienol源码固件
Lean源码固件(QWRT+)
iStoreOS
KWRT固件(原kiddin9固件)
最新OpenWRT版本
24.10
24.10
24.10
22.03
23.05
最新内核版本
6.6
6.6
6.6
5.15
5.15
在线定制编译(固件选择器)
固件软件源
自建软件源
官方软件源
官方软件源(腾讯云)
自建软件源
自建软件源
kmod模块安装
上游版本跟进
帮助文档
插件数量
丰富
较少
较少
丰富
丰富
付费
免费
免费
闭源驱动版本需付费
免费
定制固件有限额,按需付费
  • 在线定制编译:即固件是否提供在线编译选择器,并提供编译时预装插件选择和预执行脚本配置系统
  • 固件软件源:使用自建软件源还是官方软件源。一般来说,自建软件源的插件数量大于官方软件源,同时在国内的访问情况更好。
  • 上游版本跟进:是否及时跟进OpenWRT官方版本
  • 帮助文档:是否提供帮助手册用于配置OpenWRT系统,或提供Debug手册等。
  • 插件数量:软件源提供的*.ipk 插件数量。当软件源未提供插件的*.ipk文件时,部分情况下需要通过编译来进行安装,麻烦。
  • 付费:是否固件是否收费或付费情况。
综上所述,ImmortalWRT是我最为推荐具有一定动手能力的用户使用的固件,也是我目前在使用的固件。固件系统纯净且稳定,没有乱七八糟的高大全,也就没有了乱七八糟的依赖关系和满目录拉屎的配置文件,同时又提供免费的在线编译与定制化编译软件包,也支持uci-defaults自定义首次运行脚本配置。同时开发者社区也很活跃,有Telegram群组,即便是出现问题解决起来也很快。
个人不太推荐使用恩山论坛的各种高大全固件,作为系统洁癖的我,一方面担心这些开发者编译的固件不够稳定,另一方面也担心系统存在后门。

📎 参考文章

 
💡
有关OpenWRT安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~ 版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
  •  

OpenWRT路由动态域名解析(DDNS)配置指南|no-ip.com实战教程

2025年2月28日 08:00
😀
DDNS(Dynamic Domain Name System)是动态IP家庭网络实现远程访问的核心技术,旨在解决普通家庭宽带IP地址随机变化的痛点。将你随时变化的公网IP地址(如:58.210.76.123)自动绑定到一个固定域名(如:yourhome.ddns.net),从而可以通过域名直接访问家庭网络,而不用担心因为IPv4地址变化而造成的无法访问。

📝 为什么需要动态域名解析?

当你的家庭网络满足以下条件时,DDNS是在非家庭网络环境下,远程访问家庭内部局域网设备的必备方案:
  1. 从运营商获取动态公共IP地址(非固定IP,也不一定是公网IPv4地址)
  1. 需要远程访问内网设备(如:NAS存储、IP摄像头、WEB服务器)
  1. 主路由器不支持DDNS功能(常见于运营商定制光猫)

📝 网络拓扑示意图


📝 配置三部曲(附具体操作指令)

步骤①:注册域名服务

✅ 推荐选择 no-ip.com 免费套餐。登录后,通过左侧菜单的NO-IP HOSTNAME添加新的动态域名并配置生成DDNS KEY。添加完成域名后,需要记录Username和Password,用于后续在DDNS相关程序中使用。需要注意的是,NO-IP.COM 的IPv4和IPv6动态域名解析是分开的,如果需要双栈解析,需要配置两个动态域名。
notion image
✅ 创建类似yourhome.ddns.net的二级域名,no-ip.com提供了很多二级域名后缀可供选择。

步骤②:OpenWRT软件安装

大部分软件源均有ddns-scripts的安装包,如果你所使用的软件源没有,且无法使用Lucky或者DDNS-GO等替代品,那么也可以参考《OpenWRT 软件源整理》修改OpenWRT的OPKG软件源。
⚠️ 注意:需保持设备联网状态,安装耗时约2分钟;同时,如果需要Luci图形界面,也可以使用Lucky或者DDNS-GO

步骤③:配置文件修改

使用SSH连接后编辑/etc/config/ddns

📝 疑难解答要点

Q:如何验证配置成功? A: 执行日志查看指令:
成功时显示good [你的公网IP]响应
Q:公网IP检测失败怎么办? ✅ 尝试替换ip_url为以下服务:

📝 最佳实践建议

  1. 安全加固:建议开启两步验证生成独立API密码
  1. 端口转发规则:在主路由设置仅限于必要端口
  1. 自动续期:no-ip免费域名需每月登录确认
  1. 备选方案:可同步配置Cloudflare DDNS
  1. IP更新频率限制:多数DDNS限制5分钟/次的更新请求,高频触发会被暂时封禁
  1. 地域性屏蔽风险:部分国外服务商域名(如.ddns.net)可能受区域防火墙干扰
  1. 数据隐私条款:检查服务商的隐私政策,避免监控请求日志(优先选择DuckDNS等开源方案)
  1. 重要服务建议至少配置两个不同提供商的DDNS,通过DNS轮询(Round Robin)实现故障转移,例如主用Dynu+备用ClouDNS。

📝 免费的DDNS服务提供商

服务商
免费域名示例
核心优势
核心限制
适合场景
DuckDNS
xxx.duckdns.org
开源/无需注册/API简洁
仅4个子域名可绑定
树莓派/IoT设备
no-ip.com
xxx.ddns.net
客户端支持广泛/稳定性高
需30天登录验证避免过期
家庭NAS/摄像头监控
Afraid.org
xxx.afraid.org
支持自定义域名/子域名不限量
界面老旧/唤醒邮件可能进垃圾箱
开发者/多设备用户
ClouDNS
xxx.ip-dynamic.com
支持IPv6/流量统计功能
每月需手动激活服务(官网点一次)
IPv6网络环境
Dynu
xxx.dynu.net
Web管理友好/API灵活
域名续期需手动跳转操作
小型企业远程办公
华为云DDNS
需自有域名
国内访问延迟低/解析速度快
需已注册备案域名
中国大陆本地化服务

📎 参考文章

💡
任何配置问题,欢迎在评论区留下你的网络拓扑和使用场景! 版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
  •  

MikroTik RouterOS 7.18更新内容

2025年2月28日 08:00
😀
MikroTik RouterOS 7.18更新已经出来大概1周多的时间了,我也第一时间(出去游玩回来之后)进行了更新。相比RouterOS 7.17版本,RouterOS 7.18版本的更新日志非常的长,且内容细碎,所以进行了一部分整理。截至到目前,RouterOS 7.18.1版本也已经更新。
notion image

📝 MikroTik RouterOS 7.18更新内容

▍关键功能更新

1. IPv6全面加速

  • L2TP/VXLAN/IPsec全面支持IPv6硬件加速
  • /31 CIDR支持(优化点对点链路子网划分)

2. BTRFS高级存储功能

  • 支持在线调整RAID阵列、子卷快照、数据去重
  • 通过SSH执行btrfs send/receive跨设备同步数据

3. 5G/LTE增强

  • ⚡ 新增eSIM管理(支持动态配置认证)
  • Quectel RG255C-GL等新款工业模组适配
  • 5G CA(载波聚合)信息可视化(需支持模组)

4. 企业级流量管控

改进点
CLI验证命令
SMB多版本兼容性修复
/file/smb/shares print
CAKE QoS智能限速
/queue type/print where name="CAKE"
万级队列稳定性提升
/system resource monitor

5. 硬件芯片级加速

  • CCR2116的IPsec吞吐提升至2.4Mpps
  • CRS354支持VXLAN硬件卸载

6. 容器Container功能优化

  • 修改默认容器镜像变更为https://lscr.io ,避免部分区域Dockerhub无法访问
  • 支持访问容器镜像时使用HTTP重定向(反向代理成为可能)
  • 允许通过 remote-image 属性指定容器镜像地址
  • 默认使用容器根目录的父目录进行解压,使得容器层文件直接下载到目标磁盘

▍关键缺陷修复清单(按风险等级分类)

高危漏洞修复

  • CVE-2024-2983:HTTP API未授权访问(用户管理模块)
  • 无限MAC更新循环:Bridge模块内存泄漏漏洞(v7.17引入)
  • PPPoE服务崩溃:部分Alpine架构设备IPsec异常

业务连续性改进

  1. Safe-Mode增强/system script add name=pre-upgrade source={...}(新增安全模式脚本接口)
  1. 动态DNS容灾/ip cloud set back-to-home-files=yes(新增云端配置恢复)
  1. 硬件兼容性
    • 华为SP570/580网卡驱动支持
    • 修正RB4011默认网口命名冲突

    ▍性能对比实测

    测试设备:CCR2004-16G-2S+
    场景
    7.16.8
    7.18beta6
    提升率
    WireGuard 1K隧道
    78Kpps
    106Kpps
    35%↑
    IPv6 BGP收敛
    420ms
    280ms
    33%↓
    SMB多客户端吞吐
    850Mbps
    1.1Gbps
    29%↑

    ▍升级指南(注意事项)

    1. 强制预检清单
      1. 回滚策略
        • 保留7.16系统镜像:/system backup save name=pre718 exclude=" sensitive-data"
        • 升级后24小时内执行基线性能测试
        1. 延迟更新场景以下设备建议观察1个月后再升级:
          • RB2011/RB951等MIPSBE架构设备
          • 使用BG77 LTE模组的Chateau系列

          ▍典型配置案例

          MLAG高可用集群(新增心跳检测)

          IPv6快速部署模板

          ▍完整更新日志

          *) 60ghz - improved system stability; *) bgp - fixed certain affinity options not working properly; *) bgp - improved system stability when printing BGP advertisements; *) bgp - make NO_ADVERTISE, NO_EXPORT, NO_PEER communities work; *) bond - added transmit hash policies for encapsulated traffic; *) bridge - added MLAG heartbeat property; *) bridge - avoid duplicate VLAN entries with dynamic wifi VLANs; *) bridge - do not reset MLAG peer port on heartbeat timeout (log warning instead); *) bridge - fixed endless MAC update loop (introduced in v7.17); *) bridge - fixed missing S flag on interface configuration changes; *) bridge - improved stability when using MLAG with MSTP (introduced in v7.17); *) bridge - improvements to MLAG host table updates; *) bridge - process more DHCP message types (decline, NAK, inform); *) bridge - removed controller-bridge (CB) and port-extender (PE) support; *) bridge - show VXLAN remote-ip in host table; *) btest - allow limiting access to server by IP address; *) certificate - fixed localized text conversion to UTF-8 on certificate creation; *) chr - fixed limited upgrades for expired instances; *) chr/x86 - added network driver for Huawei SP570/580 NIC; *) chr/x86 - fixed error message on bootup; *) chr/x86 - fixed GRE issues with ice network driver; *) chr/x86 - Realtek r8169 updated driver; *) cloud - added "Back To Home Files" feature; *) cloud,bth - use in-interface matcher for masquerade rule; *) console - added dsv.remap to :serialize command to unpack array of maps from print as-value; *) console - added file-name parameter to :serialize; *) console - allow ISO timezone format in :totime command; *) console - allow tab as dsv delimiter; *) console - allow to toggle script error logging with "/console settings log-script-errors"; *) console - do not autocomplete arguments when match is both exact and ambiguous; *) console - do not show numbering in print follow; *) console - fixed "get" and "proplist" for certain settings; *) console - fixed issue where ping command displays two lines at the same time; *) console - fixed issue with disappearing global variable; *) console - implement scriptable safe-mode commands and safe-mode handler; *) console - improved hints; *) console - log errors within scripts to the system log; *) console - make non-pseudo terminals work with imports; *) console - put !empty sentence when API query returns nothing; *) console - renamed "back-to-home-users" to "back-to-home-user"; *) container - add default registry-url=https://lscr.io; *) container - allow HTTP redirects when accessing container registry; *) container - allow specifying registry using remote-image property; *) container - improved image arch choice; *) container - use parent directory of container root-dir for unpack by default, so that container layer files are downloaded directly on target disk; *) defconf - added IPv6 FastTrack configuration; *) device-mode - do not allow changing CPU frequency if "routerboard" is not allowed by device mode (introduced in v7.17); *) device-mode - fixed feature and mode update via power-reset on PPC devices; *) dhcpv4-client - allow selecting to which routing tables add default route; *) dhcpv4-client - fixed default option export output; *) dhcpv4-server - fixed "active-mac-address" update when client has changed MAC address; *) dhcpv4-server - fixed framed-route removal; *) dhcpv4-server - fixed lease assigning when server address is not bind to server interface (introduced in v7.17); *) dhcpv6-client - added "validate-server-duid" option; *) dhcpv6-client - allow specifying custom DUID; *) dhcpv6-client - do not run script on prefix renewal; *) dhcpv6-relay - added option to create routes for bindings passing through relay; *) dhcpv6-server - respond to client in case of RADIUS reject; *) discovery - advertise IPv6 capabilities based on "Disable IPv6" global setting; *) discovery - improved stability during configuration changes; *) discovery - report actual PSE power-pair with LLDP; *) discovery - use power-via-mdi-short LLDP TLV only on pse-type1 802.3af; *) disk - add disk trim command (/disk format-drive diskx file-system=trim); *) disk - allow to add swap space without container package; *) disk - allow to set only type=raid devices as raid-master; *) disk - cleanup raid members mountpoint, improve default name of file base block-device; *) disk - do not allow adding device in raid when major settings mismatch in superblock and config; *) disk - do not allow configuring empty slot as raid member; *) disk - fix detecting disks on virtual machines; *) disk - fixed removing device from raid while resyncing; *) disk - fixed setting up dependent devices when file-based block-device becomes available; *) disk - fixed showing free space on tmpfs (introduced in v7.17); *) disk - improved stability; *) disk - improved system stability when SMB interface list is used (introduced in v7.17); *) disk - mount multi-device btrfs filesystems more reliably at startup; *) disk - set non-empty fs label when formatting by default; *) dns - do not show warning messages for DNS static entries when they are not needed; *) ethernet - fixed issue with default-names for RB4011, RB1100Dx4, RB800 devices; *) ethernet - fixed link-down on startup for ARM64 devices (introduced in v7.16); *) ethernet - improved link speed reporting on 2.5G-baseT and 10Gbase-T ports; *) fetch - added "http-max-redirect-count" parameter, allows to follow redirects; *) fetch - do not require "content-length" or "transfer-encoding" for HTTP; *) file - added "recursive" and "relative" parameters to "/file/print" for use in conjunction with "path" parameter; *) file - allow printing specific directories via path parameter; *) file - improved handling of filesystems with many files; *) firewall - allow in-interface/in-bridge-port/in-bridge matching in postrouting chains; *) firewall - fixed incorrectly inverted hotspot value configuration; *) firewall - increased maximum connection tracking entry count based on device total RAM size; *) hotspot - fixed an issue where extra "flash/" is added to html-directory for devices with flash folders (introduced in v7.17); *) igmp-proxy - fixed multicast routing after upstream interface flaps (introduced in v7.17); *) iot - added new "iot-bt-extra" package for ARM, ARM64 which enables use of USB Bluetooth adapters (LE 4.0+); *) iot - improvements to LoRa logging and stability; *) iot - limited MQTT payload size to 32 KB; *) ip - added support for /31 address; *) ippool - added pool usage statistics; *) ipsec - added hardware acceleration support for hEX refresh; *) ipsec - fixed chacha20 poly1305 proposal; *) ipsec - fixed installed SAs update process when SAs are removed; *) ipv6 - added ability to disable dynamic IPv6 LL address generation on non-VPN interfaces; *) ipv6 - added FastTrack support; *) ipv6 - added routing FastPath support (enabled by default); *) ipv6 - added support for neighbor removal and static entries; *) ipv6 - fixed configuration loss due to conflicting settings after upgrade (introduced in v7.17); *) l2tp - added IPv6 FastPath support; *) l3hw - added initial HW offloading for VXLAN on compatible switches; *) l3hw - added neigh-dump-retries property; *) l3hw - fixed /32 (IPv6 /128) route offloading when using interface as gateway; *) l3hw - fixed partial route offloading for 98DX224S, 98DX226S, 98DX3236 switches; *) l3hw - respect interface specifier (%) when matching a gateway; *) log - added CEF format support for remote logging; *) log - added option to select TCP or UDP for remote logging; *) lte - added at-chat support for EC21EU; *) lte - added basic support for Quectel RG255C-GL modem in "at+qcfg="usbnet",0" USB composition; *) lte - added confirmation-code parameter for eSIM provisioning; *) lte - added initial eSIM management support; *) lte - fixed cases where the MBIM dialer could get stuck; *) lte - fixed Huawei ME909s-120 support; *) lte - fixed interface recovery in mixed multiapn setup for MBIM modems; *) lte - fixed missing 5G info for "/interface lte print" command; *) lte - fixed missing IPv6 prefix advertisement on renamed LTE interfaces; *) lte - fixed prolonged reboots on Chateau 5G ax; *) lte - fixed SIM slot initialization with multi-APN setups; *) lte - improved automatic link recovery and modem redial functions; *) lte - improved initialization for external USB modems; *) lte - lte monitor, show CQI when modem reports it as 0 - undetectable, no RX/down-link resource block assigned to modem by provider; *) lte - R11eL-EC200A-EU fixed online firmware upgrade and added support for firmware update from local file; *) lte - R11eL-EC200A-EU improved failed connection handling and recovery; *) lte - reduce modem initialization time for R11e-LTE-US; *) lte - reduced SIM slot switchover time for modems with AT control channel (except R11e-LTE); *) lte - removed nonexistent CQI reading for EC200A-EU modem; *) net - added initial support for automatic multicast tunneling (AMT) interface; *) netinstall - try to re-create socket if link status changes; *) netinstall-cli - fixed DHCP magic cookie; *) ospf - fixed DN bit not being set; *) ospfv3 - fixed ignored metric for intra-area routes; *) ovpn - added requirement for server name when exporting configuration; *) ovpn - disable hardware accelerator for GCM on Alpine CPUs (introduced in v7.17); *) ovpn-client - added 1000 character limit for password; *) pimsm - fixed incorrect neighbor entry when using lo interface; *) poe-out - added "power-pair" info to poe-out monitor (CLI only); *) poe-out - added console hints; *) poe-out - added new modes "forced-on-a" and "forced-on-bt" (CLI only); *) poe-out - upgraded firmware for 802.3at/bt PSE controlled boards (the update will cause brief power interruption to PoE-out interfaces); *) port - improved handling of USB device plug/unplug events; *) ppc - fixed HW encryption (introduced in v7.17); *) ppp - add support for configuration of upload/download queue types in profile; *) ppp - added support for random UDP source ports; *) ppp - fixed setting loss when adding new ppp-client interface for BG77 modem from CLI; *) ppp - properly cleanup failed inactive sessions on pppoe-server; *) ptp - do not send packets on STP blocked ports; *) ptp - improved system stability; *) qos-hw - fixed global buffer limits for 98CX8410 switch; *) queue - improved system stability when many simple queues are added (introduced in v7.17); *) queue - improved system stability; *) queue - prevent CAKE bandwidth config from potentially causing lost connectivity to a device; *) resolver - fixed static FQDN resolving (introduced in v7.17); *) rip - fixed visibility of added key-chains in interface-template; *) rose-storage - add btrfs filesystem add-device/remove-device/replace-device/replace-cancel commands to add/remove/replace disks to/from a live filesystem; *) rose-storage - add btrfs filesystem balance-start/cancel commands; *) rose-storage - add btrfs filesystem scrub-start, scrub-cancel commands (CLI only); *) rose-storage - add btrfs transfers, supports send/receive into/from file for transferring subvolumes across btrfs filesystems; *) rose-storage - add support to add/remove btrfs subvolumes/snapshots; *) rose-storage - added support for advanced btrfs features: multi-disk support, subvolumes, snapshots, subvolume send/receive, data/metadata profiles, compression, etc; *) rose-storage - allow to separately mount any btrfs subvolumes; *) rose-storage - fixes for btrfs server; *) rose-storage - update rsync to 3.4.1; *) rose-storage,ssh - support btrfs send/receive over ssh; *) route - added /ip/route/check tool; *) route - added subnet length validation on route add; *) route - do not use disabled addresses when selecting routing id; *) route - fixed busy loops (route lockups); *) route - fixed incorrect H flag usage; *) route - improved stability when polling static routes via SNMP; *) route - properly resolve imported BGP VPN routes; *) routerboot - disable packet switching during etherboot for hEX refresh ("/system routerboard upgrade" required); *) routerboot - improved stability for IPQ8072 ("/system routerboard upgrade" required); *) routing-filter - improved stability when using large address lists (>5000); *) routing-filter - improved usage of quotes in filter rules; *) sfp - fixed missing "1G-baseX" supported rate for NetMetal ac2 and hEX S devices; *) sfp - improved linking with certain QSFP modules on CRS354 devices; *) sfp - improved system stability with some GPON modules for CCR2004 and CCR2116 devices; *) sfp,qsfp - improved initialization and linking; *) smb - fixed connection issues with clients using older SMB versions (introduced in v7.17); *) smb - fixes for SMB server; *) smb - improved system stability; *) snmp - added "mtxrAlarmSocketStatus" OID to MIKROTIK-MIB; *) snmp - added disk serial number through description field; *) snmp - sort disk list and assign correct disk types; *) ssh - improved channel resumption after rekey and eof handling; *) supout - added IPv6 settings section; *) supout - added per CPU load information; *) switch - allow entering IPv6 netmask for switch rules (CLI only); *) switch - fixed dynamic switch rules created by dot1x server (introduced in v7.17); *) switch - fixed issues with inactive hardware-offloaded bond ports; *) switch - improved egress-rate on QSFP28 ports; *) switch - improved system stability for CRS304 switch; *) switch - improvements to certain switch operations (port disable, shaper and switch initialization); *) system - added option to list and install available packages (after using "check-for-updates"); *) system - do not allow to install multiple wireless driver packages at the same time; *) system - do not cause unnecessary sector writes on check-for-updates; *) system - enable "ipv6" package on RouterOS v6 downgrade if IPv6 is enabled; *) system - fixed a potential memory leak that occurred when resetting states after an error; *) system - force time to be at least at package build time minus 1d; *) system - improved HTTPS speed; *) system - improved stability on busy systems; *) system,arm - automatically increase boot part size on upgrade or netinstall (fixed upgrade failed due to a lack of space on kernel disk/partition); *) tile - improved system stability; *) traceroute - added "too many hops" error when max-hops are reached; *) traceroute - limit max-hops maximum value to 255; *) user - improved authentication procedure when RADIUS is not used; *) vxlan - added disable option for VTEPs; *) vxlan - added IPv6 FastPath support; *) vxlan - added option to dynamically bridge interface and port settings (hw, pvid); *) vxlan - added TTL property; *) vxlan - changed default port to 4789; *) vxlan - fixed unset for "group" and "interface" properties; *) vxlan - replaced the "inherit" with "auto" option for dont-fragment property (new default); *) webfig - added confirmation when quitting in Safe Mode; *) webfig - do not reload form when failed to create new object; *) webfig - fixed "TCP Flags" property when inverted flags are set in console; *) webfig - fixed datetime setting under certain menus; *) webfig - fixed displaying passwords; *) webfig - fixed Switch/Ports menu not showing correctly; *) webfig - hide certificate information in IP Services menu when not applicable; *) webfig - remember expand/fold state; *) wifi - added max-clients parameter; *) wifi - avoid excessive re-transmission of SA Query action frames; *) wifi - fix issue which made it possible for multiple concurrent WPA3 authentications to interfere with each other; *) wifi - implement steering parameters to delay probe responses to clients in the 2.4GHz band; *) wifi - log a warning when a client requests power save mode during association as this may prevent successful connection establishment; *) wifi - re-word the "can't find PMKSA" log message to "no cached PMK"; *) wifi - try to authenticate client as non-FT client if it provides incomplete set of FT parameters; *) wifi-qcom - fix reporting of radio minimum antenna gain for hAP ax^2; *) wifi-qcom - prevent AP from transmitting broadcast data unencrypted during authentication of first client; *) winbox - added "Copy to Provisioning" button under "WiFi/Radios" menu; *) winbox - added "Last Logged In/Out" and "Times Matched" properties under "WiFi/Access List" menu; *) winbox - added "Reset Alert" button under "IP/DHCP Server/Alerts" menu; *) winbox - added L3HW Advanced and Monitor; *) winbox - added missing options under "System/Disk" menu; *) winbox - added TCP settings under "Tools/Traffic Generator/Packet Templates" menu; *) winbox - do not show 0 Tx/Rx rate under "WiFi/Registration" menu when values are not known; *) winbox - do not show LTE "Antenna Scan" button on devices that do not support it; *) winbox - fixed locked input fields when creating new certificate template; *) winbox - show LTE "CA Band" field only when CA info is available; *) winbox - show warning messages for static DNS entries; *) x86 - fixed "unsupported speed" warning;

          📎 参考文章

           
          💡
          有关RouterOS安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~ 版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
          •  

          Dae搭配AdGuard Home使用指南

          2024年11月7日 08:00
          😀
          在之前配置好家庭网络环境后,稳定运行了很久,大致上也基本满足日常需要,但是还有一些小的问题需要去解决。之前使用的是Dae + MosDNS配置,由DAE劫持流量进行最后的分流和代理,MosDNS主要用于DNS的并发请求和使用DOH、DOT服务,同时也负责DNS去广告。在使用过程中,由于MosDNS的队列化和无图形界面配置,进行特殊规则配置过于麻烦,最终决定还是在整体的DNS链路中增加AdGuard Home单独负责去广告和相关特殊规则的指定,MosDNS仅作为DNS转发器使用,不再兼顾过滤器的作用。
          由于Dae(大鹅)的DNS处理方式与OpenClash、Singbox等不同,是通过劫持流量方式实现,无法直接指定端口进行DNS劫持,所以主要的配置部分在于Dae,MosDNS与AdGuard Home的配置部分基本维持原有配置即可。
          另一个配置前提:由于我在主路由RouterOS上已经使用ospf进行了国内外流量的分流,所以此教程可能不一定适合于完全使用Dae进行分流的用户,如果存在分流错误等问题,可以尝试修改Global配置中的连接选项为domain++模式。

          📝 Dae配置部分

          Daed安装

          其实这部分说明文档里面已经很完善,可以参考Github上的教程。我自己使用的是Daed,目前最新的Daed版本是0.9.0版本。相比于Dae,Daed提供一个可视化的网页管理面板,日常进行自定义配置时候更为方便一些。在资源占用上,Daed相比Dae占用的内存要多一些,大概多出100mb左右。
          Debian或者Ubuntu安装执行如下命令:
          其他系统可参考:
          getting-started.md
          daeuniverse

          Global配置

          连接选项使用domain模式,其他无需修改。不需要使用Dae的domain+domain++ 模式。

          DNS

          由于处理DNS分流和解析不再由Dae负责,所以DNS部分的配置非常简单:
          其中adg即AdGuard Home,配置为AdGuard Home监听的地址和端口。此处我使用的默认53端口,如果53端口已经被占用或者存在其他问题,可替换为其他非标端口。

          路由部分

          路由部分需要在原有的配置基础上,对AdGuard Home进程、MosDNS进程以及系统默认的NetworkManager进程使用direct(must)规则特殊处理,从而避免产生路由回环。
          同时,为了在AdGuardHome中可以正确的显示各设备的IP地址,需要对geoip:private 规则进行修改,使用direct(must)规则。如果使用的是direct规则,那么在AdGuard Home中显示的设备信息均为localhost(127.0.0.1)

          Route整体规则

          整体规则大致如下,里面有一些自定义的配置,可以根据自己需要进行删减。

          direct与direct(must)区别

          must_rules表示不将DNS流量重定向到dae并继续匹配。对于单一规则,directmust_direct的区别在于direct会劫持和处理DNS请求(用于流量分割使用),但must_direct不会。当存在DNS请求的流量循环时,must_direct很有用。must_direct也可以写成direct(must)
          在上述配置中,以AdGuard Home为例,即进程AdGuardHome匹配的规则不进行DNS流量的劫持和处理且为直连,由AdGuard Home及其上游进行处理,同时由于规则:
          将通过Google DNS的流量使用代理处理,从而避免DNS污染。

          📝 AdGuard Home配置部分

          AdGuard Home部分没有什么需要特别注意配置的,只需要指定上游DNS为Dae所在机器IP地址即可。需要注意的是,如果使用MosDNS作为Dae的DNS解析服务程序,AdGuard Home中不要指向MosDNS的地址,会造成内存泄露以及高CPU占用。公共DNS服务器可以参考:国内外DNS推荐列表 | Dolingou
          我所使用的MosDNS配置文件可以参考:mosdns-config-with-no-leak
          notion image

          🤗 总结归纳

          目前情况良好,暂时没有出现错误问题,且能够更方便的对特定客户端、域名进行放行。

          后续

          由于AdGuard Home与Dae处于同一台机器,在使用must_direct规则时会造成DNS泄露问题,但如果使用direct规则,在AdGuard Home中又无法正常识别发出DNS请求的客户端,所以我最终还是选择在PVE中新建一个CT容器(LXC),单独负责AdGuard Home和Tailscale。AdGuard Home的上游DNS指向Dae所在的内网IP地址,同时在Dae中,对private部分规则使用direct规则,既满足避免DNS泄露的需要,又满足对各客户端DNS请求的管理。
          这也是我第一次使用LXC,CT模板使用的是alpine,目前对效能感到满意,在未开启AdGuard Home时,CPU占用几乎没有,内存占用13MB左右,开启AdGuard Home的情况下,单核CPU占用0.4%,内存占用不到50MB。
          在使用局域网其他机器作为DNS入口时,需要在Dae的Routing中增加以下配置,避免DNS请求环路,将下面的10.0.0.20 替换为你的DNS服务入口IP地址。
           
          同时由于内存泄露问题,建议使用Dae而非Daed,同样配置文件,在Dae下内存占用不到500M,但是Daed基本要奔着1G去了,长时间使用情况下,Daed的内存泄露问题更为严重。在Dae的版本上,目前我在使用Dae 0.9rc2情况下,存在CPU占用虚高问题,0.8版本未出现问题。
          我自身配置问题,与Daed无关,配置正确情况下,未发现Daed出现内存泄露情况。同时初始内存占用也没有1G。
          另外,如果使用其他机器作为DNS入口,那么其指向的DNS应为Dae所在机器的IP,不要直接指向MosDNS,由Dae再指向MosDNS,避免DNS重复劫持,造成内存泄露与CPU高占用,配置文件大致如下:
          AdGuard Home中的上游DNS指向Dae所在机器IP,同时Dae的DNS部分配置指向MosDNS端口

          关于AdGuard Home的卸载

          由于已经在LXC容器中单独部署了AdGuard Home,所以原来Debian机器上的AdGuard Home就可以卸载了,首先找到AdGuard Home二进制文件的位置,Debian/Ubuntu系统的位置一般位于/opt/AdGuardHome
          执行以下命令注销AdGuard Home相关服务
          删除AdGuard Home工作文件夹

          📎 参考文章

           
          💡
          有关AdGuard Home安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~
          •  

          使用Pipedream同步RSS至Twitter(X.com)

          2024年12月30日 08:00
          😀
          之前使用过IFTTTDlvr.it进行RSS到Twitter的同步,现在这两个平台都已经收费,无法继续白嫖。在尝试同步RSS到BlueSky的时候发现了PipeDream这个网站,允许用户使用Python或者NodeJS搭建简单的工作流,所以理论上也是可以将RSS同步到Twitter,例如个人博客、豆瓣在看在读等等支持通过RSS Feed输出的信息流。在完成实践并测试成功之后,有了这篇指南,希望可以帮助到需要的朋友。尽管Twitter已经改名叫X,但是我还是更习惯称呼它为Twitter,那是一个黄金时代。

          📝 RSS同步Twitter搭建前提

          • 一个Twitter开发者平台账号,申请入口为:Developer Platform,个人使用免费Plan即可,每个月允许500条POSTS。对于同步豆瓣或者个人博客来说,足够使用。Twitter开发者平台注册时会要求填写申请理由,例如:
          notion image
          我这里提供一份开发者平台申请理由范本,可根据自己需要修改:
          🛠
          Synchronize RSS to my personal X account for recording movies I have watched, music I have listened to, or content I have posted on my blog, etc. This functionality allows me to maintain a comprehensive and organized record of my personal experiences, preferences, and creative outputs. By integrating RSS feeds with my X account, I can easily keep track of the various forms of media I engage with, whether it's a captivating film that I watched over the weekend, a new album that I discovered and fell in love with, or an insightful blog post that I crafted and shared with my audience.
          This synchronization process not only enhances my personal organization but also serves as a digital diary of sorts, capturing my evolving tastes and interests over time. It provides a convenient way to look back at my past activities and reflect on how my preferences have changed or remained consistent. Moreover, this feature can be a valuable tool for personal branding, allowing me to showcase my diverse interests and creative endeavors to my network.
          Totally personal applications, this system is designed to cater to my individual needs and privacy preferences. It ensures that all the data being synchronized is managed within the confines of my personal X account, offering a secure and private space where I can store and access my records without any external interference. This level of personalization and control is crucial for maintaining the integrity of my digital identity and ensuring that my personal data remains protected and accessible only to me.
          In summary, this RSS synchronization feature transforms my X account into a multifunctional hub where I can document, organize, and reflect upon my personal and creative experiences. It's a tool that not only simplifies my daily interactions with various forms of media but also enriches my digital presence by offering a detailed and dynamic representation of my personal journey.
          • 一个PipeDream账号,申请入口为:pipedream,可以使用Google或者Github账号登录。同样免费计划即可,可以创建3个工作流,足够使用。

          📝 RSS同步Twitter配置流程

          获取Twitter Key And Tokens

          打开https://developer.x.com/en/portal/projects-and-apps,在左侧菜单点击Projects & AppsOverview ,然后系统已经自动生成了一个App,我们需要的是获取这个App的Api以及认证所需的Token。
          点击User authentication settings 下的Set Up 按钮,进入配置页面:
          notion image
          • App Permissions选择Read and write ,因为我们要发布推文;
          • Type of App选择Web App, Automated App or Bot
          • App InfoCallback URLWebsite URL 填写自己的域名,如果没有就填写pipedream的。
          • 点击Save 会输出一个Client ID和Token,但是这个不是我们需要的,没有什么用。
          返回Overview页面,点击PROJECT APP后面的小钥匙图标:
          notion image
          点击Access Token and Secret 后面的Generate 按钮,会生成Access Token和Access Token Secret,一定要复制保存下来,等下会用到。
          点击API Key and Secret 后面的Regenerate ,会生成API KeyAPI Key Secret,同样保存下来,等下在PipeDream中会用到。

          配置Pipedream环境变量

          现在假设你已经完成了Pipedream的注册,进入后管理后台,点击左侧菜单的Settings ,然后选择Environment Variables
          notion image
          点击右上的+ New Variable 添加新的变量,总计需要添加4条,对应关系如下:
          • TWITTER_ACCESS_SECRET : 获取的Access Token Secret
          • TWITTER_ACCESS_TOKEN : 获取的Access Token
          • TWITTER_API_SECRET : 获取的API Key Secret
          • TWITTER_API_KEY : 获取的API Key Secret
          对应关系不要搞乱,变量名称也不要有错误。

          配置Pipedream Project和Workflow

          点击左侧菜单的Projects ,然后点击右上角的+ New Project ,填写项目名称,建议填写英文,字数不要太多,因为如果想要删除项目,要重新输入一遍项目名称,很麻烦。例如我就填写Twitter,然后点击Create Project ,完成项目的创建。
          在列表中点击刚刚创建的项目名称,然后点击页面中硕大的一个+New 按钮,选择Workflow ,修改一下Workflow的名称,同样名称写的简单点,不然删除很麻烦,其他内容不用动,直接Create Workflow

          添加RSS Trigger触发器

          notion image
          点击Add Trigger ,先添加一个触发器。因为我们是想在RSS有新的条目时,自动发送一条推文,所以这里的触发器就是RSS Feed。
          notion image
          My Sources中选择New Item in RSS Feed
          notion image
          Timer :建议选择8小时查询一次,降低请求。UTC懒得选择的话,维持默认也可以。
          Feed URL :填写你要读取的RSS Feed地址。
          Published After:维持默认不用管。如果想避免发送重复内容或者一次发送太多,可以选择当前时间较前一点点的时间。
          点击Save and continue 完成Trigger触发器的配置。Pipedream会尝试读取你填写的RSS Feed地址,并返回读取结果。

          添加RSS触发动作

          完成上面RSS Trigger的创建之后,我们就需要配置当RSS有新的内容时,所要触发的动作,也就是在Twitter上发送一条推文。
          点击画板上,Trigger下面的+号来添加Action。
          notion image
          选择NodeRun Node Code
          notion image
          在右侧的代码编辑器中,复制下面的代码内容:
          然后点击Test 进行代码测试,如果没有问题的话,这时候你的Twitter中就会有一条自动发送消息。然后点击Deploy完成这个通过Pipedream推送RSS内容到Twitter的工作流部署。

          Twitter推文(Tweet)效果

          notion image
          效果大概如图所示(有点丑,但可以用),可根据自己需要对以下代码部分进行修改:
          之后如果我有新的代码调整,也会同步更新到这篇文章内。

          Twitter同步代码优化版本

          • 增加了针对影视、音乐、读书不同的emoji;
          • 增加了封面图上传功能;
          • 增加了错误判断。

          🤗 总结归纳

          整个教程整体来说没有太多的技术难度,主要就是一些复制与粘贴的工作。不过因为之前已经在Pipedream中使用了2个Workflow用于BlueSky的RSS同步,所以一共3个的Workflow限制目前刚刚好,如果再多的话,免费版的账号就不支持了。后续会尝试将BlueSky和Twitter的同步尝试写在一个Workflow里。
          如无意外,这应该是2024年的最后一篇正式文章。提前祝大家新年快乐,2025年一切顺利。

          2025/01/02 更新

          代码目前存在一个问题,当URL含有中文字符时,在Twitter会产生截断,我想想办法怎么修一下。

          📎 参考文章

           
          💡
          有关Workflow安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~
          •  

          OpenWRT配置Bird使用OSPF国内外动态路由分流

          2024年12月29日 08:00
          🛠
          之前写过一篇关于RouterOS上使用OSPF("Open Shortest Path First",翻译为中文是“开放式最短路径优先”)进行国内外动态路由分流的文章,当时就在想,国内使用RouterOS作为主路由的人群应该不是很多,大多数的人有这个需要的人,使用的主路由系统应该都是OpenWRT或者其衍生版本。今天的文章就把之前的坑补上,将在OpenWRT系统中,使用Bird实现OSPF动态路由的国内外分流。

          📝 OpenWRT配置动态路由背景

          • 主路由器:OpenWRTImmortalWrt 23.05.4 r28061-399f9a1db3 / LuCI openwrt-23.05 branch git-24.265.44782-0ff45d8
            • 光猫桥接,接口为wan
            • 内核版本为5.15.167(stable)
            • 架构X86_64
          • 旁路由(旁路网关):OpenWRT(ImmortalWrt 23.05.4 r28061-399f9a1db3 / LuCI openwrt-23.05 branch git-24.265.44782-0ff45d8
            • 接口为br-lan,网关为主路由IP地址
            • 运行OpenClash作为科学服务
            • 内核版本为5.15.167(stable)
            • 架构X86_64

          📝 为什么要使用OSPF进行分流

          在目前大多数网友使用OpenWRT路由系统的场景中,旁路由(旁路网关)应该是很大一部分,从而决定有一定基数的用户还保留着使用代理需要使用旁路由(旁路网关)这种习惯,从最初的各种盒子,到后来的Hyper-V虚拟机,再进阶到All in One的PVE,将Clash、SingBox、Dae等代理软件放在旁路由(旁路网关)应该已经称为很多使用者的一种习惯。而在使用过程中所配置的网络拓扑结构,随着不断的修改、缝补、优化,迁移起来的工作量也相对较大,从而在另一方面也继续维持这种习惯的惯性。
          以上都是我个人作为使用者的一些猜测。对于我来说,在使用旁路由(旁路网关)这种拓扑结构,并在主路由进行分流的原因主要有以下两点:

          增加直连效率

          不管是Clash系列还是Singbox系列,或者直连性能非常恐怖的Dae,最终都需要由程序根据规则进行国内外的流量分流,不管是用Geosite还是GeoIP,数据均需要由代理程序进行一次处理,在对国内直连网站的效率上,或多或少都会产生影响。而由于这多出来的一层处理,对于国内的直连流量来说,也增加的不确定性。所以我选择在主路由使用路由表功能对国内与国外的流量进行拆分分流,国内流量直接通过主路由的网关出去,国外的流量再交给旁路由(旁路网关)根据规则进行处理,最大化直连性能。
          至于为什么使用路由表而不是防火墙转发:路由表的查询发生在网络层(L3),是数据包转发的第一步,防火墙规则在路由决策之后处理,会增加额外的处理开销,更占用CPU,效率也没有路由表更高,当规则很多时,防火墙的性能会受到很明显的影响。路由器的主要工作就是根据目的地址,为数据包选择最优路由路径,这是路由器最为基础也是最为核心的功能。

          增加网络容错性

          代理这个东西,不是一直都很稳的。如果在主路由上使用,如果代理程序出现问题(尤其是喜欢劫持防火墙规则的一些程序),那么就意味着家里的网络直接出现问题,无法正常使用。如果自己一个人还好,但是如果家里有其他人使用,例如老人、孩子、夫人等等,那么就可能会因为网络出现问题而耽误使用,或者造成更多家庭问题。OSPF的动态路由可以很好的解决这一点,收敛速度与接收速度都很快,即便是旁路出现问题,那么也能在5秒之内完成路由表的收敛工作,将主路由的路由表恢复至默认状态,不耽误日常的使用。
          综上两点,这也是我为什么使用旁路由(旁路网关)这种拓扑结构,并在主路由进行分流的原因。

          📝 OpenWRT配置接收Bird的OSPF动态路由

          此教程配置需要在主路由和旁路由进行操作。操作前建议备份或镜像,避免出现不可逆的网络问题。

          OpenWRT旁路由(旁路网关)配置

          旁路网关的配置可以参考《🔀RouterOS使用OSPF智能分流国外流量》中的具体说明,这里只列出步骤与相关的代码。
          确认/etc/sysctl.d/10-default.conf开启以下选项:

          安装Bird2

          当使用OSPF协议时,通常需要一个路由守护进程来实现其功能。Bird是一种轻量且高性能的解决方案,能够同时支持IPv4和IPv6路由表。作为一款支持多种路由协议的软件,Bird同时也支持OpenWRT系统及其大部分衍生版本。
          • 通过opkg安装所需软件包
          • 编辑配置文件
          创建bird的route路由表文件目录,用于存放生成的route4.confroute6.conf路由表文件。
          bird的基础配置文件位于/etc/bird.conf ,使用你喜欢的编辑器进行编辑。其中router id 为旁路由的局域网IP地址,interface 为网络接口名称,例如我的是eth0 ,是与主路由连接的接口的名称。

          生成Bird动态路由规则

          使用dndx/nchnroutes: !chnroutes - chnroutes negated的框架进行动态路由规则生成,原理是根据获取到的国内IPv4地址范围和APNIC内的国内IPv6地址范围取反。
          • 编辑Produc.py
          在第10行附近,修改—next后的default参数wg0为自己的旁路由(旁路网关)接口名称, 例如我的是eth0,就改成eth0
          替换48IPv4Network('172.16.0.0/12')的保留地址,替换为IPv4Network('172.24.0.0/13'),避免影响Cloudflare访问。
          原因在于Cloudflare IP Range中包括:172.64.0.0/13 这个地址范围,如果将IPv4Network('172.16.0.0/12') 配置为保留地址,那么Cloudflare所使用的172.64.0.0/13 也会被标记为直接从主网关出去,不需要经过旁路网关,所以会出现部分使用Cloudlfare CDN的网站无法访问的情况,例如Linux.do
          • 编辑Makefile
          取消567行的注释。并修改china_ip_list上游地址为mayaxcn 提供的china-ip-list
          • 生成路由表
          需要确保你已经安装make,如果没有安装可以通过opkg install make 进行安装。执行:
          返回结果:
          • 确认Bird2路由表状态
          执行命令birdc show route protocol static1查看IPv4路由表
          notion image
          执行命令birdc show route protocol static2查看IPv6路由表:
          notion image
          • 添加定时任务

          OpenWRT主路由配置

          安装Bird2

          配置Bird2

          配置文件同样位于/etc/bird.conf ,文件内容如下,包括IPv4地址的路由表以及IPv6地址的路由表。
          其中router id为主路由的局域网IP地址,interface为网桥名称,例如br-lan ,是提供DHCP服务的接口名称。
          保存后执行以下命令重启bird并配置bird为开启自动启动:

          查看bird获取OSPF邻居信息

          返回结果:
          其中10.0.0.10 为我的旁路网关地址,State显示为Full即表示已经完成与OSFP邻居的连接建立完成。

          查看bird获取OSPF动态路由信息

          返回结果大概类似于以下这种,数量太多就截取一部分:

          主路由OpenWRT防路由环回处理

          处理OpenWRT的环回思路也是通过新建一个路由表bypass,将从旁路由来的流量,通过防火墙打标记的方式,使用这个新建的路由表bypass,从而避免产生环路。
          • 为旁路由添加默认路由规则
          添加路由表:
          假设旁路由的ip地址为10.0.0.2
          • 新建IPv4局域网路由规则
          通过luci管理界面,进入网络路由IPv4规则 ,添加一条IPv4路由规则:
          notion image
          优先级: 默认30000
          规则类型: unicast
          传入接口: lan
          源地址: 局域网IP地址范围,如果你是主路由是192.168.1.1 ,那么这里写192.168.1.0/24
          传出接口:不填写
          目标地址:不填写
          :添加一个bypass
          高级设置-防火墙标志0x1
          • 新建IPv4广域网路由规则
          notion image
          优先级: 默认30000
          规则类型: unicast
          传入接口: 不填写
          源地址: 不填写
          传出接口wan
          目标地址0.0.0.0/0
          bypass
          高级设置-防火墙标志0x1
          • 配置防火墙规则
          OpenWRT的根据所使用的不同OpenWRT版本,防火墙程序也不同:iptablesnftables。但是我们可以通过luci的网页管理进行操作。
          网络防火墙通信规则 ,新建一条通信规则:
          notion image
          名称: bypass
          协议: TCP + UDP,或者全选
          源区域: Lan
          源地址: 旁路由IP地址
          源端口
          目标区域任意区域
          目标地址
          目标端口任意
          操作应用防火墙标记
          设置标记 :0x1

          🤗 总结归纳

          需要注意的是,通过OSPF输出到OpenWRT内核的路由表并不会在Luci界面的的路由信息中进行展示。如果需要查看,可以通过ip route show命令。
          本篇文章基本是在之前文章的基础上,完善了一下OpenWRT路由系统下使用Bird建立OSPF动态路由分流的操作指南,大部分内容都是以前已经写过的。
          今天在进行环境测试的时候,也发现了一些有趣的问题,例如:
          Bird中的type pointopoint 其实只允许两台主机建立动态路由的邻居关系,当第三台机器想要加入的时候,通过syslog会发现提示:
          同时neighbor state会显示ExStart
          这时候需要修改typebroadcast才可以。

          📎 参考文章

           
          💡
          有关OpenWRT安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~
          •  

          国内外DNS服务器推荐列表

          2024年9月5日 08:00
          😀
          之前介绍了不少关于MosDNS、AdGuard Home和OpenClash的内容,里面绕不开的一个部分就是:用来解析国外域名,获取无污染解析结果的DNS服务器应该选择哪家,或者说有哪些无污染的公共DNS服务器可以选择。今天这篇文章,就对我使用过的DNS服务器进行一个整理,并进行无污染DNS服务器的推荐。

          📝 个人对DNS服务器选择的看法

          DNS服务器的主要作用是将域名解析转换为IP地址,同时支持负载均衡、高可用性、反向解析、缓存加速等功能。DNS是互联网的基础设施之一,几乎所有的网络通信都依赖于DNS服务。所以选择一个稳定、高速且无污染的DNS的重要性不言而喻。在使用DNS分流的情况下,对国内域名与国外域名分别配置DNS可以有效提升解析速度与准确性,例如我在使用的MosDNS和AdGuard Home。

          📝 国内DNS服务器

          国内的公共DNS服务选择不多,我认为国内DNS只有三个选择,阿里云公共DNS(阿里巴巴)、DNSPod(腾讯)以及各省市运营商下发的DNS。阿里云公共DNS和DNSPod均支持ECS(edns-client-subnet)协议,在一定程度上可以缓解整体解析速度不如运营商DNS的情况。其他例如114、360、百度等等,均有前科,不太推荐选择。
          同时在国内DNS的选择及使用上,我个人更推荐使用DOH、DOT方式,避免DNS泄露给运营商,从而产生DNS劫持。在部分省份,运营商DNS劫持会将目标网站的解析结果返回为反诈页面,例如被运营商DNS劫持到www.js96110.com.cn
          名称
          标准DNS地址
          DOH地址
          DOT地址
          是否支持H3
          ECS
          DNSPod
          119.29.29.29 / 182.254.116.116
          https://doh.pub/dns-query
          dot.pub
          支持
          AliDNS
          223.5.5.5 / 223.6.6.6
          https://dns.alidns.com/dns-query
          dns.alidns.com
          支持

          📝 国外DNS服务器

          我个人一般会用Google DNSNextDNS、以及AdGuard DNS作为主要无污染DNS使用。NextDNS的免费额度足够家庭使用,当免费额度用完就切换到AdGuard DNS。在Google DNS存在国内访问问题的时候,会选择Quad9或者OpenDNS。Cloudflare DNS在我这里的稳定性和速度并不好,所以很少选择。大多数的国外公共DNS均可以返回无污染的DNS解析结果,这些公共DNS服务基本都支持DNSSEC。
          在衡量与选择国外公共DNS服务时,延迟与丢包一般是我首先考虑的因素,其次就是DOH(DNS over HTTPS)和DOT(DNS over TLS)的支持,如果能够支持H3(http3)或者tls pipeline的话,那么一般就会是首选的DNS服务。其他次级考虑的因素还包括是否支持ECS,如果可以支持ECS,我会选择代理出口位置附近的IP。通过MosDNS的ECS功能,可以自定义ECS地址,使解析的CDN结果更靠近所配置的IP地址,从而提高解析结果的访问速度,例如我喜欢配置国外的ECS地址为代理的出口地址,这样通过代理访问时,可以获得最佳速度及可用性。
          同时在使用DOT或DOH使,可使用dial_addr替代域名,可免去每次建立连接时需要Bootstrap DNS先解析DNS服务器域名。dial_addr一般为标准DNS的IPv4和IPv6地址。
          由于一些公共DNS使用DNSCRYPT,需要使用DNS服务器公钥,存在局限性,所以暂时未列入表单内,也不作为DNS选择与衡量的指标。
          同时大部分公共解析服务均为IPv4和IPv6双栈,即使用IPv4的DNS公共解析服务也可以解析IPv6地址,所以列表内不再进行IPv4和IPv6的区分。
          在设备支持的情况下,非常建议选用支持DoH与DoT的DNS服务器。

          推荐使用的DNS服务器

          DNS服务名称
          标准DNS地址
          DoH地址
          DoT地址
          是否支持H3
          ECS
          Google DNS
          8.8.8.8 / 8.8.4.4
          https://dns.google/dns-query
          dns.google
          支持
          Cloudflare
          1.1.1.1 / 1.0.0.1
          https://cloudflare-dns.com/dns-query
          1dot1dot1dot1.cloudflare-dns.com
          支持
          Quad9
          9.9.9.9 / 149.112.112.112
          https://dns.quad9.net/dns-query
          dns.quad9.net
          支持
          AdGuard Public DNS
          94.140.14.14 / 94.140.15.15
          https://dns.adguard.com/dns-query
          dns.adguard.com
          支持
          NextDNS
          45.90.28.0 / 45.90.30.0
          https://dns.nextdns.io
          45.90.28.0 / 45.90.30.0
          支持
          OpenDNS
          208.67.222.222 / 208.67.220.220
          https://doh.opendns.com/dns-query
          208.67.222.222 / 208.67.220.220
          支持
          Yandex DNS
          77.88.8.8 / 77.88.8.1
          https://doh.yandex.net/dns-query
          dns.yandex.net
          不支持
          CleanBrowsing
          185.228.168.9 / 185.228.169.9
          https://doh.cleanbrowsing.org/dns-query
          security-filter-dns.cleanbrowsing.org
          不支持
          jp.tiar.app
          172.104.93.80
          https://jp.tiarap.org/dns-query
          jp.tiar.app
          不支持
          Comodo Secure DNS
          8.26.56.26
          https://doh.comodo.com/dns-query
          dns.comodo.com
          不支持
          DNS.WATCH
          84.200.69.80
          https://dns.watch/dns-query
          不支持
          Blahdns(新加坡)
          46.250.226.242 2407:3640:2205:1668::1
          https://doh-sg.blahdns.com/dns-query
          dot-sg.blahdns.com
          不支持
          CleanBrowsing
          185.228.168.9 185.228.169.9
          https://doh.cleanbrowsing.org/doh/security-filter/
          security-filter-dns.cleanbrowsing.org
          不支持
          Block malware
          76.76.2.1
          https://freedns.controld.com/p1
          tls://p1.freedns.controld.com
          不支持
          DeCloudUs 
          78.47.212.211:9443
          https://dns.decloudus.com/dns-query
          tls://dns.decloudus.com
          不支持
          Mullvad(新加坡)
          -
          https://dns.mullvad.net/dns-query
          tls://dns.mullvad.net
          不支持

          仅作测试使用的DNS服务器

          以下DNS服务器是仅作测试使用的DNS服务器,不建议作为日常主力使用DNS解析服务,推荐仅在测试时进行使用,或作为落地区域的DNS使用。这些DNS服务大多不提供DOH或DOT选项,且在直连情况下存在延迟较高、丢包较多等不稳定因素。
          DNS服务名称
          标准DNS地址
          DoH地址
          DoT地址
          是否支持H3
          ECS
          HKBN DNS
          203.80.96.10 / 203.80.96.9
          不支持
          不支持
          不支持
          NTT Communications DNS
          61.213.169.170 / 61.213.169.171
          不支持
          不支持
          不支持
          NEC BIGLOBE DNS
          202.225.96.66 / 202.225.96.68
          不支持
          不支持
          不支持
          Yahoo Japan DNS
          182.22.70.1 / 182.22.70.2
          不支持
          不支持
          不支持
          DNS.SB
          45.11.45.11
          https://doh.dns.sb/dns-query
          dot.sb
          不支持
          腾讯国际
          162.14.21.178/ 162.14.21.56
          不支持,可通过腾讯云套娃DOH
          不支持,可通过腾讯云套娃DOT
          不支持
          Microsoft DNS / Level 3 Communications
          4.2.2.2 / 4.2.2.1
          不支持
          不支持
          不支持
          HiNet/中華電信
          168.95.1.1 / 168.95.192.1
          不支持
          不支持
          不支持
          TWNIC Quad101 Public DNS
          101.101.101.101 / 101.102.103.104
          不支持
          不支持
          不支持

          DNS延迟测试脚本

          这个Python脚本需要ping3依赖,复制以上代码并保存为*.py文件,通过命令行运行。可替换IP地址为自己想要进行测速的DNS的IP地址,每个DNS的IP地址Ping次数默认为4 。脚本的注释算是清晰,可根据自己需要在脚本中修改。

          非公共DNS服务(增强型DNS服务

          这里的非公共DNS是指提供具有用户唯一标识的DNS服务,允许用户自定义DNS过滤与隐私保护,提供访问控制,提供查询日志,提供部分路由优化等。相较于免费的公共DNS服务,这种DNS服务在部分情况下访问速度可能会更好一些。基础的DOH、DOT、DNSSEC、ECS基本都支持。
          • XNS.One提供非公共DNS使用,属于付费服务,需要邀请码,可以在他们的Telegram频道蹲一下。付费不支持支付宝与微信,只能信用卡付款。
          • NextDNS,我目前主要使用的DNS服务,免费版每个月提供30万次查询,基本够日常使用。可定制拦截列表。
          • AdGuard DNS,与NextDNS类似,免费版每个月提供30万次查询,允许配置5个接入点,2个服务器,支持配置100条自定义规则。

          📝 其他关于DNS的参考信息

          enable_pipeline: TCP/DoT使用RFC 7766新的query pipelining连接复用模式。
          • 启用后可大幅提高连接利用率,减少建立连接/握手的次数,进而降低响应延时。
          • 并非所有DNS服务器都支持。必须确定DNS服务器支持后再启用该选项。
          • Tips: 已知Google和Cloudflare的TCP/DoT是支持该模式的。知名的公共DNS服务商大多数都支持该模式。如果你使用MosDNS,可以使用 mosdns probe pipeline {tcp|tls}://server_ip[:port] 测试命令测试服务器是否支持。比如 mosdns probe pipeline tls://8.8.8.8

          什么是ECS(EDNS Client Subnet)?

          ECS(EDNS Client Subnet)是扩展DNS查询的一种机制,旨在提升内容分发网络(CDN)和地理位置相关的服务的效率。通常DNS服务器只看到客户端的IP地址,但通过ECS,DNS请求会包含客户端IP的一部分(子网信息)。这样,内容分发网络可以根据客户端的地理位置,返回更接近用户的服务器,减少延迟,提升性能。ECS主要用于优化网络和加速服务的访问,但也可能带来一定的隐私泄露风险。

          什么是DOH(DNS over HTTPS)?

          DoH(DNS over HTTPS)是一种技术,用来加密你的DNS查询。通常情况下(UDP及TCP协议情况下),DNS查询是明文的,容易被ISP运营商看到和监控。而DoH会通过HTTPS协议加密这些查询,确保你的请求内容是安全的,不会被ISP和运营商偷看。就像你在发送加密的信息一样,DoH保护了你上网时的隐私,并在一定程度上可以避免DNS劫持。

          什么是ECH(Encrypted Client Hello)?

          ECH(Encrypted Client Hello)是一种技术,用来加密你访问网站时的SNI(服务器名称指示)信息。通常情况下,当你想访问某个网站时,这个请求是明文的,运营商或其他第三方可以轻易看到你在访问什么网站,并可能进行拦截或阻断(例如SNI阻断)。这也是为什么有时你在国内访问GitHub和Linux.DO会遇到Time Out问题的原因之一。有了ECH,这些SNI信息就被加密了,外面的人就看不到你要访问哪个网站,从而提高了你的隐私和安全性。简单来说,ECH就像是在发送加密的信息,让你的浏览行为更加私密。

          什么是DNSSEC(Domain Name System Security Extensions)?

          DNSSEC(Domain Name System Security Extensions)是DNS系统的安全扩展协议,通过数字签名技术来确保DNS记录的真实性和完整性。它通过建立从根域名到下级域名的信任链,使用公私钥对对DNS记录进行签名和验证,能有效防止DNS欺骗和缓存污染。DNSSEC引入了几个关键记录类型:DNSKEY用于存储域名公钥,RRSIG包含数字签名信息,DS记录用于下级域委派签名,以及NSEC/NSEC3用于提供域名不存在的证明。虽然DNSSEC的配置较为复杂,可能增加DNS服务器负载并导致响应包变大,但它在防止DNS劫持和欺骗方面发挥着重要作用,目前已得到Google DNS (8.8.8.8)和Cloudflare (1.1.1.1)等主流公共DNS服务器的支持。

          其他关于DNS选择的文章?

          💡
          有关DNS上的问题,欢迎您在底部评论区留言,一起交流~
          •  

          Follow for Android

          2025年1月10日 08:00
          😀
          最近一直通过Follow浏览订阅的RSS、Twitter以及Youtube频道等等,真的很方便,有一种重新回到将近20年前,使用Google Reader那种时候通过订阅很多博客并获取知识的感觉。Follow一直没有推出Android的App,需要使用网页版。但是对于这种高频使用的服务,我天生希望使用App的方式,所以这次又整了个活,用Tauri通过Webview的方式将Follow的网页服务封装在了APP里。

          📝 Follow for Android 项目介绍

          整体项目很简单,就是通过Webview打开Follow.is的网站,然后用Tauri生成Android编译APK所需要的文件,最后进行打包。整体APP大小在28M左右,暂时还没有做任何太多优化,先占个坑,在后续自己使用过程中如果发现问题会进行更新。
          Follow.is的整体优化非常好,在浏览器中各种交互操作也已经非常成熟,所以我做的事情非常简单,就是将Follow.is的网页通过Webview打开,再做一点缓存加快载入速度。Follow for Android应用本身除缓存外不会存储任何用户数据,同时在权限申请方面,也只需要互联网权限:
          另外,在APP的请求记录里会出现读取剪贴板行为,这是由于在点击输入框时会自动进行获取,我没有禁止,避免无法粘贴Feed地址。当然只有在使用这个Follow APP时候才会发生这种读取。
          对于系统版本,目前需要SDK版本≥33,否则会提示版本不兼容。
          最后,感谢RSSNext/Follow的全部贡献成员,同时期待Follow官方正式推出Android和iOS的客户端版本。

          Follow for Android 项目地址

          followforandroid
          moreoronceUpdated Mar 1, 2025
          notion image
          notion image

          支持功能

          • Google和Github的登录可用
          • RSS正常可以阅读(Youtube订阅源暂时无法直接播放视频)
          • 添加订阅源正常
          • 大部分页面显示正常(目前还没有找到不正常的)
          • 使用Service Worker进行缓存
          • 理论上支持Android TV使用
          APP大小不到28M,整体安装后,算上缓存在100M左右。
          notion image

          安装文件

          没有区分架构,理论上支持全部

          🤗 总结归纳

          了解Tauri和配置用的时间较长,Tauri 2.0版本目前还没有完全的文档能够参考阅读,有些地方可能需要自己试试看。生成Android构建文件之后,主要花费的时间在编译上,第一次感觉自己的这颗AMD Ryzen 5600X的CPU性能有点不够用了。
          文章介绍内容现在也比较少,后续再一点一点完善吧。Enjoy it。
          Follow.is的iOS版本已经开始内测了,估计再等等,Android版本也就可以有了。

          📎 参考文章

          💡
          有关Follow for Android安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~ 版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
          •  

          实验性:OpecClash不使用Dnsmasq绕过中国大陆IP

          2024年9月6日 08:00
          ⛏️
          Openclash作为Openwrt上用户最多的科学上网插件,其“实验性:绕过中国大陆IP“功能是通过Dnsmasq进行实现,旨在将国内IP通过防火墙转发规则,国内IPv4和IPv6的流量不经过Clash(Mihomo)内核处理,增强直连性能,降低OpenWRT软路由的资源占用。对于进阶使用用户来说,在使用上存在诸多不便,例如无法与MosDNS、Adguard Home完美配合。我作为一个只能看懂一部分代码,完全不会写的选手,在ChatGPT和Cursor的帮助下,尝试找到一个不依赖于Dnsmasq,也可以使中国大陆IP流量不经过Clash(Mihomo)内核的方法。
          本篇的配置项目前还未经过长时间生产环境使用,可能存在不稳定、规则冲突、未知问题等可能。在操作之前,请进行备份,避免无法恢复的网络宕机。

          实验环境

          • 旁路由(旁路网关):OpenWRTImmortalWrt 23.05.4 r28061-399f9a1db3 / LuCI openwrt-23.05 branch git-24.265.44782-0ff45d8
            • 接口为br-lan,网关为主路由IP地址
            • 运行OpenClash作为科学服务
            • 内核版本为5.15.167(stable)
            • 架构X86_64

          📝 OpenClash实验性:绕过中国大陆IP的原理

          OpenClash的大部分核心外功能实现基本都是通过/etc/init.d/openclash这个启动文件实现。在文件中,涉及实验性q:绕过中国大陆IP的主要功能部分包括:
          • ip set/nft set 管理,也就是IP集合管理
          • China_ip_route规则匹配及重定向
          • 利用Dnsmasq进行国内域名列表(/etc/openclash/accelerated-domains.china.conf)内的域名解析

          IP集合

          OpenClash内置了两个IP集合,分别为China_ip_route集合和China_ip_route_pass集合,通过插件设置 - 大陆白名单订阅 进行维护,没有使用GeoIP:CN进行维护。

          China_ip_route规则匹配

          在Openclash选择绕过大陆IP时,通过fw4进行进行流量检测,当检测到目标IP地址属于中国大陆时,通过openclash链、openclash_mangle链、以及openclash_mangle_out链进行return操作,使流量按原链继续进行,不再经由clash内核进行处理。

          openclash_mangle链

          openclash_mangle链的作用是用于修改流量的特性,通常用于更改数据包的标记、TTL(生存时间)等,对流量进行细颗粒度控制,标记流量进行后续处理等。
          • 条件判断:检查变量 china_ip_route 是否等于 1。如果是,表示启用了绕过中国大陆IP。
          • 嵌套条件判断:检查变量 enable_redirect_dns 是否不等于 2。这里0是不劫持DNS,1是通过dnsmasq劫持,2是通过防火墙劫持。
            • 如果不等于2,即不使用防火墙劫持:nft 'add rule inet fw4 openclash_mangle ip daddr @china_ip_route ip daddr != @china_ip_route_pass counter return’
            • 如果等于2:nft 'add rule inet fw4 openclash_mangle ip daddr @china_ip_route counter return’

          openclash链

          openclash链主要用于处理进入的流量。这个链通常用于根据特定的规则对流量进行分类和处理。
          • 条件判断:检查变量 china_ip_route 是否等于 1。如果是,表示启用了绕过中国大陆IP。
          • 嵌套条件判断:检查变量 enable_redirect_dns 是否不等于 2。这里0是不劫持DNS,1是通过dnsmasq劫持,2是通过防火墙劫持。
            • 如果不等于2,即不使用防火墙劫持:nft 'add rule inet fw4 openclash ip daddr @china_ip_route ip daddr != @china_ip_route_pass counter return'
            • 如果等于2:nft 'add rule inet fw4 openclash ip daddr @china_ip_route counter return'

          openclash_mangle_output链

          openclash_mangle_output链专门用于处理输出流量,即从本地系统发出的流量(路由器本机流量)。之前我只配置了mangle链和openclash链,没有对openclash_mangle_output链进行防火墙配置,导致mosdns的还是会经过clash(mihomo)核心,也造成在多并发进行DNS请求时,upstream errorexchange failed等错误,同时由于本来应该直连的DNS公众服务器,绕到Clash(Mihomo)核心走了一圈,所以解析速度也有所下降。
          • 条件判断:检查变量 china_ip_route 是否等于 1。如果是,表示启用了绕过中国大陆IP。
          • 嵌套条件判断:检查变量 enable_redirect_dns 是否不等于 2。这里0是不劫持DNS,1是通过dnsmasq劫持,2是通过防火墙劫持。其中,skuid≠65534为非特权用户,即nobody用户
            • 如果不等于2,即不使用防火墙劫持:nft 'add rule inet fw4 openclash_mangle_output skuid != 65534 ip daddr @china_ip_route ip daddr != @china_ip_route_pass counter return'
            • 如果等于2:nft 'add rule inet fw4 openclash_mangle_output skuid != 65534 ip daddr @china_ip_route counter return'

          China_ip_route_pass规则匹配

          China_ip_route_pass这个IP集是通过劫持Dnsmasq,使用设定的dns对国内常见域名(也就是/etc/openclash/accelerated-domains.china.conf 文件内域名)进行解析并生成的IP集。这部分非常依赖于Dnsmasq,但在我们这里由于已经有MosDNS进行分流,所以不用过于关注。

          📝 配置流程

          China_ip_route的nft规则配置

          通过对上面fw4表内openclash链、openclash_mangle链以及openclash_mangle_output链的分析,可以基本明确我们要进行带操作。
          • 首先我们需要处于fake-ip模式
          • 关闭实验性绕过中国大陆IP选项,因为我们要手动添加防火墙规则进行绕过
          • 关闭DNS劫持
          在关闭DNS劫持的同时,我们符合enable_redirect_dns 选项,即没有使用防火墙劫持DNS,所以我们采用if下的第一条判断结果。

          添加防火墙规则

          由于防火墙规则采用顺序匹配,如果我们采用add的方式,无论如何只会附加规则至每条防火墙规则链的底部,所以这里采用insert方式。

          openclash链

          openclash_mangle链

          openclash_mangle_output链

           
          添加完成之后,在Openclash的页面进行重置所有链接,同时观察是否有匹配国内IP的流量进入列表,如果没有即表示成功。同时在OpenWRT的防火墙页面,应该可以找到我们添加的规则以及对应规则匹配的计数,通过这个也可以观察是否绕过成功。
          notion image

          配置OpenClash自定义防火墙规则

          为了避免每次OpenClash重启或者路由器重启后需要手动重复执行nft命令,我们可以将上述三条规则写入到openclash的自定义规则里面。配置位置位于:插件设置 - 开发者选项
          notion image

          关于IPV6

          由于openclash的实验性:绕过中国大陆IPv6不完全依赖于dnsmasq,所以可以放心开启,不用做特别的配置。

          关于规则更新

          由于目前使用的是大陆白名单提供的IP地址集,所以可以通过OpenClash提供的Web端页面进行更新,也可以在页面配置定时更新,不必过多担心IP地址变化带来的白名单错乱。之后我也会尝试使用GEOIP:CN作为IP集进行研究。

          已知问题

          会使之前配置的DNS防泄漏无效,目前还在研究是哪个环节出现的问题。

          🤗 总结归纳

          这次主要折腾的原因在于很羡慕Dae的直连性能,但是还没有把Dae放在生产环境真正的使用过,所以想看看有没有什么办法在不使用dnsmasq,仅通过防火墙进行一些修改,让mosdns+openclash这套配置更为完善,同时也能让自己更为熟悉fw4、nftable以及OpenWRT的防火墙配置。
          通过上面对nft命令以及规则的了解,也可以通过nft进行局域网设备的黑名单配置,使特定设备流量不进入到Clash(Mihomo)内核,避免违反机场的TOS规则,例如BT、PCDN等等。

          📎 参考文章

           
          💡
          有关OpenWRT安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~
          •  

          NieR Automata Ver 1.1a

          2023年5月6日 08:00
          ⚠️
          《尼尔:自动人形 Ver1.1a》是一部备受期待的动画作品,改编自广受好评的游戏《尼尔:机械纪元》。由A-1 Pictures制作,益山亮司执导。该动画于2023年1月7日开始播出,融合了科幻、哲学、动作元素与二次元,完美呈现了原作游戏的魅力和性癖。本文提供最新的第八集更新信息,包括高清下载链接和字幕资源。无论是游戏粉丝还是动画爱好者,这部2023年的热门作品都值得一看。
          notion image

          NieR Automata Ver 1.1a介绍

          《尼尔:自动人形 Ver1.1a》是根据史克威尔·艾尼克斯与白金工作室联合开发的同名游戏改编的电视动画,由A-1 Pictures负责制作。该动画分为两季,第一季于2023年1月7日至7月23日播出,全12集;第二季则于2024年7月5日首播,同样为12集。
          故事设定于西历5012年,地球遭受外星人及其制造的机械生命体入侵,导致濒临灭绝的人类逃亡至月球。为夺回地球,人类发起了"人造人反攻作战",但面对无限增殖的机械生命体陷入僵局。新型人造人部队"寄叶"作为最终兵器被派遣至地球,其中主角2B与先行调查员共同投入战场。动画聚焦于这场生存与机械的冲突中人造人部队的作战过程,延续了游戏关于战争本质、生命意义等哲学命题的探讨。
          该动画最初在BS11及TOKYO MX平台首播,英文标题为《NieR:Automata Ver1.1a》,日文标题为《ニーア オートマタ Ver1.1a》,中文标题为《尼尔:自动人形 Ver1.1a》。作品通过改编游戏《尼尔:机械纪元》剧情,结合动画表现手法延续了原作特有的末世氛围与科幻美学。

          友情提示!Netflix也可以看的!已经上Netflix了!合租可以看这里:

          三周没更新啦!!!!想念A2!!!!

          【NEW】第八集:[ANi] NieRAutomata Ver11a - 尼爾:自動人形 Ver1.1a - 08 [1080P][Baha][WEB-DL][AAC AVC][CHT][MP4]

          INFO
          Info By: ANi API (Auto Generated)Subtitle: HardSub 中文繁体Mediainfo: Resolution: 1080P Video Format: AVC Audio Format: AAC

          第七集:[神楽坂 まひろ] 尼爾:自動人形 Ver1.1a / NieR:Automata Ver1.1a - 07 (CR 1920x1080 AVC AAC MKV)

          Information:
          Overall Bit Rate: 8 186 kb/s字幕: Deutsch (Germany), English (US), Español (Latin America), Español (España), Français (France), Italian (Italy), Português (Brasil), Русский (Russia), 中文(简体)| 繁化姬, 中文(繁體)时长: 00:23:41.660CRC32: BACE4467MediaInfo
          中文字幕需要手动调整,提前5秒钟左右。后续更新字幕组版本。
          默认屏蔽迅雷客户端。
          织梦字幕组版本为:[织梦字幕组][尼尔:机械纪元 NieR Automata Ver1.1a][07集][1080P][AVC][简日双语]
          织梦字幕组

          第六集:[NanakoRaws] NieR Automata Ver 1.1a - 06 (1080p).mp4

          阿里云盘中为4K版本
          织梦字幕组

          第五集:[NanakoRaws] NieR Automata Ver 1.1a - 05 (1080p).mp4

           
          #尼尔:机械纪元 动画版 尼尔:人工生命
          💡
          有关Notion安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~
          •  

          RouterOS如何直接访问光猫

          2025年1月19日 08:00
          😀
          最近在折腾IPTV的时候发现,每次都需要拔掉PVE上连接电脑端口的网线,插到光猫上才能访问光猫的管理页面,过程太麻烦,所以整理了一下RouterOS(ROS)如何在不插拔网线的情况下,直接访问光猫的管理页面方法,供大家参考。

          📝 RouterOS直接访问光猫教程

          前置条件

          这里的前置条件是我目前的网络情况,供参考
          • 光猫使用桥接模式,由RouterOS进行拨号
          • 光猫管理地址为192.168.1.1
          • RouterOS及家庭局域网的网段位于10.0.0.0/24
          • RouterOS连接光猫的端口为ether4

          配置方法

          简单的配置方法为使用RouterOS的终端(Terminal),通过输入以下命令执行:
          这段代码的意思是为ether4端口添加一个IP地址,为192.168.1.2,属于192.168.1.0网段,同时添加注释ONT,也就是光猫。
          这段代码的意思是将来自10.0.0.0/24网段的流量,通过ether4接口转发到目标地址192.168.1.1,并对源地址进行伪装(NAT)。NAT伪装(masquerade)会将源地址替换为ether4接口的IP地址,从而实现内部网络访问外部网络的功能。

          🤗 总结归纳

          这个RouterOS直接访问光猫的教程很简单,只需要两条命令,但需要注意的是,上面创建的RouterOS防火墙规则建议放在靠后的的位置,避免因为RouterOS防火墙规则优先级问题导致未知错误。
          另外RouterOS最新发布了7.17版本,改动还挺多的,Winbox 4.0也进行了更新,目前版本为beta 16

          📎 参考文章

          💡
          有关RouterOS安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~ 版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
          •  

          OpenWRT 软件源整理

          2024年10月15日 08:00
          😀
          这篇文章主要是用于个人记录,在每次重装OpenWRT后都均需要手动去替换软件源,加快软件列表更新速度和软件安装速度,正好整理出来,供网友自行取用。内容已经经过筛选,目前2024年10月15日均处于可访问使用状态。

          📝 OpenWRT软件源

          OpenWRT官方镜像站

          1. OpenWRT官方下载站点
            • URL: https://downloads.openwrt.org/
            • 这是 OpenWRT的主站点,提供所有官方版本的固件和软件包。该站点是获取最新稳定版、开发版(snapshot)和历史版本的主要来源。
            1. OpenWRT官方GitHub仓库
              • URL: https://github.com/openwrt/openwrt
              • 虽然主要用于代码存储和开发,但也提供了一些资源和文档链接。
              1. OpenWRT Cloudflare镜像仓库
                • URL: https://mirrors.cicku.me/openwrt/
                • 使用CDN (Cloudflare)的镜像,由cicku.me提供,并获得官方认可。

                OpenWRT国内镜像站

                1. 清华大学开源软件镜像站
                  • URL: https://mirrors.tuna.tsinghua.edu.cn/openwrt
                  • 提供了OpenWRT各个版本的镜像,非常稳定和快速。
                  1. 中科大开源镜像站
                    • URL: https://mirrors.ustc.edu.cn/openwrt
                    • 也是一个非常可靠的镜像源,提供OpenWRT的各个版本。
                    1. 阿里云开源镜像站
                      • URL: https://mirrors.aliyun.com/openwrt
                      • 提供稳定的OpenWRT镜像下载服务。
                      1. 重庆大学开源镜像站
                        • URL: https://mirrors.cqu.edu.cn/openwrt/
                        • 同样是一个可以选择的国内镜像源。
                        1. 南京大学开源镜像站
                          • URL: https://mirror.nju.edu.cn/openwrt/
                          • 提供了OpenWRT的多版本支持。
                          1. 上海交通大学开源镜像站
                            • URL: https://mirror.sjtu.edu.cn/openwrt/
                            • 提供稳定的开源软件镜像服务。
                            1. 兰州大学开源镜像站
                              • URL: https://mirror.lzu.edu.cn/openwrt/
                              • 提供多个开源项目的镜像下载。界面有点意思。
                              1. 浙江大学开源镜像站
                                • URL: https://mirrors.zju.edu.cn/openwrt/
                                • 提供多种开源软件项目的镜像。
                                1. 腾讯云开源镜像站:
                                  • URL: https://mirrors.cloud.tencent.com/openwrt/
                                  • 提供稳定的OpenWRT镜像下载服务。

                                  OpenWRT个人镜像站

                                  1. OpenWRT.AI软件仓库:
                                    • URL: https://dl.openwrt.ai/
                                    • Kiddin9的自建软件仓库,目前只支持OpenWRT 23.05版本。

                                    如何选择和使用OpenWRT软件源镜像站

                                    在OpenWRT路由器上配置官方软件源通常不需要额外操作,因为默认情况下,OpenWRT已经配置了官方软件源。只需运行opkg update命令以确保软件包列表是最新的。同时也不建议频繁对系统默认软件进行更新,除非有可感知的性能问题。
                                    要使用这些镜像源,您需要修改OpenWRT路由器上的OPKG软件源,可以查看 /etc/opkg/customfeeds.conf 文件,确保根据您所使用的OpenWRT版本和设备架构进行正确配置。

                                    OPKG配置示例

                                    将上述内容中的https://mirror.bjtu.edu.cn/openwrt/替换为你想要使用的OpenWRT软件源地址,同时注意后面的<Version>为版本号,需要修改为你OpenWRT的版本号,<architecture> 为系统架构,需要修改为你对应的系统架构,例如X86_64

                                    常见OpenWRT架构

                                    可以通过下面的代码进行系统架构查看,表格内为常用架构。
                                    指令集
                                    架构 / 子架构
                                    OpenWrt软件包结构
                                    arm64/genericlayerscape/64b
                                    aarch64_armv8-a
                                    arc770/generic
                                    arc_arc700
                                    archs38/generic
                                    arc_archs
                                    ARM
                                    brcm2708/bcm2708
                                    arm_arm1176jzf-s_vfp
                                    ARM
                                    at91/legacymcs814x/genericmxs/generic
                                    arm_arm926ej-s
                                    ARM
                                    ipq806x/generic
                                    arm_cortex-a15_neon-vfpv4
                                    ARM
                                    at91/sama5d3
                                    arm_cortex-a5
                                    ARM
                                    brcm2708/bcm2710
                                    arm_cortex-a53_neon-vfpv4
                                    ARM
                                    mediatek/generic
                                    arm_cortex-a7
                                    ARM
                                    brcm2708/bcm2709
                                    arm_cortex-a7_neon-vfpv4
                                    ARM
                                    sunxi/generic
                                    arm_cortex-a8_vfpv3
                                    ARM
                                    bcm53xx/genericlayerscape/32b
                                    arm_cortex-a9
                                    ARM
                                    imx6/genericzynq/generic
                                    arm_cortex-a9_neon
                                    ARM
                                    mvebu/genericomap/generic
                                    arm_cortex-a9_vfpv3
                                    ARM
                                    gemini/raidsonicgemini/wiligear
                                    arm_fa526
                                    ARM
                                    oxnas/generic
                                    arm_mpcore
                                    ARM
                                    cns3xxx/generic
                                    arm_mpcore_vfp
                                    ARM
                                    kirkwood/generic
                                    arm_xscale
                                    ARM
                                    ixp4xx/genericixp4xx/harddisk
                                    armeb_xscale
                                    MIPS64
                                    malta/be64
                                    mips64_mips64
                                    MIPS64
                                    octeon/generic
                                    mips64_octeon
                                    MIPS64
                                    malta/le64
                                    mips64el_mips64
                                    MIPS
                                    ar71xx/genericar71xx/nandar71xx/mikrotiklantiq/xrx200lantiq/xwaylantiq/xway_legacymalta/be
                                    mips_24kc
                                    MIPS
                                    adm5120/router_beath25/genericbrcm63xx/genericbrcm63xx/smp
                                    mips_mips32
                                    MIPS
                                    malta/leramips/rt305xramips/mt7620ramips/mt7621ramips/mt7628ramips/mt7688
                                    mipsel_24kc
                                    MIPS
                                    brcm47xx/mips74kramips/rt3883
                                    mipsel_74kc
                                    MIPS
                                    adm5120/router_leadm5120/rb1xxadm8668/genericar7/genericar7/ac49xau1000/au1500au1000/au1550brcm47xx/genericbrcm47xx/legacyrb532/genericxburst/qi_lb60
                                    mipsel_mips32
                                    MIPS
                                    ramips/rt288x
                                    mipsel_mips32r2
                                    PPC
                                    ppc44x/generic
                                    powerpc_440
                                    PPC
                                    apm821xx/nandapm821xx/sata
                                    powerpc_464fp
                                    PPC
                                    mpc85xx/generic, mpc85xx/p1020
                                    powerpc_8540
                                    x86
                                    x86/geode
                                    i386_geode
                                    x86
                                    x86/legacy
                                    i386_i486
                                    x86
                                    x86/generic
                                    i386_pentium4
                                    x86_64
                                    x86/64
                                    x86_64

                                    命令行替换OPKG软件源

                                    或者通过命令行方式进行修改,格式为s,[原来的软件源地址],[替换的软件源地址],g
                                    替换完成后通过opkg update进行更新。

                                    注意事项

                                    OpenWRT官方版软件源并不一定完全匹配第三方定植后的固件,例如esir、Leon大佬等定制的固件,可能存在库不全或兼容问题。同时官方版本软件源提供的k-mod-*.ipk 软件包也可能存在无法直接安装的情况。
                                    如果你是一个新手,或者只想将OpenWRT系统配置起来养老,那么推荐使用ImmortalWRT,在软件源支持方面可能会更好一些,同时也可以自定义配置国内软件源immoralwrt-opkg-replace-edu-mirror
                                    在最新的快照版本中,OpenWRT已经使用apk包管理器替换opkg,更换软件源时需要注意版本。不推荐新手或者小白使用快照版本(SNAPSHOT)或者RC版本,同时也不建议使用非开源第三方固件。

                                    📎 参考文章

                                     
                                    💡
                                    有关OpenWRT安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~
                                    •  

                                    RouterOS使用OSPF智能分流国外流量

                                    2024年10月3日 08:00
                                    😀
                                    前一篇文章尝试使用RouterOS Address List配合防火墙Mangle的Prerouting规则进行国内外流量的自动分流,效果还不错,秉承着不把家里网络搞塌就不算完的态度,我又尝试寻找更好(更复杂)的分流方法,原来在2020年就已经有人在使用Ospf进行路由表分流,那我也来尝试配置一下看看。在通过ospf分流后,我的旁路网关这时候才真的称得上是一个旁路由,因为真的在进行路由路径的分流。

                                    📝 OSPF介绍

                                    OSPF(开放最短路径优先)是一种常用的路由协议,一般用于大型企业和网络服务提供商的网络中,家庭网络使用有点杀鸡用牛刀。它的主要功能是通过路由器的路由功能,为网络内的客户端找到通往目标网络的最短路径,并自动更新这些路径信息。OSPF的工作原理是通过收集整个网络的路径信息,然后使用一种算法计算出到每个目的地的最优路径。当网络中的某条线路发生变化时,OSPF可以迅速做出调整,保证数据能够继续以最快的方式传输。

                                    📝 配置背景

                                    整体是All In One(All in Boom),采用Proxmox VE(PVE)虚拟机方式,以下所有设备均在Proxmox VE(PVE)内。
                                    • 主路由器:RouterOS(ROS)
                                      • 光猫桥接模式,通过PPPoE Client建立pppoe-out1建立拨号,并通过指定AC Bras的方式,获取公网IPv4地址和公网IPv6地地址。
                                      • 4个网口,分别为eth1 ~ eth4,其中eth4作为WAN口与光猫物理连接,pppoe-out1也是这个接口; 其他三个接口建立桥接,为bridge1,变成类似交换机的模式。
                                      • 版本为7.16(Stable),目前已经更新至7.18(Stable)
                                    • 旁路由(旁路网关):Debian 12(Linux debian 6.1.0-30-amd64)
                                      • 接口为ens18,网关为主路由bridge1地址
                                      • 运行DAED作为科学上网服务

                                    📝 配置指南

                                    Debian配置

                                    开启IPv4及IPv6转发

                                    打开/etc/sysctl.conf 确认包括以下内容,并没有被注释:
                                    如果进行了修改,需要通过sysctl -p 命令使其生效。

                                    安装Bird2及配置

                                    在网络中使用OSPF协议时,需要一个路由守护进程来实现其功能,Bird2作为轻量且高性能的解决方法,同时支持IPv4及IPv6路由表。Bird2是一款支持多种路由协议的软件,广泛使用于Unix类系统,例如Linux和FreeBSD,在大多数常见系统中均可找到安装及使用方法。
                                    • 通过apt进行安装:
                                    bird2安装完成后默认为运行状态,我们需要先将其关闭:
                                    • 编辑Bird2配置文件:
                                    Deiban系统在安装Bird2后,配置文件默认存放位置位于/etc/bird/bird.conf ,需要对其编辑。
                                    配置说明如下:
                                    1. log syslog all;
                                    • 作用:将BIRD的所有日志输出到系统日志(syslog),可以通过journalctl -xeu bird 进行bird日志查看
                                    2. router id 10.0.0.10;
                                    • 作用:定义了BIRD路由器的标识(Router ID),Router ID是一个唯一的IPv4地址形式,需要自行更改配置为自己旁路由(旁路网关)的IPv4地址
                                    3. protocol device { scan time 60; }
                                    • 作用device协议的配置,负责发现和监控网络接口的状态。scan time 60;表示BIRD每60秒扫描一次所有网络接口,以更新接口状态信息。
                                    4. protocol kernel { ipv4 { import none; export none; }; } 和 protocol kernel { ipv6 { import none; export none; }; }
                                    • 作用kernel协议用于在BIRD的路由表和操作系统的内核路由表之间同步路由信息。
                                      • import none:不从内核路由表导入路由信息。
                                      • export none:不将BIRD中的路由信息导出到内核路由表。
                                      • 禁止BIRD与操作系统的内核交换任何路由信息,完全独立管理IPv4和IPv6的路由表,避免将Bird的静态路由信息导入到内核路由表造成本地回环,同时减少内核路由表内路由规则数目,便于进行debug。
                                    5. protocol static { ipv4; include "/etc/bird/routes4.conf"; } 和 protocol static { ipv6; include "/etc/bird/routes6.conf"; }
                                    • 作用static协议用于定义静态路由。静态路由不会根据网络拓扑的变化自动更新,需要手动配置。
                                      • ipv4:该协议块是针对IPv4的静态路由。
                                      • ipv6:该协议块是针对IPv6的静态路由。
                                      • include "/etc/bird/routes4.conf";:从指定的文件/etc/bird/routes4.conf中导入IPv4静态路由配置。
                                      • include "/etc/bird/routes6.conf";:从指定的文件/etc/bird/routes6.conf中导入IPv6静态路由配置。
                                    6. protocol ospf v2 { ... }
                                    • 作用:这部分配置定义了OSPFv2(用于IPv4)的路由协议。
                                      • ipv4 { export all; }:将BIRD中的所有路由信息导出到OSPFv2,供其他OSPF路由器学习。
                                      • area 0.0.0.0:配置OSPF的区域,这里是骨干区域0.0.0.0。在OSPF中,所有非骨干区域必须通过骨干区域连接。
                                      • interface "ens18" { type pointopoint; }:指定OSPFv2在接口ens18上运行,并且接口类型为点对点(point-to-point)。点对点类型通常用于没有中间广播域的直接链路。
                                      • 需要根据自己实际情况修改为旁路由(旁路网关)接口名称。
                                    7. protocol ospf v3 { ... }
                                    • 作用:这部分配置定义了OSPFv3(用于IPv6)的路由协议。
                                      • ipv6 { export all; }:将BIRD中的所有路由信息导出到OSPFv3,供其他OSPF路由器学习。
                                      • area 0.0.0.0:配置OSPF的区域,和OSPFv2一样,这里也是骨干区域0.0.0.0
                                      • interface "ens18" { type pointopoint; }:指定OSPFv3在接口ens18上运行,类型为点对点,和OSPFv2的配置类似。
                                      • 需要根据自己实际情况修改为旁路由(旁路网关)接口名称。

                                    生成静态路由规则

                                    与上一篇文章RouterOS自动分流方案(支持IPv4 & IPv6)所使用的方式不同,这次我们需要生成所有非中国大陆地区的IPv4和IPv6地址信息,在Github上有dndx/nchnroutes: !chnroutes - chnroutes negated可以使用。
                                    • 克隆仓库
                                    • 编辑Produc.py
                                    在第10行附近,修改—next后的default参数wg0为自己的旁路由(旁路网关)接口名称, 例如我的是ens18,就改成ens18
                                    2024年12月28日更新:
                                    删除48行IPv4Network('172.16.0.0/12')的保留地址,或者替换为172.24.0.0/13,避免影响Cloudflare访问。原因在于Cloudflare IP Range中包括:172.64.0.0/13 这个地址范围,如果将IPv4Network('172.16.0.0/12') 配置为保留地址,那么Cloudflare所使用的172.64.0.0/13 也会被标记为直接从主网关出去,不需要经过旁路网关,所以会出现部分使用Cloudlfare CDN的网站无法访问的情况,例如Linux.do
                                    另外,更换china_ip_list上游地址,原来的17mon的国内ip地址表太久未更新,存在地址范围错误,无法应对墙中墙(各种ISP运营商反诈劫持)的情况。
                                    • 编辑Makefile
                                    取消5、6、7行的注释。因为使用的是Bird2,没有Birdc6命令,所以不做修改。
                                    • 生成静态路由表
                                    需要确保你已经安装make,如果没有安装可以通过apt install make进行安装,然后执行:
                                    返回结果:
                                    即表示Bird2生成OSPF动态路由表成功。
                                    • 确认Bird2状态
                                    执行systemctl status bird.service来查看bird2的运行状态:
                                    如果Active处于inactive状态,需要手动执行systemctl start bird.service
                                    • 确认Bird2路由表状态
                                    执行命令birdc show route protocol static1查看IPv4路由表,返回结果太多,大概是如图:
                                    notion image
                                    执行命令birdc show route protocol static2查看IPv6路由表:
                                    notion image
                                    到这里Debian(旁路网关)的Bird2配置完成,下面可以开始进行RouterOS配置

                                    RouterOS配置

                                    在WinBox中点击左侧菜单Routing进行配置

                                    Router ID配置

                                    点击RoutingRouter ID进行配置。 Name自己喜欢填什么就填什么,ID填写RouterOS的地址,Dynamic ID选择only vrfSelect From VRF选择main,点击OK提交。
                                    notion image

                                    OSPF配置

                                    点击RoutingOSFP进行配置
                                    Instances配置
                                    点击New新建,填入Name(自己根据喜好填),也可以默认根据我的来。Version版本选择2,VRF使用main表,Router ID选择刚刚创建的main,或者直接输入RouterOS的IP地址。其他不动。
                                    notion image
                                    如果你使用IPv6,那么需要再新建一个Instances,Version选择为3,其他的一样。
                                    notion image
                                     
                                    Areas配置
                                    点击Areas,点击New新增一个AreaName随便,Instance选择刚刚创建IPv4的Instance(Version版本为2),Area ID为0.0.0.0 ,Type为default ,其他不用填写。
                                    notion image
                                    同样,如果你需要使用IPv6,那么也需要新建一个Area,并在Instance中选择刚刚创建的Version版本为3的Instance。
                                    notion image
                                     
                                    Interface Templates配置
                                    点击Interface Templates,点击New新增一个模板。Area选择刚刚创建的IPv4的区域,Network Typeptp(点对点,因为我们只有两个点),Cost10Priority32,其他的不用管。
                                    notion image
                                    同样,如果使用IPv6再新建一个Templates,Area选择IPv6的区域
                                    notion image
                                     
                                    查看结果
                                    上述配置完成后,点击Neighbors进行节点匹配查看,如果正常的话,应该可以发现Debian(旁路网关)上配置Bird2的节点:
                                    notion image
                                    同时在IPRoutes中应该可以看到Debian(旁路网关)上Bird2发送过来的状态为DAo的路由表(D代表动态,A是活动状态,o为ospf)
                                    notion image
                                     

                                    避免路由环路配置

                                    在以上配置完成后,在我们访问国外流量时会发生环路,即客户端 → RouterOS → Debian旁路网关 → RouterOS → Debian旁路网关… 不断的循环,所以需要对来源为Debian(旁路网关) 的流量进行特殊处理,这里又要用到我们的老朋友Mangle。
                                    1. 首先在Routing - Tables新建一个路由表,名为bypass,并勾选FIB:
                                    notion image
                                    1. IP → Firewall → Managle新建规则,并将规则移动到最上方,处于高优先级:
                                    • General
                                      • Chain: prerouting
                                      • In.Interface: bridge1
                                    • Advanced
                                      • Src.MAC Address: Debian旁路由(旁路网关)的网卡MAC地址
                                    • Action
                                      • Action: Mark Routing
                                      • New Route Mark: 选择刚刚新建的Bypass
                                     
                                    notion image
                                    1. 如果你需要使用IPv6的话,在IPv6 → Firewall → Mangle也新建一条一样的规则,同时将规则移动到最上方,处于高优先级。目前已知规则如果位于MSS钳制规则后,会导致mark routing标记无效。
                                    1. 配置Bypass路由表内路由规则
                                    1. 如果发现配置后从旁路由(旁路网关)Ping不通主路由RouterOS或者无法访问,提示Destination Host Unreachable或者Redirect Host(New nexthop: 10.0.0.1),可以在Dst.Address添加一项局域网地址范围,例如我的10.0.0.0/24 ,并点击前面空白方块出现“”,即目标地址不为局域网地址的流量。这样旁路由在使用Tailscale时候也可以正确的访问局域网内其他设备。
                                    通过以上规则,在来源为Debian旁路由(旁路网关)的流量进入到RouterOS后,使用bypass路由表进行路由,默认这个表是空的,也就是无法对流量进行路由,所以会断网,我们需要添加一些默认的规则进去,基本照抄main表的默认规则就行:
                                     
                                    • 新建IPv4局域网路由规则
                                      • Dst.Address: 局域网IP地址范围,如果你是主路由是192.168.1.1 ,那么这里写192.168.1.0/24
                                      • Gateway: 填写网桥地址,例如我的是bridge1 ,也是RouterOS建立网桥时默认名字
                                      • Distance: 1
                                      • Routing Table: bypass
                                      • notion image
                                     
                                    • 新建IPv4广域网路由规则
                                      • Dst.Address: 0.0.0.0/0
                                      • Gateway: 填写PPPoE拨号接口名称,例如我的是pppoe-out1
                                      • Distance: 1
                                      • Routing Table: bypass
                                    notion image
                                     
                                    如果你没有公网IP,运营商分配给你的是一个大内网的IP地址(100.x.x.x),可能需要手动添加一条指向大内网网关的路由规则。 由于每次拨号后IP地址会变,运营商内网的网关也会变,所以需要使用RouterOS的脚本进行定时检查和修改:
                                    • 新建IPv6局域网路由规则
                                      • Dst.Address: fe80::/64%bridge1
                                      • Gateway: 填写网桥接口名称,例如我的是bridge1
                                      • Distance: 1
                                      • Routing Table: bypass
                                    notion image
                                    然后依葫芦画瓢,把其他相关的fe:: f*:: 的内网路由规则添加进去
                                    • 新建IPv6广域网路由规则
                                      • Dst.Address: ::/0
                                      • Gateway: 填写PPPoE接口名称,例如我的pppoe-out1
                                      • Distance: 1
                                      • Routing Table: bypass
                                    notion image
                                    但是这样配置完成后,我们的IPv6还是没有办法访问互联网,通过与main表比对发现,因为缺少一条上级网关的地址:
                                    notion image
                                    但是这个地址是动态的,所以我们需要通过一个RouterOS脚本来进行动态处理:
                                    • 新建Routing Rule规则
                                    由于RouterOS的IPv6路由表使用时,会同时对main表和bypass表进行查询,所以需要添加一条Routing规则,使已经标记routing mark的连接只使用bypass表进行查询,从而避免由于路由表多表查询所产生的环路问题:
                                    选择Routing → Rules → New, 如图填写:
                                    notion image
                                    需要注意的点就一个:一定在Action选择lookup only in table,即针对Routing Mark为bypss的连接只使用bypass表查询。
                                    如果你找不到这个界面,那么也可以使用命令方式添加:
                                    至此,RouterOS部分的全部配置完成,同时整体的基于OSPF动态路由的国内外分流也已经完成。但分流的基础还是基于IP地址,所以需要使用无污染的DNS公共服务器,同时尽量使用DOH、DOT等方式进行查询,避免运营商的DNS劫持。

                                    🤗 总结归纳

                                    相比上一篇使用的Address List方式,因为是直接查询路由表,不用对目标IP进行取反匹配,而且不用对所有流量进行mangle标记,仅需要对来源旁路由的流量进行标记处理,在系统性能占用上会少一些,同时也可以开启RouterOS的fast forward功能、fast track功能以及fast path,进一步降低CPU对流量处理所需资源,N4100在Fast.com300M跑满时CPU占用30%左右,内网2.5G跑满CPU占用不到10%。而且避免了旁路由(旁路网关)挂断之后国外网站完全无法访问的情况。
                                    我认为即便是在使用Dae这种直连效率非常高的透明代理解决方案的情况下,直连流量尽可能的不经过旁路由(旁路网关)才是最佳的效率选择,所以相比使用Mihomo或者其他的软件,在分流规则的第一层通过路由表方式将国内流量直接发出去才能避免产生更多的问题(例如NAT等等等)并获得最佳的访问速度。
                                    至于为什么要实用RouterOS来做,当然是因为RouterOS相对来说配置起来更为顺手,稳定性更好一些。当然,这些通过OpenWRT也可以实现。

                                    📎 参考文章

                                     
                                    💡
                                    有关旁路由(旁路网关)安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~
                                    •  

                                    RouterOS自动分流方案(支持IPv4 & IPv6)

                                    2024年9月30日 08:00
                                    😀
                                    随着更换了路由方案,我也用上了MikroTik RouterOS作为主路由,但依然没有更换主路由 + 旁路网关(旁路由)的整体网络拓扑。为了加强国内网站及服务的访问速度,同时减少网关跃点,也就通过RouterOS的防火墙和路由功能做了一些分流配置。目前Google到的大部分都是IPv4部分的分流配置,IPv6部分的内容很少,自己的配置过程中也遇到了一些坑,整理一下,作为参考。

                                    📝 背景

                                    为什么使用RouterOS(ROS)作为主路由

                                    1. 我所使用的主路由还是ASUS-ACRH17,已经是6年前的设备,刷了OpenWRT。尽管OpenWRT有SFE功能,但是CPU的处理性能已经落后太多。同时我又有2.5G网络的需求,千兆网络已经不太满足于我的内网使用需求,在添加一个2.5G交换机和更换主路由为支持2.5G的软路由之间,我选择了后者。现在的ASUS-ACRH17已经刷了集客AP固件,踏踏实实的去做一个安静的AP了。
                                    1. 一直听闻RouterOS作为商用路由系统在流控方面做的很好,也相对完善。OpenWRT已经玩的差不多了,尝试一下新的东西。
                                    1. 其他路由系统我也有调研和尝试,例如Opnfense,但是在IPv4的NAT方面做的不是很好,即便经过配置,NAT类型稳定在FullCone(全锥)也很难。
                                    1. 作为主路由,要稳定且可控。
                                    当然RouterOS与OpenWRT相比也有一些问题,上手难度较高,配置项复杂。另外最明显的就是在NAT方面,在电信大内网(CGNAT)的情况下,原来OpenWRT开启DMZ可以获得映射公网的NAT级别,现在用RouterOS最高到FullCone全锥,不过这个可以通过指定AC Name选择Bras解决。

                                    为什么要在RouterOS进行分流

                                    旁路由我认为是在国内环境下满足基本需求的同时,兼容多种服务,扩展性和稳定性综合考虑最好的方案。但是旁路由这种拓扑下本身也存在问题:国内网站及服务的访问速度和非对称路由。
                                    一般来说,我们正常访问国内网站的跃点应该是这样的:
                                    notion image
                                    就像这样:
                                    notion image
                                    第一跳为本地路由地址,第二跳为运营商的区域网关地址。但是在具有旁路由(旁路网关)的环境下变成:
                                    整体链路请求需要内网两个网关的跃点,第一跃点为旁路网关,第二跃点为主路由网关,尽管内网速度很高,延迟很低,但是还是因为数据多了一层的处理,即便是开启绕过中国大陆IP相关功能,也还是会产生影响。
                                    notion image
                                    而网站/服务的响应请求返回时,在主路由层面直接可以路由到客户端,不再经过旁路由(旁路网关),这就造成了非对称路由问题,在家庭层面可能日常使用感觉不出,但是偶尔一些小小的奇怪问题排查起来也会非常的难受,尤其是存在NAT(网络地址转换)的情况下。
                                    还有由于在IPv6网络环境下,局域网内客户端会把RA服务器作为默认网关,在原有双OpenWRT情况下会存在两个RA服务器,或者客户端实际上并没有正确通过旁路由的RA服务器进行配置,出现类似于网心云IPv6待连通的情况,通过RouterOS一个RA服务器并进行IPv6国内外地址分流,也可以一并解决掉。
                                    所以,这次方案的目标就是:
                                    1. 实现国内网站只需要经过主路由一层网关。
                                    1. 实现对称路由。避免因为非对称路由产生的防火墙失效以及合法连接误判为非法而丢弃问题。
                                    1. 完成基于IPv6的地址科学上网分流

                                    📝 配置指南

                                    网络基本配置

                                    这部分基本是RouterOS的基础配置,包括IP地址范围、IPv4 DHCP服务器、IPv6地址获取、IPv6 ND等部分。

                                    IP地址配置

                                    主要是配置RouterOS的本地地址,例如我的是10.0.0.1
                                    notion image

                                    IPv4 DHCP配置

                                    主要配置内容在Network下, 配置下发的默认网关和DNS。默认网关配置为RouterOS的本地地址即可,DNS服务器配置为旁路由(旁路网关)地址,由旁路由(旁路网关)上的代理软件或者MosDNS这种软件提供DNS请求的解析。
                                    notion image

                                    IPv4 DNS配置

                                    RouterOS的DNS服务器配置意义不大,只是用来进行一些类似*.arpa*.lan 这种本地服务的DNS请求解析。开启就勾选Allow Remote Requests,关闭就取消勾选。上游DNS选择一个可靠,尽量无污染的公共DNS服务。如果家里没有设备默认使用DHCP分类的网关作为DNS服务器的话,也可以不填写。

                                    IPv6 地址获取

                                    正常RouterOS通过PPPoE获取的配置就可以,网上一搜一大把。

                                    IPv6 ND

                                    需要注意的就是IPv6 ND中需要将DNS Server配置为旁路网关地址,勾选Advertise MAC AddressAdvertise DNS两个选项。
                                    notion image
                                    Managed Address Configuration不勾选,不需要通过DHCPv6进行IPv6地址的配置,全部都用SLACC就可以了,这样Android设备也没问题,也不用再配置DHCPv6服务,省事。
                                    Other Configuration不勾选,既然已经不需要DHCPv6服务器了,那么也就没有必要通知客户端从DHCPv6服务器获取其他配置信息,全部走SLACC无状态就可以了。

                                    添加路由表

                                    左侧Routing → Tables,新建一个路由表,名字自己随便写,我这里写的bypass,后面配置防火墙Mangle表Prerouting规则时会用到。
                                    • Enable: 勾选
                                    • FIB: 勾选
                                    在RouterOS(尤其是 MikroTik 设备)中,FIB的全称是Forwarding Information Base(转发信息库)。它是网络设备(如路由器、交换机)中关键的转发决策模块,与RIB(Routing Information Base,路由信息库)共同构成数据包转发的核心逻辑。

                                    其他设置

                                    采用Mangle进行路由标记并进行静态路由方式,需要关闭RouterOS的fast pathfast track以及fast forward,否则部分连接可能无法正确被进行路由标记,导致分流错误。关闭后会对转发性能有所影响,采用静态路由方式无法避免,如果需要内网的高转发性能,建议增加交换机。
                                    • Fast Forward关闭位置位于左侧菜单栏 → Bridge → 双击Bridge
                                    notion image
                                    • Fast Path关闭位置位于左侧菜单栏 → Bridge → Configuration → Settings
                                    notion image
                                    • Fast Track没有关闭入口, 需要确认IP和IPv6防火墙filter表中没有fasttrack-connection 相关规则即可。
                                    同时,如果是X86软路由方式使用RouterOS,建议将HW Offload 也关闭,因为X86软路由没有硬件转发芯片。

                                    OpenWRT旁路网关(旁路由)配置

                                    关闭所有的DHCP服务,关闭所有的IPv6 RA服务,也就是不管WAN口、LAN口、还是LAN6接口,DHCP服务器中的IPv6设置全部配置为禁用。

                                    IPv4自动分流

                                    RouterOS的分流是通过路由表和防火墙Mangle表Prerouting标记方式实现,其实理论上OpenWRT也可以实现,但是因为没有GUI,所以需要自己通过命令行方式进行路由表的导入以及防火墙路由标记等等,上手难度较高。

                                    导入IPv4路由表

                                    具体原理就是导入别人整理好的国内CN IP列表到Address List里,这里也就不搞手动敲命令导入那一套了,直接通过脚本走起:
                                    1. SystemScripts, 新建一个脚本,Name随便写,写个自己能记得住这个脚本是什么的名称。
                                    1. Source输入如下内容:
                                    具体意思就是从https://raw.githubusercontent.com/PaPerseller/chn-iplist/master/cn.rsc 下载RouterOS支持的RSC格式国内IP列表,然后导入,导入完成之后删除下载的文件并在log日志中输出update done
                                    1. Apply之后,点击一下右边的Run Script。如果没问题的话,IPFirewallAddress Lists里面应该添加了List名称为CN 的一堆地址。
                                    1. SystemScheduler,新建一个定时任务,Name一样写个自己记得这个定时任务是干什么的名称。
                                    1. One Event输入以下内容:
                                    其他内容按照图里填吧,我这里是3天执行一次。
                                    notion image
                                    1. ApplyOK,保存关闭。

                                    添加IPv4防火墙规则

                                    点击左侧IPFirewallMangle,新建一条规则,Comment随便写,只是一个备注,让你记得这条规则是用来做什么的。
                                    • General
                                      • Chain: prerouting
                                      • Dst.Address List: 下拉选择CN,然后点击前面的空白方块为 ,即目标地址不属于CN这个Address List。
                                      • Src.Address List: 非必选。源地址范围,如果不选择的话,就是默认全部。如果希望局域网内只有部分设备使用这个自动分流规则,那么可以自己去Address List添加一个列表
                                    • Extra
                                      • Dst.Address Type: 下拉选择local,然后点击前面空白方块为 ,即目标地址不属于局域网地址
                                    • Action
                                      • Action: 选择makr routing
                                      • New Routing Mark: 选择你添加的路由表,我这里是bypass
                                      • Passthrough: 勾选
                                    点击OK保存。为了避免产生路由环路,我们需要对旁路网关发送来的流量进行特殊处理,避免被路由标记。同样还是在Mangle下新建一条规则:
                                    • General
                                      • Chain: prerouting
                                      • Src.Address: 填写旁路网关的IP地址
                                      • In.Interface: 选择bridge1 ,如果桥接端口名字不是这个,那么就选你桥接端口的名称,例如Lan什么的。
                                    • Advanced
                                      • Src.MAC Address: 如果你填写了Src.Address,那么这里也可以不填写。 如果你没填写,那么这里写旁路网关的MAC地址,如果旁路网关有WAN口,那就写WAN口地址。
                                    • Action
                                      • Action:Accept
                                    到这里RouterOS的防火墙规则就配置完成,大致意思就是如果访问的目标地址不属于中国大陆的IP地址,就打上一个路由标记。如果访问的来源是旁路由(旁路网关)地址,就直接接受,不打路由标记。

                                    添加IPv4路由规则

                                    左侧菜单IPRoutes,新建一条路由规则:
                                    • Enable:勾选
                                    • Dst.Address:0.0.0.0/0
                                    • Gateway: 旁路网关IP地址
                                    • Distance:1
                                    • Scope:30
                                    • Target Scope:10
                                    • Routing Table: 最开始建立的那个路由表名称,选中即可,例如我的是bypass
                                    点击ApplyOK,保存提交。
                                     
                                    到这里,IPv4部分配置完成,可以通过tracert (Windows)或者tracerout (macOS或者Linux)分配对国内和国外网站进行路由追踪测试,测试结果应符合:
                                    • 国内:客户端 → 主路由 → …
                                    • 国外:客户端 → 主路由 → 旁路网关 → 主路由 → …

                                    IPv6自动分流

                                    IPv6自动分流的原理与IPv4的基本相同,也是通过防火墙Mangle表对连接进行Prerouting打路由标记,唯一不同的部分在于对旁路网关的特殊处理上。由于IPv6地址在下发过程中,会为每个设备都分配一个公网的IPv6地址,例如240e: 开头的这种,同时设备自身还具有一个本地链路地址,例如fe80: 这种,在进行数据传输的过程中,无法确切判定是使用的公网地址还是本地链路地址(RouterOS在这部分很模糊),我尝试通过脚本定时获取旁路网关的所有IPv6地址并加入Address List进行标记也无法正常解决,RouterOS的防火墙无法对来自旁路网关的流量直接进行Accept,最终造成路由环路,IPv6请求全部超时。但是,如果放弃三层交换方式,使用二层交换方式,设置Src.Mac Address即可正常解决环路问题。

                                    导入IPv6路由表

                                    具体原理就是导入别人整理好的国内CN IPv6列表到Address List里:
                                    1. SystemScripts, 新建一个脚本,Name随便写,写个自己能记得住这个脚本是什么的名称。
                                    1. Source输入如下内容:
                                    1. Apply之后,点击一下右边的Run Script。如果没问题的话,IPFirewallAddress Lists里面应该添加了List名称为CN 的一堆地址。
                                    1. SystemScheduler,新建一个定时任务,Name一样写个自己记得这个定时任务是干什么的名称。
                                    1. One Event输入以下内容:
                                    1. ApplyOK,保存关闭。

                                    添加IPv6防火墙规则

                                    点击左侧IPv6FirewallMangle,新建一条规则,Comment随便写,只是一个备注,让你记得这条规则是用来做什么的。
                                    • General
                                      • Chain: prerouting
                                      • Dst.Address List: 下拉选择chnroutes.ipv6,然后点击前面的空白方块为 ,即目标地址不属于chnroutes.ipv6这个Address List。
                                    • Action
                                      • Action: 选择makr routing
                                      • New Routing Mark: 选择你添加的路由表,我这里是bypass
                                      • Passthrough: 勾选
                                    点击OK保存。为了避免产生路由环路,我们需要对旁路网关发送来的IPv6流量进行特殊处理,避免被路由标记。还是在Mangle下新建一条规则:
                                    • General
                                      • Chain: prerouting
                                      • In.Interface: 选择bridge1 ,如果桥接端口名字不是这个,那么就选你桥接端口的名称,例如Lan什么的。
                                    • Advanced
                                      • Src.MAC Address: 写旁路网关的MAC地址,如果旁路网关有WAN口,那就写WAN口地址。
                                    • Action
                                      • Action:Accept
                                    到这里防火墙规则就配置完成,大致意思就是如果访问的目标地址不属于中国大陆的IP地址,就打上一个路由标记。如果访问的来源是旁路网关地址,就直接接受,不打路由标记。
                                    需要确认后面添加的旁路由规则要在路由标记规则上面。防火墙规则匹配是由上至下顺序进行。

                                    添加IPv6路由规则

                                    左侧菜单IPv6Routes,新建一条路由规则:
                                    • Enable:勾选
                                    • Dst.Address:::/0
                                    • Gateway: 旁路网关的本地链路IPv6地址 ,例如fe80::d359:6e90:0:be24:11ff:feff:ff6b
                                    • Distance:1
                                    • Scope:30
                                    • Target Scope:10
                                    • Routing Table: 最开始建立的那个路由表名称,选中即可,例如我的是bypass
                                    点击ApplyOK,保存提交。
                                     
                                    到这里,IPv6部分配置完成,可以通过tracert -6 (Windows)或者tracerout -6 (macOS或者Linux)分配对国内和国外网站进行路由追踪测试,测试结果应符合:
                                    • 国内:客户端 → 主路由 → …
                                    • 国外:客户端 → 主路由 → 旁路网关 → 主路由 → …

                                    🤗 其他脚本

                                    一个RouterOS获取所有局域网下IPv6客户端,并写入到Address List的脚本,包括客户端的公网IPv6地址,本地链路IPv6地址以及局域网IPv6地址:
                                    另外,通过使用OSPF动态路由方式实现国内及国外IP分流可以参考:《🔀RouterOS使用OSPF智能分流国外流量》;

                                    📎 参考文章

                                     
                                    💡
                                    有关RouterOS安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~
                                    •  

                                    一键免费部署你的私人ChatGPT网页应用

                                    2023年4月9日 08:00
                                    😀
                                    一键免费部署:你只需要有一个 OpenAI API Key,就可以使用 Vercel 免费一键部署你的私人 ChatGPT 网页应用。精美的 UI:这个网页界面有响应式设计,支持深色模式,还可以识别和高亮代码块。海量的 prompt 列表:这个仓库内置了大量的中文和英文 prompt,可以帮助你启动不同主题的对话。超长对话支持:这个仓库可以自动压缩上下文聊天记录,在节省 Token 的同时支持超长对话。一键导出聊天记录:这个仓库可以让你一键导出聊天记录,完整的 Markdown 支持,方便你与他人分享。
                                    ChatGPT Next Web 是一个基于 OpenAI API 的 ChatGPT 网页界面,可以让你轻松地与 ChatGPT 交流。这个也是目前我在使用最为稳定的一个ChatGPT的网页客户端,一方面可以避免官方ChatGPT的一段时间不操作断线问题,让问答流程更顺畅,另外一方面也可以避免因为IP问题被OpenAI禁止访问,同时回答的反应速度也很快。一键多少是有点夸大的,但是在完成准备之后,真的只需要点一下Deloy。Siri什么的弱爆啦!
                                    这个仓库的主要功能有:
                                    • 一键免费部署:你只需要有一个 OpenAI API Key,就可以使用 Vercel免费一键部署你的私人 ChatGPT 网页应用。完全免费,也不用负担任何的服务器费用。
                                    • 精美的 UI:这个网页界面有响应式设计,支持深色模式,还可以识别和高亮代码块。
                                    • 海量的 prompt(提示词) 列表:这个仓库内置了大量的中文和英文 prompt,可以帮助你启动不同主题的对话。
                                    • 超长对话支持:这个仓库可以自动压缩上下文聊天记录,在节省 Token 的同时支持超长对话。
                                    • 一键导出聊天记录:这个仓库可以让你一键导出聊天记录,完整的 Markdown 支持,方便你与他人分享。

                                    部署教程

                                    1 准备好OpenAI的api key,访问:OpenAI API
                                    2 将Yidadaa/ChatGPT-Next-Web这个Repositories(仓库)Fork一份到自己GitHub的Repositories中;
                                    3 打开:Vercel,登录直接使用github账号进行登录即可,然后进入控制面板,也就是默认登录后跳转回来的页面。
                                    导入(import)自己刚刚fork的仓库;
                                    notion image
                                    Project Name随便填写,默认是Github仓库的名字,Framework Preset不要动。
                                    notion image
                                    修改Environment Variables中的参数,填写环境变量和访问密码;
                                    填写完成之后,点击Deploy即可开始部署,整个部署时间,大概在3-5分钟;
                                    notion image
                                    在部署完成之后,点击右侧的Continue to Dashboard进入控制面板;
                                    notion image
                                    Domains就是自己所部署的私人ChatGPT访问地址;
                                    notion image

                                    访问配置

                                    notion image
                                    点击左下角的设置按钮
                                    notion image
                                    找到Access Code(就是上面的Code)和API Key,将我们在部署时候配置的环境变量填入对应的输入框中,然后点击右上角的X关闭,自动保存且配置生效。
                                    Model(模型)建议不要更改,维持gpt-3.5-turbo,如果不是gpt4的api,贸然修改会出现访问被拒绝的情况:“Something went wrong, please try again later.”
                                    Temperature(随机值)调整的更高,ChatGPT会有更多的即兴发挥,也就是更具创意,但是内容的真实性会降低。
                                    Presence Penalty(话题新鲜度)调整的更高,使话题更能延伸到新的话题,但是值过高会出现文字乱码。

                                    其他问题

                                    官方版本提示:
                                    换节点,清除浏览器Cookie,使用浏览器隐私模式访问。
                                    最近不知道是因为Vercel被薅羊毛薅的太多,还是OpenAI的API资源太过紧张,ChatGPT-3-turbo的反应速度有点不太行。
                                     
                                    •  

                                    《怪物猎人:荒野》帧数优化指南:通过Config.ini参数调整提升帧数

                                    2025年3月3日 08:00
                                    😀
                                    《怪物猎人:荒野》(Monster Hunter Wilds)已经发售4天,Steam版本的优化一言难尽,AMD Ryzen 5600 + Nvidia RTX 3070居然高特效2K分辨率情况下,跑不到100帧,对于一款动作游戏来说很难受,而且还会伴随各种多边形渲染错误。本文将通过修改《怪物猎人:荒野》配置文件config.ini的方式,提高CPU的利用率,以及对渲染参数优化,提高游戏帧数(FPS)和狩猎体验,让铳枪真男人在龙击炮时再也不掉帧。真男人玩什么大剑,肯定要玩铳枪,能插能射还能甩。

                                    📝 《怪物猎人:荒野》config.ini修改方法

                                    Steam版本的《怪物猎人:荒野》安装后,config.ini 配置文件位于安装磁盘\SteamLibrary\steamapps\common\MonsterHunterWilds 内。
                                    使用记事本或者VS Code打开,通过Ctrl-F查找以下参数并作对应修改。
                                    我个人的电脑配置如下,目前能够满足在默认高特效情况下,开启DLSS,FPS90帧左右。前两天给整机清了灰,感觉还能再战2年。在这里也随口提一下,利民TF8硅脂在使用2年后,衰减的很厉害,建议重新涂抹。
                                    CPU
                                    AMD Ryzen 5600 @ 4.65GHz
                                    显卡
                                    MSI 万图师 3070 三风扇版本 未超频
                                    内存
                                    32GB @ 3200MHz 16-18-18-38
                                    主板
                                    MSI MAG B550 Tomahawk
                                    Windows版本
                                    Windows 11 24H2 10.0.26100.3194
                                    OpenGL版本
                                    4.6.0 NVIDIA 572.60

                                    ParallelBuildProcessorCount

                                    ParallelBuildProcessorCount是并行编译构建相关参数,默认值为8,需要修改为你的逻辑处理器数量。逻辑处理器数量可在任务管理器中-性能-CPU-逻辑处理器 中查看。以我的AMD Ryzen 5600为例,逻辑处理器数量为12
                                    notion image
                                    所以修改后为:

                                    RenderWorkerThreadPriorityAboveNormal

                                    RenderWorkerThreadPriorityAboveNormal是图形渲染优先级参数,用于配置渲染工作线程的优先级,确保渲染任务能够获得更多的CPU资源,这在CPU资源紧张的情况下会起到一定作用,提升渲染性能并保证渲染的实时性,减少卡顿并提升游戏帧率。默认情况下是Disable状态,我们需要将其开启。
                                    修改后为:

                                    MinimumStreamingTextureResolution

                                    MinimumStreamingTextureResolution是纹理流式加载的最小分辨率,通过限制加载的纹理的大小来减少内存占用和GPU负载。这里在原来的配置文件中可能存在一处拼写错误MinimumStreamingTextureResoltuion_256,修改后的为:
                                    目前也有反馈此项修改后并不会对游戏有任何的帧数提升。死马当活马医还是等待更新,看个人选择。

                                    Fog_Enable

                                    体积雾开关,建议保持enable状态,即默认状态。如果帧数实在达不到要求,可以考虑关闭。关闭后会缓解一些画面灰蒙蒙的感觉。

                                    VolumetricFogControl_Enable

                                    同样是体积雾相关开关,用于模拟更真实的雾气效果,让雾气具有光线散射和动态体积感。默认情况下为开启enable 状态。如果需要大幅提高帧数,可以考虑关闭。

                                    配置config.ini只读权限

                                    为了避免《怪物猎人:荒野》程序自身修改config.ini文件至默认配置,我们需要对config.ini设置只读权限。右键config.ini ,打开属性 → 勾选只读(Read-only),点击应用并保存。
                                    notion image

                                    🤗 《怪物猎人:荒野》其他优化办法

                                    通过上述的config.ini的优化办法能够提升的帧数有限,如果使用RTX20系或者RTX30系显卡的用户,还可以通过帧生成模组(Mod)进一步提升帧数。参考链接:《【心得】魔物獵人荒野_20/30系顯卡DLSS幀生成模組教學 @電腦應用綜合討論 哈啦板 - 巴哈姆特
                                    另外,不清楚Steam上的拼好帧对《怪物猎人:荒野》有没有用,有没有用过的大手子说一下,天天在抖音上刷到,但是还没见真实的反馈。

                                    📎 参考文章

                                     
                                    💡
                                    有关Steam游戏安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~ 版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
                                    •  

                                    OpenClash替换使用Mihomo内核

                                    2024年8月29日 08:00
                                    🚧
                                    OpenClash是我在OpenWRT旁路网关(旁路由)上使用时间最长的科学上网插件,其依赖于Clash的内核文件使用,在功能的完整性和使用顺手程度上,目前还没有可完全替代的选项。目前Clash-meta内核分支已经改名为Mihomo,OpenClash也已经大概2个月没有更新了,插件自带的内核更新功能暂时还不能自动更新使用Mihomo内核,为了使OpenClash支持Mihomo内核所带来的一些新的功能,所以有了这篇文章。
                                    notion image

                                    📝 Mihomo内核介绍及替换方法

                                    Mihomo内核介绍

                                    Mihomo内核并不是一个新的Clash内核,其前身是Clash-Meta内核,但是由于Clash For Windows删库风波问题,所以改名为Mihomo(原神!启动!)Mihomo继承了Clash的核心功能,综合原始Clash及Clash Premium核心功能,并在此基础上根据需要持续更新迭代,是目前Clash最为主流的核心。同时,由于Mihomo内核是在原Clash-Meta内核基础上进行的后续开发,所以其使用方法与基础命令均没有改变,这也使得我们可以直接在OpenClash中对内核进行替换。

                                    Mihomo功能介绍

                                    代理模块
                                    • 实现了基于TCP握手机制的主动健康检测(如urltest/fallback)。
                                    • 支持Relay代理链和TCP连接并发。
                                    规则模块:
                                    • 全面的规则支持,包括GEOSITE、GEOIP、入站类型规则IN-TYPE和规则集RULE-SET。
                                    • 支持SRC-PORT和DST-PORT的多条件、TCP/UDP的分别控制、网络类型匹配(TCP/UDP)、PROCESS-NAME匹配等。
                                    • 逻辑判断规则(NOT/OR/AND)、子规则集、所有规则的源IPCIDR条件。
                                    • GEODATA MODE切换(mmdb/dat)和GEODATA LOADER模式切换(普通/小内存模式),适用于各种设备。
                                    DNS模块:
                                    • 包括域名嗅探器Sniffer、使用Geosite的Fallback-Filter和Redir-Host远程解析。
                                    • 支持使用代理解析IP和DNS over QUIC。
                                    TUN模块:
                                    • 支持macOS、Linux和Windows平台。
                                    • 内置iptables和Wintun驱动程序,无需手动配置。
                                    • 支持gVisor/System堆栈以及Mix堆栈(混合堆栈)。

                                    Mihomo新增功能

                                    除上述功能外,在Clash-Meta更名为Mihomo之后,又增加了如下功能支持:
                                    DNS模块:
                                    • 增加HTTP/3 DNS支持(H3的速度真的很快),包括是否优先使用DOH的HTTP/3以及指定DOH服务器强制使用HTTP/3
                                    • nameserver-policy规则:优先于nameserverfallback的dns进行解析,可以在规则中通过GEOSITE分组进行DNS指定,增加DNS解析规则灵活性。但由于nameserverfallback dns server同时请求的原因,并不能解决DNS泄露问题。
                                    • fallback-filter规则:支持GEOIPGEOSITE匹配
                                    • proxy-server-nameserver:指定解析节点所使用的DNS服务器
                                    策略组模块 - 路由规则:
                                    • 增加PROCESS-NAME进程匹配,软路由上可匹配本机进程
                                    • 增加PROCESS-NAME-REGEX,使用进程名称正则表达式匹配
                                    • 增加PROCESS-PATH-REGEX,使用进程路径正则表达式匹配
                                    • 增加SUB-RULE子规则
                                     
                                    Tun模块:
                                    • 支持gVisorSystem的混合堆栈,tcp使用system栈,udp使用gvisor栈,使用体验可能相对更好,同时稳定性也有保证。
                                    • 支持流量转发隧道(Tunnel)
                                    主要我们所使用到的,还是在DNS模块的部分,可以更为精准的控制DNS的解析,包括IPv6 DNS的解析。

                                    OpenClash替换Mihomo内核方法

                                    1. 首先确认你使用的是OpenWRT及OpenClash,并对自己将进行的操作目标有所知悉。下述操作的系统为X86-64架构,OpenWRT版本为ImmortalWrt 23.05.4。如果担心出现不可恢复的问题,可以先备份虚拟机或OpenClash整体配置。本篇内容也适用于OpenClash内核更新失败的手动解决方案。
                                    1. 通过SSH登入OpenWRT,并进入OpenClash的核心所在文件夹:
                                    1. 备份原来的meta核心:
                                    1. 下载Mihomo核心,从https://github.com/MetaCubeX/mihomo/releases 选择版本和自己路由器架构的核心包,并复制链接地址,替换下面命令中的地址,X86-64用户选择mihomo-linux-amd64-compatible-go120后缀即可。
                                    1. OpenWRT网页端进入OpenClash,点击插件设置 - 版本更新,查看[Meta]当前内核版本是否为v1.18.7,如图所示
                                    notion image
                                    1. 如果显示为当前下载的内核版本号,即表示替换成功。重启OpenClash即可生效。不要再点击检查并更新了。

                                    🤗 总结归纳

                                    因为Notion AI到期,所以没有课代表总结。反正就是一个简单的Mihomo内核替换,也没什么难度。
                                    Mihomov1.18.8版本更新了,可以更新起来了。但是WireGuard的问题还是没有修复。
                                    OpenClash目前已完全支持Mihomo内核,可以直接使用自带的更新功能进行更新。

                                    📎 参考文章

                                     
                                    💡
                                    有关OpenWRT和Mihomo安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~
                                    •  

                                    在OpenWRT上使用Neovim

                                    2024年8月26日 08:00
                                    🖥️
                                    因为自己经常需要通过SSH对家里的网络进行调试,包括主路由的配置、旁路由(旁路网关)的配置、OpenClash、Adguard home、MosDNS等等,频繁的需要用到一个舒服的编辑器对jsonyaml以及xml等配置文件或结构化数据文件进行修改。我在本地环境中使用较多的是NeoVim,之前也分享过LazyVim的文章。而在OpenWRT的系统软件仓库中,目前还没有这个软件的ipk,所以今天就将我自己在OpenWRT上进行编译安装NeoVim的过程以及遇到的坑整理出来。

                                    📝 Neovim安装配置

                                    开始之前

                                    为避免编译安装过程中产生不可控的问题,我在这篇教程中用一个全新虚拟机环境。固件来源于ImmortalWrt Firmware,Generic x86/64架构,版本号为23.05.3,内核版本为5.15.162,没有额外添加任何预安装软件包,与默认提供的软件包一致,可用空间尽量大,这次操作我的实际使用空间大概在1.2G左右,但是在安装完成之后可以进行移除。
                                    同时,建议在开始下面的操作之前,如果你是已经在使用的OpenWRT系统,建议做好备份,如果是虚拟机系统,建议添加检查点或备份点。

                                    Neovim编译安装流程开始

                                    以下内容是在OpenWRT内编译安装Neovim的全部流程。如果不想看流程,可以直接看总结
                                    首先通过opkg进行软件仓库源更新。
                                    返回结果为Signature check passed. 且没有报错继续下一步
                                    由于我们需要通过git方式克隆neovim在github上的仓库,所以需要这两个软件包,其中git-http用于在SSL情况下使用git,非SSL模式Github不支持克隆拉取仓库。
                                    期间,包括依赖在内,总共安装的软件包括:git, git-http, zlib, libcurl4, libnghttp2-14
                                    通过git clone进行neovim的仓库拉取,并尝试执行make
                                    返回错误结果
                                    原因是我们没有make的软件包,通过opkg进行安装,并再次尝试make
                                    返回错误结果:
                                    提示不存在cmake。Openwrt并不提供cmake的安装文件,但是我们可以通过python-pip的方式进行曲线安装,目前主流的Python版本为Python3。
                                    之后再进行make时提示:
                                    意思时没有找到c编译器,我们可以安装gcc解决
                                    这次编译了很长时间,直到在安装luajit时进行报错:
                                    我们直接用opkg安装
                                    然后继续尝试执行make,这次报错变了:
                                    提示我们没有ld命令没有ldl这个参数的选项。 通过查看openwrt的文档可以发现,这些库中的函数实际上已经直接包含在musl libc中。然而,由于某些工具尝试显式链接这些库,你可能会遇到“No Such file or directory”的错误。为了解决这个问题,只需为它们创建存根库即可。
                                    使用Vi建立一个sh文件vi run.sh,并在文件中输入以下内容:
                                    然后继续尝试make CMAKE_BUILD_TYPE=RelWithDebInfo ,这次报错内容变更为:
                                    提示为没有install命令,这个的解决方法为:
                                    报错内容变更为:
                                    提示找不到GettextGettext目前没有安装包的一类的快捷安装方法,我们需要通过编译进行安装
                                    然后继续尝试执行neovim的编译,返回错误
                                    我们通过创建存根库绕过:
                                    到这里,基本上编译已经完成,我们可以进行安装
                                    二进制的执行文件在/usr/local/bin下,我们可以直接移动到/usr/bin或者软连接过去。之后如果想安装astronvim或者lazyvim可以直接进行执行相关安装命令。

                                    🤗 OpenWRT编译安装Neovim精简版

                                    OPKG安装依赖

                                    PIP安装依赖CMAKE

                                    编译安装Gettext

                                    创建存根库

                                    拉取Neovim库并编译安装

                                    完成后nvim二进制文件位于/usr/local/bin

                                    直接下载Neovim二进制文件

                                    如果你不想自己进行编译,恰巧你也是X86_64架构的OpenWRT,那么也可以直接下载我编译好的二进制文件进行使用。

                                    📎 参考文章

                                     
                                    💡
                                    有关OpenWRT安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~
                                    •  

                                    提升家庭网络稳定性:OpenWRT限制网心云连接数教程

                                    2024年8月23日 08:00
                                    🚧
                                    最近把家里的网络重新梳理了一下,但是经常发现网络抖动非常大,偶尔抖动会增加到200ms左右或者以上,同时在fast上进行测速,每次的结果也相差巨大。因为家里有Hyper-v的虚拟机在挂着网心云赚网费,所以开始怀疑是上传把带宽跑满了,所以导致的网络抖动。之前我也是通过Hyper-v的管理面板进行虚拟机的限速,但没有注意过连接数这个问题。在我之前的理解里,理论上限制了上传速度,就不应该会对网络本身产生任何的影响。在查阅了很多资料之后,发现主路由的活动连接数突破了12000(immortalwrt在我acrh17这个型号上,默认给的最大连接数量才30000出头),而且考虑到运营商也会对连接数量做出限制,所以才注意到这个问题。

                                    📝 付费内容

                                    连接数量对网速的影响

                                    之前我并没有意识到连接数量对网络稳定性和网络速度存在影响,但是查阅部分资料后,发现活动连接数量过多会影响网速的原因主要包括以下几个方面:
                                    1. 带宽消耗:每个连接都占用了网络带宽,活动连接数量增加时,带宽会被多个连接分摊,导致每个连接可用的带宽减少,最终导致整体网速下降。
                                    1. 路由器/网络设备的处理能力:路由器和其他网络设备在处理大量连接时会增加工作负荷。如果设备的处理能力有限,过多的连接会导致设备反应变慢,增加数据包的处理延迟,进而影响网速。
                                    1. 网络拥塞:过多的连接可能会导致网络拥塞,尤其是在家庭局域网中。网络拥塞会导致数据包丢失、重传等问题,进一步降低实际的传输速度。
                                    1. NAT表的限制:对于使用NAT(网络地址转换)的网络,每个连接需要在NAT表中建立一条记录。NAT表的容量有限,当连接数过多时,NAT表可能会溢出或处理速度变慢,导致网络性能下降。
                                    1. CPU和内存负载:如果你的设备(如计算机或服务器)处理大量的并发连接,CPU和内存负载会增加,可能导致设备性能下降,进而影响网速。例如我的Asus Acrh17,在12000活动连接数时,内存占用超过70%,此时局域网内其他设备明显可感觉到延迟。
                                    1. 运营商活动连接数量限制:大部分运营商会对每户入网的宽带进行活动连接数量限制,不同地区、不同运营商甚至所属不同片区均不相同,当达到一定量的活动连接数量时,更多的连接会进行丢包处理,所以会直接影响到使用者的体验。目前检索到的消息可以查看这里:
                                    宽带连接数限制测试结果(来源): 上海电信:公网不限制,私网 8000,云宽带 2800 上海移动:私网 2500 上海联通:公网 6000,私网 1500 江苏移动:公网不限制,私网 2500 浙江移动:公网 6000,私网 2000 江苏联通:公网 6000,私网 3000 江苏电信:公网不限制,私网 6000
                                     

                                    本地网络环境介绍

                                    简单介绍一下我本地的网络环境:
                                    notion image
                                    在这个家庭网络的拓扑结构中:
                                    1. 光猫:桥接模式(中兴老款F450,已尝试修改了硬桥接,未使用软桥接方式,同时,未做光猫本身最大连接数修改)
                                    1. 主路由:ASUS-ACRH17,系统为OpenWRT,开启Fullcone NAT。
                                    1. 旁路由(旁路网关):X86虚拟机(Hyper-V虚拟化),系统为OpenWRT的衍生版本ImmortalWRT(本篇中并不重要)。
                                    1. 网心云:X86版本(Hyper-V虚拟化)并配置静态地址,网关直接指向主路由,避免流量经过旁路。

                                    命令行限制方法

                                    主路由目前使用的OpenWRT版本为23.05,在这个OpenWRT版本中已经使用nftable取代了iptables,所以在网上找到的很多iptables无法使用或者会提示过老版本,配置后查看规则计数器数据为0,没有生效。同时nftable在OpenWRT上并没有提供luci app插件以及对应的UI操作界面,所以就需要我们自行编写nftable规则进行连接数的控制。
                                    notion image
                                    在另一方面,由于主路由器开启了Fullcone NAT模式,所以使得所有来自外部的连接请求都可以通过主路由访问内网的网心云,且不再使用UPNP。这意味着,如果在 nftables 中通过ip fileter添加了针对网心云的INPUT和OUTPUT限制规则,那这些规则就不能正确匹配外部流量,所以通过INPUT和OUTPUT规则进行过滤没有任何的效果,这也是我在尝试之后,发现匹配规则数量为什么一直都是0的原因。
                                    同时,使用 conntrack (conntrack需要安装,一般都没有预装)查看连接时,我发现连接信息已经包含NAT处理后的外部IP地址和端口,而nftables规则要考虑对NAT后的地址和端口进行限制,那么目标就来到了 forward 链上。而且我惊奇的发现,网心云这种PCDN居然使用的是TCP协议而不是UDP协议。
                                    首先确保OpenWRT已经安装了以下内核,如果缺少的话,在使用nftable时候会提示报错:“Error: Could not process rule: No such file or directory”。
                                    可以通过如下命令进行安装:
                                    安装后,首先我们需要创建ip filter表用于进行过滤使用:
                                    然后添加forward链,并配置优先级为0,优先进行匹配:
                                    最后添加过滤规则(本文重点内容):
                                    添加完成后,等待一段时间,通过以下命令进行活动连接数查看:
                                    如果没有安装conntrack包,也可以通过OpenWRT管理网页进行查看,位置在:
                                     

                                    配置文件限制方法(不确认在fw4表内是否成功)

                                    编辑/etc/nftables.d/10-custom-filter-chains.nft 文件,并修改为以下内容:
                                    然后重启firewall
                                    通过nft list进行查看规则是否已经添加成功
                                    如果看到
                                    则表示添加规则成功。
                                     

                                    OpenWRT查看端口占用

                                    1. 查看单独端口占用情况及对应程序,例如8080为要进行查看的端口
                                    1. 查看客户端IP地址端口占用情况
                                     
                                    最终,通过Grafana查看效果(需要单独配置):
                                    notion image

                                    🤗 总结归纳

                                    整体所需的软件包为:
                                    • kmod-nft-core(核心)
                                    • kmod-nft-nat(nat相关规则配置参数支持)
                                    • kmod-nft-ct(计数相关规则配置参数支持)
                                    • conntrack(查看连接,可选)
                                    以上软件包均可通过OPKG进行直接安装。
                                    目前配置完成之后(我配置的来源和目的地活动连接数量均为4000),主路由显示的活动连接数量大概在5000左右浮动,至于为什么没有完全和规则匹配上,我的猜想可能是因为有一些长连接还没有释放的原因,后续会进行持续观察。
                                    限制活动连接数量之后,对网心云的跑量影响需要等待几天才能看到,之后我也会更新到这里。目前来看,在上传带宽方面没有任何的变化,依旧可以跑满限制带宽,理论上延迟应该也可以降下来,但存在一个副作用,就是丢包也会上涨,这部分会影响多少的收益暂时还不清楚,同时具体连接数限制的数值的设定,也需要持续的观察才能确认最优配置。
                                    同时上述规则中没有配置IPV6的相关nftable规则,因为目前我的环境和观察下,IPV6的量只占很少的一部分,如果之后量起来了,对本地的网络环境已经有了体感的影响,我也会进行研究相关配置。
                                    这篇文章也不仅仅能应用于网心云,当你需要对局域网内的任何客户端,或者说是局域网内任何IP进行活动连接数量的限制时,都可以根据上面的内容进行操作,尤其是对于抖音、快手、爱奇艺这种活动连接请求大户。
                                     

                                    网心云其他问题

                                    目前发现网心云X86 2.0版本在使用Hyper-V虚拟机情况下,如果路由断网后恢复,在一段时间内即便正常获取IP或配置静态IP,也不会进行上传,需要在网心云的命令行界面(终端)中手动配置网卡禁用再启用后才可以,这点需要注意。

                                    📎 参考文章

                                    • 以及恩山论坛各种高手的帖子
                                     
                                    ⛏️
                                    有关OpenWRT IPv6安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~
                                    •  

                                    使用Pipedream同步RSS至BlueSky

                                    2024年12月2日 08:00
                                    😀
                                    BlueSky是一个新的社会化媒体平台,由Jack Dorsey于2019年提出并创立。随着X.com的商业化内容越来越多,以及马斯克的各种骚操作,BlueSky最近也算出尽了风头,不少用户从X.com(Twitter)转移到了BlueSky,并将BlueSky作为新的Social Media传播平台进行使用。在使用这种Social Media平台时,我最关心的部分就是如何进行不同平台之间的信息同步,例如之前我将豆瓣上的书、影、音等记录同步到Twitter和Mastodon,或者将最新的博客内容同步发送至Twitter和Mastodon等等。目前已经有较为成熟的方案在RSS与X.com之间进行自动化同步(可惜ifttt和dlvr.it都已经收费了),但还没有较为成熟的BlueSky同步方案,今天就将一个国外博主Raymond Camden的方案翻译一下给需要的朋友。

                                    为什么BlueSky用户增长这么多?

                                    X.com(Twitter)的最新使用条款提到:
                                    在最新用户使用条款中第三条服务内容中的您对内容的权利和授予的权利中明确规定,用户通过 X平台发布的任何内容 (包括文字、图片、音频和视频等) 都将授予X免费使用,包括用于训练人工智能模型。同时X平台还有权利将用户内容提供给其他公司、组织或个人使用,以上两种情况X都不会向用户支付任何报酬。
                                    这个新条款已经在2024年11月15日生效。这让用户与内容生产者们感到恐惧。在X.com(Twitter)的最新使用条款助攻下,BlueSky在昨天活跃用户数量已经超越了Threads,也许在未来的某个时间点,BlueSky可以和X.com做到分庭抗礼吧。

                                    📝 方案来源

                                    📝 方案内容

                                    目前Raymond Camden所使用的方案是通过自动化平台Pipedream实现,需要一些代码基础,相对于类IFTTT或者Dlvr.it等成熟的平台,对用户有一些技术上的门槛,不过Pipedream提供了丰富的开发工具,例如Python、NodeJS、Golang等等,借助这些开发语言与BlueSky的开发文档,也能够实现同步的功能。

                                    注册Pipedream

                                    打开Pipedream的官网:https://pipedream.com/auth/signup 进行注册,只需要邮箱和密码即可完成注册。目前不确定国内访问Pipedream是否需要科学上网。图省事也可以直接使用Google或者Github账号。

                                    创建项目及工作流

                                    Pipedream中,首先需要创建项目,一个项目可以包括多个自动化的流程,但是其实我们只需要用到一个自动化工作流就好。点击右上角的“New Project”进行创建。
                                    notion image
                                     
                                    填写一下项目的名称即可,建议自己填写一个较短的、易于辨识的名字,不要使用默认的名字,不然删除项目的时候有点麻烦。
                                    notion image
                                    然后点击New - Wrokflow,保持所有内容默认,直接点击Create Workflow创建工作流即可进入工作流的编辑配置页面。
                                    notion image

                                    添加RSS Trigger

                                    notion image
                                    点击Add Trigger,添加触发器,选择My Sources - New Item in RSS Feed ,也就是RSS源中的新内容。
                                    notion image
                                    • Timer:循环时间,建议不要选择过于频繁,查询次数太多,占用免费额度,同时RSS源的内容更新也没那么频繁,同步也不一定需要太高的时效性,我选择的是6小时。
                                    • Feed URL:RSS源地址,填写你博客的地址,或者你希望同步的RSS源地址,例如豆瓣的RSS
                                    • Published After:即在此时间之后的内容才会被同步,建议选择当前时间靠前一点,如果使用默认时间,可能会第一次同步过多内容。
                                    完成以上内容的填写之后,点击Configure to save ,Pipedream会自动尝试获取RSS源的内容。如果你同步的RSS所使用的域名使用了Cloudflare的“自动程序攻击模式”,可能Pipedream无法抓取内容,会被Cloudflare识别为自动程序而阻拦,可以在“安全性 - 自动程序 - 自动程序攻击模式”中进行关闭。目前我测试下来,豆瓣提供的RSS是可以正常抓取的。
                                    Slelect a different event中随便选择一条由RSS中读取的条目,即可在Result中查看到对应trigger获取到的信息,点击Continue 进入到添加Action动作环节。
                                    notion image

                                    添加Action(动作)及部署

                                    我们已经从触发器能够正常的获取信息,并配置好了如何触发,那么下一步就是在触发之后,需要Pipedream进行什么操作。在本篇文章中,我们所需要进行的操作就是将获取到RSS内容,以卡片的形式发布到BlueSky中。
                                    选择Node - Run Node Code
                                    notion image
                                    然后复制以下代码到CODE的输入框里,原作者的代码由于会提示steps.trigger.event.link being undefined,所以根据评论中的内容进行了修改。
                                    需要注意的是,这里有两点需要根据自己的账号进行修改:
                                    • identifier:修改为你的bluesky的用户名,例如xxxxx.bsky.social 。如果使用第三方的域名,可能无法正常使用,我还没有做测试。
                                    • password:修改为你自己配置的App Password,配置位置位于BlueSky的Settings - Privacy and security - App passwords,添加一个新的App Password即可,需要注意的是,当添加完成后显示的密码需要及时保存,因为关闭弹窗之后就不会再显示了。
                                    代码使用了cheerio@atproto/api库,用于在Bluesky社交平台上自动发布内容。逐行解释如下:
                                    1. import * as cheerio from 'cheerio';
                                      1. 导入cheerio库,用于在Node.js环境中解析和操作HTML文档。
                                    1. import Atproto from '@atproto/api';
                                      1. 导入@atproto/api库,这个库包含与Bluesky API交互的工具。
                                    1. const { RichText, BskyAgent } = Atproto;
                                      1. Atproto中解构出RichTextBskyAgent类,用于处理文本和与Bluesky API通信。
                                    1. export default defineComponent({
                                      1. 导出一个默认的组件定义,通常用于在框架中定义一个可执行组件。
                                    1. async run({ steps, $ }) {
                                      1. 定义一个异步的run方法,该方法接收一个包含steps$的对象作为参数。steps包含工作流的步骤数据,例如我们通过RSS Trigger所获取到的数据。
                                    1. const agent = new BskyAgent({ service: 'https://bsky.social' });
                                      1. 创建一个新的BskyAgent实例,用于与Bluesky API交互,并指定服务地址。
                                    1. await agent.login({ identifier: 'bluesky用户名', password: 'App PassWord' });
                                      1. 使用指定的用户名和应用密码登录到Bluesky平台。
                                    1. let card = { uri:steps.trigger.event.link, title:steps.trigger.event.title, }
                                      1. 初始化一个card对象,包含从触发事件中提取的链接和标题。
                                    1. let req = await fetch(steps.trigger.event.link);
                                      1. 使用fetch函数请求事件中链接的HTML内容。
                                    1. let html = await req.text();
                                      1. 将请求的响应转换为文本格式(HTML)。
                                    1. let $$ = cheerio.load(html);
                                      1. 使用cheerio加载 HTML 内容,以便后续解析。
                                    1. card.description = $$('meta[property="og:description"]').attr('content');
                                      1. 使用cheerio提取HTML中的Open Graph描述元标签的内容,并赋值给card.description
                                    1. let image = $$('meta[property="og:image"]').attr('content');
                                      1. 提取Open Graph图像元标签的内容,用于后续上传。
                                    1. let blob = await fetch(image).then(r => r.blob());
                                      1. 下载图像并将其转换为Blob对象。
                                    1. let { data } = await agent.uploadBlob(blob, { encoding:'image/jpeg'} );
                                      1. 使用agent.uploadBlob方法上传图像Blob,并指定编码格式为JPEG,存储返回的数据。
                                    1. card.thumb = data.blob;
                                      1. 将上传的 Blob 数据存储在card对象的thumb属性中。
                                    1. let rt = new RichText({ text: 发现了新的内容: "${steps["trigger"]["event"]["title"]}" });
                                      1. 创建一个新的RichText实例,并设置文本内容,包含触发事件的标题。
                                    1. await rt.detectFacets(agent);
                                      1. 使用detectFacets方法检测文本中的特性(如链接、标签等),可能用于格式化或增强文本。
                                    1. await agent.post({
                                      1. 使用agent.post方法在Bluesky平台上发布一个新帖子。
                                    1. text: rt.text, facets: rt.facets, langs: ['en-US'], createdAt: new Date().toISOString(), embed: { $type: "app.bsky.embed.external", external: card }
                                      1. 设置发布帖子的内容,包括文本、特性、语言、创建时间,以及嵌入的外部卡片信息。
                                    1. return;
                                      1. 结束run方法的执行。
                                         
                                    完成上述步骤之后,点击Test按钮进行代码测试,不出意外的话,应该会提示Success成功,在Bluesky中也可以看到一条新的同步的消息,这时候点击Deploy就可以正式部署了。
                                    代码中所绘制的卡片样式大概是,JS能力强的朋友,也可以根据自己的需要进行代码上的修改。
                                    notion image

                                    🤗 总结归纳

                                    整体流程其实还是很简单的,无非就是配置触发器、配置动作以及部署。Pipedream提供的免费额度也足够个人使用,支持10个工作流,我个人的话,豆瓣加上个人的博客同步,也就使用2个工作流。
                                    另外顺便研究了一下,Pipedream的Action中包括发布Mastodon动态,所以理论上也可以同步至Mastodon。
                                    notion image
                                    对于X.com(Twitter)来说,目前没有找到成熟的Action,可能需要自行申请Developer Access然后使用代码方式同步。

                                    同步RSS至Twitter(X.com)

                                    目前已经找到了使用pipedream同步RSS或者豆瓣数据到Twitter(X.com)的方法:《使用Pipedream同步RSS至Twitter(X.com) | Deep Router

                                    📎 参考文章

                                    💡
                                    有关家庭网络配置或者使用上的问题,欢迎您在底部评论区留言,一起交流~
                                    •  

                                    OpenWRT中为局域网设备配置IPv6 DDNS

                                    2024年8月29日 08:00
                                    🍌
                                    之前介绍过如何在OpenWRT上实现OpenClash科学上网的同时与IPv6的共存,不但主路由有公网IPv6地址,所有的客户端也都有了唯一的IPv6公网地址。有了IPv6之后我们可以做很多事情,例如远程回家进行网络管理、公网的远程串流、Emby媒体服务器的公网使用、自建DNS服务器等等。目前大部分的DDNS教程都只是如何获得插件所在设备的IPv4及IPv6地址及DDNS域名绑定,今天来分享一下如何在旁路由(旁路网关)上安装配置DDNS-GO,通过IPv6地址为局域网内需要的设备绑定域名。
                                    notion image
                                    DDNS(动态域名系统,Dynamic DNS)是一种允许用户在IP地址变化时自动更新DNS记录的服务。通常,互联网服务提供商会给家庭或小型办公室的网络分配动态IP地址,这意味着IP地址会周期性变化。如果你运行一个需要被外界访问的服务(比如家庭服务器或游戏主机),IP地址的变化会导致外界无法访问你的服务。
                                    DDNS的工作原理如下:
                                    1. 动态IP监测:DDNS客户端软件在你的设备上运行,定期检查你的公共IP地址是否变化。
                                    1. 更新DNS记录:当检测到IP地址变化时,客户端会自动将新的IP地址更新到DDNS服务提供商的DNS服务器上。
                                    1. 域名解析:外界的请求通过DDNS服务提供的域名解析到你当前的IP地址,确保即使IP地址改变,服务仍可正常访问。
                                    常见的DDNS服务提供商包括No-IP、DynDNS和Cloudflare等。我使用DDNS主要用于Wake On Lan以及通过Moonlight+Sunshine进行远程串流打游戏。
                                    DDNS-GO是一个开源的动态DNS解决方案,帮助用户通过DDNS访问家庭内网服务,实现内网穿透等。DDNS-GO支持在多种操作系统上使用,包括Linux(各种发行版,包括飞牛fnOS)、Windows、macOS以及使用OpenWRT的路由器,包括主路由和旁路由。DDNS-GO兼容多个DNS服务提供商,比如Cloudflare、阿里云DNS(AliDNS)、GoDaddy、DNSPod等,非常灵活,且同时支持IPv4和IPv6动态地址获取及设置,并提供简洁的Web管理界面,便于配置和监控动态DNS服务。
                                    本文内容不仅适用于OpenWRT系统,其他类似飞牛fnOS等系统,在使用DDNS-GO插件的情况下,也可适用。

                                    📝 为局域网设备配置IPv6 DDNS

                                    配置前提

                                    本次配置教程所使用的ddns服务提供商为Cloudflare,需要自备域名并将域名绑定到cloudflare。
                                    另外,需要你的局域网下设备可以正常获取公网IPv6地址,教程参考🌐IPv6与旁路由共存:实现策略代理与原生地址的完美平衡
                                    在ddns-go服务的安装设备上,我个人推荐安装在旁路由(旁路网关)上,因为我们的IPv6 RA(Router Advertisement)服务器也是这台设备,如果安装在主路由上,那么可能无法获取到完整的IPv6邻居列表。如果主路由开启了RA服务器模式,也可以在主路由上进行安装。

                                    安装luci-app-ddns-go

                                    大部分仓库均提供luci-app-ddns-go这个插件,可以通过系统 - 软件包进行安装,或者像我一样通过SSH输入命令安装。
                                    安装成功之后,刷新路由器管理页面,在服务选项卡下应该就有DDNS-GO了。如果没有的话,可以注销路由器管理页面,重新登录即可。
                                    notion image
                                     

                                    配置luci-app-ddns-go插件

                                    luci-app-ddns-go插件的作用是为ddns-go在OpenWRT中提供一个可视化的luci网页操作界面,用于对ddns-go核心的配置和管理,并不直接负责ddns的检测、更新和域名解析服务,只有在配置完成luci-app-ddns-go插件并启动服务之后,才可以进行ddns的配置。
                                    notion image
                                    1. 勾选启动的复选框。
                                    1. 如果需要自定义ddns-go的访问端口,可以修改设置访问端口,我这里维持不变。
                                    1. 指定DNS解析服务器,选择阿里云DNS或者腾讯DNS都可以。如果你路由器本机也经过代理,可以选择国外dns,或者设置为你自己自定义的DNS
                                    1. 其他项无特殊偏好,维持不动。
                                    1. 保存并应用。
                                    1. 看到DDNS-GO服务器已启动,即表示成功,可以通过http://路由器ip地址:9876进行访问。
                                    1. 首次登录需要设置管理员账号和密码,直接根据提示配置即可。

                                    配置ddns服务

                                    访问Cloudflare的User API Tokens页面:User API Tokens - Cloudflare
                                    或者通过右上角账户 - 外观 - API令牌 进入User API Tokens页面。
                                    我们需要创建一个API令牌给DDNS-GO使用,用于修改对应域名的解析地址。
                                    点击创建令牌,选择编辑区域dns,点击后面的使用模板。
                                    notion image
                                    区域资源 - 特定区域 - Select的下拉中选择你绑定的域名
                                    notion image
                                    然后点击继续以显示摘要 - 创建令牌 即可看到API令牌(API Token)的字符串,复制保存到安全的地方。

                                    配置路由本机DDNS域名

                                    如果你的路由器本机不需要配置ddns域名也可以跳过这部分。
                                    通过http://路由器ip地址:9876 访问DDNS-GO的web界面。
                                    notion image
                                    DNS Provider:
                                    1. 选择Cloudflare
                                    1. Token填写刚刚我们获得的API令牌(API Token)
                                    1. TTL不用动,只有产生IP变动之后TTL才会生效。
                                    IPv4部分:
                                    1. 域名(domain)填写你希望使用的域名,例如我写的是home.xxxx.xom
                                    1. 其他不用动
                                    IPv6部分:
                                    1. 启动的复选框勾上
                                    1. Get IP Method不用动
                                    1. 域名(domain)填写和ipv4相同的域名即可。
                                    然后拉到最下方,点击保存,然后点击右上角的日志(logs)查看运行情况:
                                    看到added domain xxxxxx successfully即表示添加成功。稍等片刻,等待DNS解析广播结束之后即可用这个域名:端口的方式在公网进行访问。

                                    配置局域网其他客户端DDNS域名

                                    再次说明,如果你是通过旁路由(旁路网关)提供局域网的IPv6 RA服务,那么需要将DDNS-GO安装在旁路由(旁路网关)上,否则无法获取到完整的IPv6路由列表,也无法为客户端进行DDNS域名绑定。
                                    配置局域网客户端的DDNS域名其实与配置路由器本机的DDNS流程大致相同,使用的Cloudflare API Token还是上面我们申请的Token。
                                    在DDNS-GO的管理页面点击右上角的新增(Add)
                                    notion image
                                    DNS Provider:
                                    1. 选择Cloudflare
                                    1. 令牌(Token)填写我们上面获取到的API Token
                                    1. TTL选择Auto
                                    IPv4部分:
                                    1. 取消勾选启动按钮。我们IPv4只有一个公网地址,已经分配给路由器本机使用了,所以这里就不再对IPv4进行配置。
                                    IPv6部分:
                                    1. 勾选启动
                                    1. 获取IP地址方法(Get IP Method)选择最后一个By Command ,也就是命令模式
                                    1. 输入以下命令来提取特定局域网设备的IPv6地址,mac地址注意要小写,同时如果从Windows复制过来,需要把-替换为:
                                    然后拉到最下方,点击保存,然后点击右上角的日志(logs)查看运行情况:
                                    看到added domain xxxxxx successfully即表示添加成功。稍等片刻,等待DNS解析广播结束之后即可用这个域名:端口的方式在公网进行访问。

                                    🤗 总结归纳

                                    通过对局域网客户端DDNS域名的配置,就可以避免记又臭又长的IPv6地址,同时也可以避免因为IPv6地址变动而访问不了家里所部署服务的情况。当前在绑定DDNS之后,记得在防火墙中为对应服务的端口配置规则,否则还是访问不了的。
                                    尽管本文使用的DDNS服务商为赛博大善人Cloudflare,但其他家服务器商的配置也大同小异,可以举一反三。

                                    📎 参考文章

                                     
                                    💡
                                    有关OpenWRT安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~
                                    •  
                                    ❌