作者: zhangtianyi
-
Anki 加密 Deck 解密 Key 查找指南
背景说明
某些 Anki deck 使用了加密保护,需要找到解密的
key和iv才能提取内容。这些加密 deck 通常还包含防调试代码,会在检测到开发者工具时循环刷新页面。完整操作步骤
第一步:绕过防调试代码
- 先打开 Chrome DevTools(按
F12) - 立即禁用所有断点:
- 在 Sources 面板,按快捷键
F8(或Ctrl+F8/Cmd+F8) - 或点击右上角的 “Deactivate breakpoints” 按钮(蓝色暂停图标)
- 此时按钮应该变灰,表示断点已禁用
- 在 Sources 面板,按快捷键
- 进入 Deck 页面(现在不会被防调试代码拦截)
第二步:定位解密函数
- 按
Ctrl+Shift+F(Mac:Cmd+Shift+F)打开全局搜索 - 搜索关键词:
≯#(加密内容的标记符) - 找到类似这样的代码段:
_0x3dc22f[_0x5271('0x47')]( (_0x3d4b22, _0x1e99f3) => { let _0xe83f49 = this['akDecrypt']( _0x3d4b22[_0x5271('0x1e')](0x2)[_0x5271('0x1e')](0x0, ...), _0x292030, // ← key _0x384624[_0x5271('0xd6')] // ← iv ); _0x36a462 = _0x36a462[_0x5271('0x4a')](_0x3d4b22, _0xe83f49); });第三步:打断点(关键!)
重要:断点要打在
forEach或循环的外层,不要打在箭头函数内部在这行打断点:
_0x3dc22f[_0x5271('0x47')]( (_0x3d4b22, _0x1e99f3) => { // ← 点击行号打断点或者打在更外层的
if语句:if (_0x3dc22f) { // ← 也可以在这里打断点第四步:重新启用断点并触发解密
- 按
F8重新启用断点(按钮变回蓝色) - 点击卡片翻转(Front → Back 或 Back → Front)
- 代码会在断点处暂停
第五步:查看 Key 和 IV
方法一:查看 Scope 面板(推荐)
在右侧 Scope 面板中:
- 展开 Closure 部分(而不是 Local)
- 找到:
_0x292030← 这是 key_0x384624← 展开这个对象,找到 iv 相关的值
方法二:直接在 Console 查询
在下方 Console 中输入:
javascript
_0x292030 // 查看 key _0x384624 // 查看包含 iv 的对象第六步:保存结果
将找到的
key和iv复制保存,格式通常是:- key: 一串字符串(如
"somekey123") - iv: 通常是
"12345679abcdefgj"或类似字符串
替代方法:使用 Logpoint(无需暂停)
如果不想让代码暂停执行:
- 在断点位置右键行号 → 选择 “Add logpoint”
- 输入表达式:
javascript
'Key:', _0x292030, 'IV:', _0x384624- 点击翻转卡片
- Console 会直接打印出值,不会暂停执行
快速参考
步骤操作快捷键打开 DevTools开发者工具
F12禁用/启用断点切换断点状态F8全局搜索搜索代码Ctrl+Shift+F打断点点击行号鼠标点击
常见问题
Q: 只看到箭头函数内的局部变量?
A: 断点打错位置了,应该打在forEach外层,然后查看 Closure 作用域。Q: 页面一直刷新?
A: 进入页面前先按F8禁用断点,进入后再启用。Q: 找不到
≯#符号?
A: 尝试搜索akDecrypt或decrypt,找到调用这些函数的地方。Q: Scope 里没有想要的变量?
A: 直接在 Console 输入变量名查看,或者展开 Closure 作用域。
参考资料
提示:找到 key 和 iv 后,可以使用解密脚本批量处理加密内容,具体使用方法参考上述 GitHub Gist。
- 先打开 Chrome DevTools(按
-
移动光猫超级密码获取教程:诺基亚XG-04G-MF桥接模式设置详解
前言
随着千兆宽带的普及,越来越多用户希望充分发挥网络性能,而运营商提供的光猫往往在路由功能和管理界面上存在限制。本文将详细介绍如何获取移动光猫的超级用户权限,并将其配置为桥接模式,以便使用性能更强的第三方路由器来管理网络。
免责声明:本文仅供技术学习和个人网络优化使用,请在合法合规的前提下操作。
设备信息与背景
测试环境
- 光猫型号:XG-04G-MF
- 制造商:诺基亚贝尔股份公司
- 设备类型:10Gbit无源光网络用户端设备(XG-PON ONE)
- 运营商:中国移动
- 宽带套餐:1000M(10元宽带包+10元提速包)
- 下游路由器:基于J4125的OpenWrt软路由
技术背景
什么是光猫?
光猫(Optical Network Unit,ONU)是光纤接入网络的用户端设备,主要功能是将光信号转换为电信号,实现光纤到户(FTTH)。现代光猫通常集成了路由器功能,但性能和管理灵活性往往不如专业路由设备。
为什么需要桥接模式?
- 性能优化:专业路由器通常具有更强的处理能力和更丰富的功能
- 网络管理:避免双重NAT问题,简化网络拓扑
- 个性化配置:获得更多的网络控制权和配置选项
- 避免干扰:减少运营商远程配置对个人网络设置的影响
操作前的重要说明
权限层级说明
移动光猫通常有三个权限级别:
- user:普通用户权限(光猫背面标注),功能有限
- user_ftp:系统管理员权限,但是是user密码
- CMCCAdmin:超级管理员权限,可以进行高级配置
- root:系统管理员权限,具有完全控制能力
风险提示
- 操作过程中可能导致设备无法正常工作
- 修改配置可能影响运营商的技术支持
- 请确保具备基本的网络知识和故障排除能力
- 建议在操作前备份重要配置信息
详细操作步骤
第一步:准备工作
1.1 断开光纤连接
目的:防止运营商远程干预和配置下发 操作:拔掉光猫上的光纤接头 注意:确保只有本地网络连接1.2 重置光猫
操作:按住光猫背面的Reset键,保持10-15秒 等待:观察指示灯,等待设备完全重启 结果:光猫恢复出厂设置,可以使用默认超级密码1.3 网络连接
- 使用网线将电脑直接连接到光猫的LAN口
- 确保电脑获取到192.168.1.x网段的IP地址
- 可以通过浏览器访问192.168.1.1
第二步:获取超级用户权限
2.1 使用默认超级密码登录
用户名:CMCCAdmin 密码:aDm8H%MdA 登录地址:http://192.168.1.1技术说明:这是移动光猫的出厂默认超级密码,除了诺基亚版本的光猫,其他版本同样是这个。在正常注册流程中,运营商会通过TR069协议远程修改此密码。
2.2 开启Telnet服务
访问以下URL开启Telnet:
http://192.168.1.1/system.cgi?telnet
注意:此URL仅适用于诺基亚制造的光猫型号。其他品牌可能有不同的开启方式。
第三步:获取root密码
我们提供两种方法获取root权限,推荐使用方法一:
方法一:密码解密法(推荐)
3.1 获取加密密码
- 在已登录的CMCCAdmin界面访问:
http://192.168.1.1/dumpdatamodel.cgi - 在页面中搜索
SuPassword,找到类似以下的代码块:
<CLIPrompt rw="RW" v="\\\\$"></CLIPrompt> <SuPassword rw="RW" v="**************" ealgo="ab"></SuPassword> <SSHEnable rw="RW" v="False"></SSHEnable>- 记录
SuPassword中v属性的值(24个字符的加密字符串)
3.2 密码解密
诺基亚光猫使用AES-CBC加密,密钥和向量固定:
- 密钥:
3D A3 73 D7 DC 82 2E 2A 47 0D EC 37 89 6E 80 D7 2C 49 B3 16 29 DD C9 97 35 4B 84 03 91 77 9E A4 - 初始向量:
D0 E6 DC CD A7 4A 00 DF 76 0F C0 85 11 CB 05 EA
使用以下Python脚本解密:
import base64 from typing import Optional from Crypto.Cipher import AES class RouterCrypto: """路由器加密解密工具类""" DEFAULT_KEY = '3D A3 73 D7 DC 82 2E 2A 47 0D EC 37 89 6E 80 D7 2C 49 B3 16 29 DD C9 97 35 4B 84 03 91 77 9E A4' DEFAULT_IV = 'D0 E6 DC CD A7 4A 00 DF 76 0F C0 85 11 CB 05 EA' def __init__(self, key: Optional[str] = None, iv: Optional[str] = None): self.key = key or self.DEFAULT_KEY self.iv = iv or self.DEFAULT_IV self._cipher = None self._init_cipher() def _init_cipher(self) -> None: """初始化AES密码器""" try: key_bytes = self._hex_string_to_bytes(self.key) iv_bytes = self._hex_string_to_bytes(self.iv) self._cipher = AES.new(key_bytes, AES.MODE_CBC, iv_bytes) except Exception as e: raise ValueError(f"初始化密码器失败: {e}") @staticmethod def _hex_string_to_bytes(hex_string: str) -> bytes: """将十六进制字符串转换为字节""" hex_clean = hex_string.replace(' ', '') return bytes.fromhex(hex_clean) @staticmethod def _remove_pkcs7_padding(data: bytes) -> bytes: """移除PKCS7填充""" if not data: return data padding_length = data[-1] if padding_length > len(data) or padding_length == 0: raise ValueError("无效的填充") for i in range(padding_length): if data[-(i + 1)] != padding_length: raise ValueError("填充验证失败") return data[:-padding_length] def decrypt(self, encrypted_data: bytes) -> bytes: """解密数据""" try: self._init_cipher() decrypted = self._cipher.decrypt(encrypted_data) return self._remove_pkcs7_padding(decrypted) except Exception as e: raise ValueError(f"解密失败: {e}") def decrypt_base64(self, base64_data: str, encoding: str = 'utf-8') -> str: """解密Base64编码的数据并返回字符串""" try: encrypted_bytes = base64.b64decode(base64_data) decrypted_bytes = self.decrypt(encrypted_bytes) return decrypted_bytes.decode(encoding) except Exception as e: raise ValueError(f"Base64解密失败: {e}") def main(): # 将获取到的加密密码填入这里 encrypted_base64 = '这里填入SuPassword的v值' try: crypto = RouterCrypto() decrypted_text = crypto.decrypt_base64(encrypted_base64) print(f"解密结果: {decrypted_text}") except Exception as e: print(f"解密失败: {e}") if __name__ == "__main__": main()方法二:FTP用户提权法
- 在CMCCAdmin界面启用FTP和Samba服务:
- 进入
应用 -> 家庭存储 -> FTP,勾选启用FTP - 进入
应用 -> 家庭存储 -> SAMBA共享,勾选启用Samba
- 进入
- 使用普通用户账户Telnet登录光猫
- 切换到FTP用户:
su user_ftp # 密码与user用户相同- 获取root权限:
su # 切换到root用户 passwd # 重置root密码第四步:宽带账号配置
4.1 获取宽带账号密码
方法一:移动APP查询
- 登录中国移动手机APP
- 在宽带服务中查看或重置宽带密码
方法二:从光猫配置中提取
- 访问配置导出页面:
http://192.168.1.1/dumpdatamodel.cgi - 搜索你的宽带账户名(通常是手机号),找到Username段:
<Username rw="RW" v="你的宽带账号"></Username> <Password rw="RW" v="加密的密码" ealgo="ab"></Password>- 使用nokia-router-cfg-tool.py脚本解密密码:
python nokia-router-cfg-tool.py -d 加密的密码字符串4.2 注册光猫
- 重新连接光纤
- 配置宽带连接:
- 登录CMCCAdmin账户
- 进入
网络 -> 宽带设置 -> Internet连接 - 找到
2_INTERNET_B_VID_41连接,确保使用路由模式而不是桥接 - 填入宽带账号和密码(默认密码通常是6个8)
- 保存并启用配置
- 等待注册完成:
- 观察光猫指示灯
- 注册灯熄灭,上网灯亮起表示注册成功
第五步:重置超级密码
由于运营商会在注册成功后自动修改CMCCAdmin密码,需要通过Telnet重新设置:
# 使用root或user_ftp用户登录Telnet telnet 192.168.1.1 # 重置超级密码为原始密码 cfgcli -s InternetGatewayDevice.DeviceInfo.X_CT-COM_TeleComAccount.Password aDm8H%MdA注意:根据测试,只有设置为
aDm8H%MdA才能成功,其他密码可能会失败。第六步:配置桥接模式
重新获得CMCCAdmin权限后,可以进行桥接模式配置:
- 登录管理界面:使用CMCCAdmin和重置后的密码
- 修改连接模式:
- 进入
网络 -> 宽带设置 -> Internet连接 - 将主要连接的模式从”路由”改为”桥接”
- 保存配置
- 进入
- 配置下游路由器:
- 在你的OpenWrt或其他路由器中配置PPPoE拨号
- 使用宽带账号和密码进行连接
高级配置:禁用TR069
如果你希望阻止运营商远程下发配置,可以删除TR069连接:
操作步骤
- 登录CMCCAdmin账户
- 进入
网络 -> 宽带设置 -> Internet连接 - 找到连接名称为
tr069的项目 - 如果删除按钮被禁用,使用开发者工具:
- 按F12打开开发者工具
- 找到删除按钮的HTML元素:
<input class="buttonX" type="submit" id="do_del" value="删除" disabled>- 删除`disabled`属性 - 点击删除按钮TR069协议说明
TR069(Technical Report 069)是一种应用层协议,用于远程管理CPE(Customer Premises Equipment)设备。运营商通过此协议可以:
- 远程配置设备参数
- 监控设备状态
- 推送固件更新
- 重置设备配置
删除TR069连接可以阻止这些远程操作,但也可能影响运营商的技术支持服务。
网络拓扑优化建议
推荐网络架构
光纤 -> 光猫(桥接模式) -> 主路由器 -> 交换机/AP配置要点
- 光猫设置:
- 启用桥接模式
- 关闭DHCP服务
- 关闭Wi-Fi功能(如果不需要)
- 主路由器设置:
- 配置PPPoE拨号
- 设置合适的DNS服务器
- 配置防火墙和端口转发
- 性能优化:
- 启用硬件NAT加速(如果支持)
- 优化QoS设置
- 合理分配带宽
故障排除
常见问题
问题1:无法访问192.168.1.1
- 检查网线连接
- 确认IP地址获取正确
- 尝试使用静态IP配置
问题2:默认超级密码无法登录
- 确认光猫已完全重置
- 检查光纤是否已断开
- 尝试多次重置操作
问题3:Telnet连接失败
- 确认Telnet服务已开启
- 检查Windows Telnet客户端是否已启用
- 尝试使用PuTTY等第三方工具
问题4:密码解密失败
- 检查加密字符串是否完整
- 确认使用正确的密钥和向量
- 验证Python环境和依赖库
恢复措施
如果操作过程中出现问题:
- 重新执行重置操作
- 联系运营商技术支持
- 考虑更换光猫设备
总结
通过本文的详细步骤,你应该能够成功获取移动光猫的超级用户权限,并将其配置为桥接模式。这样可以充分发挥高性能路由器的优势,获得更好的网络体验和管理灵活性。
请记住:
- 操作前做好充分准备和风险评估
- 保存重要配置信息以备恢复
- 在合法合规的前提下进行操作
- 如有疑问,及时寻求专业技术支持
注意事项:本文内容基于特定型号设备的测试结果,不同型号的光猫可能存在差异。请根据实际情况调整操作步骤,并承担相应的操作风险。
参考资料与延伸阅读
- 移动诺基亚贝尔 G-140W-MD 光猫破解超级密码和宽带账户密码
https://blog.moe233.net/posts/763b959d/ - 破解2024年新款诺基亚贝尔万兆光猫AES加密的su密码 – 十八子
https://zhuanlan.zhihu.com/p/9941974371 - 删除TR069-摆脱运营商对你的光猫控制 – Tcilay-xi
https://blog.csdn.net/weixin_55873007/article/details/132360634 - Nokia Router Configuration Tool
https://gist.github.com/Lokotito/5ab7b8627d43d583fd888a0af39d6b12
本文于2025年编写,如有技术更新或设备型号变化,请参考最新的官方文档和社区资源。
-
在Mac上使用UTM虚拟机搭建OpenWrt软路由
前言
本文介绍如何在macOS系统上使用UTM虚拟机软件搭建OpenWrt软路由,实现网络共享和管理。这种方案特别适合需要在Mac设备上创建独立网络环境的场景,例如校园网环境下的网络共享。
环境准备
1. 安装UTM虚拟机
UTM是一款基于QEMU的macOS虚拟机软件,支持ARM架构的Mac设备(M1/M2/M3等)。
- 下载地址:https://mac.getutm.app/
- 下载后直接安装即可
2. 下载OpenWrt固件
本文推荐使用ImmortalWrt(OpenWrt的中国分支),它对国内网络环境和常用软件包支持更好。
- 固件下载地址:ImmortalWrt ARM64版本
- 选择文件:
immortalwrt-24.10.0-armsr-armv8-generic-ext4-combined-efi.img.gz
下载后使用以下命令解压:
gunzip immortalwrt-24.10.0-armsr-armv8-generic-ext4-combined-efi.img.gz创建虚拟机
1. 新建虚拟机
- 打开UTM,点击”添加虚拟机”
- 选择”虚拟化” → “其他”
- 启动设备选择”无”
- 内存和CPU根据需求配置(建议至少1GB内存,2核CPU)
- 存储先不配置,稍后手动添加
2. 配置虚拟机
右键点击创建的虚拟机,选择”编辑”,进行以下配置:
2.1 添加串行设备
在”设备”中添加一个串行设备,用于控制台访问。
2.2 查看主机网络接口
在Mac系统中查看网络接口信息:
- 打开”关于本机” → “更多信息” → “系统报告” → “网络”
- 记录各网络接口的BSD设备名称(如en0、en1等)
2.3 添加网络接口
添加两个网络接口,分别用于WAN和LAN:
- WAN接口(连接上游网络)
- 桥接模式:选择Mac的WiFi接口(通常是en1)
- 模拟网卡:virtio-net-pci
- 记录MAC地址(例如:AA:10:CE:BC:8C:BC)
- LAN接口(连接下游设备)
- 桥接模式:选择Mac的以太网接口(通常是en0)
- 模拟网卡:virtio-net-pci
- 记录MAC地址(例如:CE:15:05:F8:E9:89)
2.4 添加存储驱动器
- 新建驱动器,类型选择VirtIO
- 导入之前解压的OpenWrt镜像文件
3. 启动虚拟机
配置完成后启动虚拟机,OpenWrt将自动启动。
配置OpenWrt网络
1. 识别网络接口
首次启动后,通过串行控制台登录OpenWrt(默认无密码),使用以下命令查看网络接口:
ip addr根据MAC地址对应关系识别接口:
- eth0: AA:10:CE:BC:8C:BC(对应WAN)
- eth1: CE:15:05:F8:E9:89(对应LAN)
2. 配置网络接口
使用UCI命令配置网络:
# 配置WAN接口(eth0)- 从上游网络获取IP uci set network.wan=interface uci set network.wan.device='eth0' uci set network.wan.proto='dhcp' # 配置LAN接口(eth1)- 为下游设备提供服务 uci set network.lan=interface uci set network.lan.device='eth1' uci set network.lan.proto='static' uci set network.lan.ipaddr='192.168.31.1' uci set network.lan.netmask='255.255.255.0' # 提交配置并重启网络 uci commit network /etc/init.d/network restart3. 验证配置
再次运行
ip addr,确认接口配置正确:- eth0应该获取到上游网络分配的IP地址
- eth1应该显示配置的静态IP地址(192.168.31.1)
配置Mac主机路由
为了让Mac能够访问OpenWrt的管理界面,需要配置路由:
# 1. 清理可能存在的旧路由 sudo route delete 192.168.31.0/24 2>/dev/null sudo route delete -net 192.168.31.0/24 2>/dev/null sudo route delete 192.168.31.1 2>/dev/null # 2. 配置en0接口IP地址 sudo ifconfig en0 down sudo ifconfig en0 192.168.31.100 netmask 255.255.255.0 up # 3. 添加路由 sudo route add -net 192.168.31.0/24 -interface en0 # 4. 验证连接 ping 192.168.31.1成功后,可以通过浏览器访问 http://192.168.31.1 进入OpenWrt管理界面。
IPv6配置(校园网环境)
对于支持IPv6的校园网环境,需要进行额外配置以支持IPv6:
1. WAN6接口配置
在LuCI界面中,进入”网络” → “接口” → “WAN6″:
常规设置:
- 勾选”拓展前缀”(获取IPv6-PD)
- 设备选择eth0
DHCP服务器 → IPv6设置:
- RA服务:中继模式
- DHCPv6服务:中继模式
- NDP代理:中继模式
2. LAN接口IPv6配置
在”网络” → “接口” → “LAN”:
高级设置:
- IPv6前缀分配:::156(根据实际情况调整)
- 勾选”强制链路”
DHCP服务器:
- 高级设置:勾选”强制”
- IPv6设置:
- RA服务:服务器模式
- DHCPv6服务:服务器模式
- NDP代理:混合模式
总结
通过UTM虚拟机在Mac上搭建OpenWrt软路由,可以实现灵活的网络管理和共享。这种方案特别适合:
- 需要在Mac上创建独立网络环境
- 校园网多设备共享
- 学习和测试网络配置
本文介绍的配置方法经过实际测试,能够稳定运行。根据具体网络环境,可能需要调整部分配置参数。
-
OpenWrt ext4系统下的根分区扩容指南
以下为本篇文章测试环境,因此仅对部分环境有借鉴意义
型号 Raspberry Pi 4 Model B Rev 1.4 架构 ARMv8 Processor rev 3 (v8l) x 4 (1800Mhz, 48.2°C) 目标平台 bcm27xx/bcm2711 固件版本 ImmortalWrt 24.10.0 r32824-6a73dae98c9c / LuCI openwrt-24.10 branch 25.017.24510~d42ec55 使用的固件为openwrt-24.10.0-bcm27xx-bcm2711-rpi-4-ext4-factory。非overlay系统 原理
首先扩展根分区,然后扩展文件系统
Expanding root partition(扩展根分区)- 这指的是在物理或虚拟存储设备上增加分区的大小
- 涉及到修改分区表,调整分区的物理边界
- 使用类似 fdisk、parted 等工具来完成
- 这是底层的存储空间调整
Expanding root filesystem(扩展根文件系统)
- 这指的是调整文件系统本身的大小以使用更大的分区空间
- 在分区已经扩展后,需要执行此操作才能实际使用新增的空间
- 使用类似 resize2fs(ext4)、xfs_growfs(XFS)等工具来完成
- 这是文件系统层面的操作
简单来说:
- 扩展根分区是在存储设备层面增加可用空间
- 扩展根文件系统是让文件系统知道并能够使用这些新增的空间
在 OpenWRT 中,如果要完整地扩展根目录的可用空间,通常需要依次执行这两个步骤。先扩展分区,再扩展文件系统,这样才能真正利用到新增的存储空间。
准备
安装对应工具
首先,需要安装
partedresize2fslosetupopkg update opkg install parted resize2fs lostup检查OpenWrt系统固件
由于我的OpenWrt系统是ext4,因此并没有使用overlay,从命令输出也可以看出来
root@ImmortalWrt:~# block info /dev/mmcblk0p1: UUID="67A3-2229" LABEL="boot" VERSION="FAT16" MOUNT="/boot" TYPE="vfat" /dev/mmcblk0p2: UUID="ff313567-e9f1-5a5d-9895-3ba130b4a864" LABEL="rootfs" VERSION="1.0" MOUNT="/" TYPE="ext4" root@ImmortalWrt:~# mount /dev/root on / type ext4 (rw,noatime) proc on /proc type proc (rw,nosuid,nodev,noexec,relatime) sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime) cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime,nsdelegate) tmpfs on /tmp type tmpfs (rw,nosuid,nodev,noatime) /dev/mmcblk0p1 on /boot type vfat (rw,noatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro) tmpfs on /dev type tmpfs (rw,nosuid,noexec,noatime,size=512k,mode=755) devpts on /dev/pts type devpts (rw,nosuid,noexec,noatime,mode=600,ptmxmode=000) debugfs on /sys/kernel/debug type debugfs (rw,nosuid,nodev,noexec,noatime) bpffs on /sys/fs/bpf type bpf (rw,nosuid,nodev,noexec,noatime,mode=700)这确实不是 overlay 文件系统。从输出可以看到: 当前有两个分区:
- /dev/mmcblk0p1:FAT16格式,挂载在 /boot
- /dev/mmcblk0p2:ext4格式,挂载在根目录 /
目前的系统是直接运行在 ext4 分区上,而不是 overlay 文件系统
调整分区表
使用parted进行调整
得知统是直接运行在 ext4 分区上,因此我们使用parted检查分区并扩容
parted -l -s # 查看磁盘名和序号 parted /dev/mmcblk0 resizepart 2 100% #此时运行命令,发现我们的分区表已成功调整
root@ImmortalWrt:~# parted /dev/mmcblk0 print Model: SD ED2S5 (sd/mmc) Disk /dev/mmcblk0: 128GB Sector size (logical/physical): 512B/512B Partition Table: msdos Disk Flags: Number Start End Size Type File system Flags 1 4194kB 71.3MB 67.1MB primary fat16 boot, lba 2 75.5MB 128GB 128GB primary ext4使用fdisk进行调整
如果你无法使用parted进行调整,请尝试使用fdisk调整。若上一步调整成功,则无需理会此步骤。
opkg install parted首先查看分区表:
fdisk -l Disk /dev/mmcblk0: 119.38 GiB, 128177930240 bytes, 250347520 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x3c92ff95 Device Boot Start End Sectors Size Id Type /dev/mmcblk0p1 * 8192 139263 131072 64M 6 FAT16 /dev/mmcblk0p2 147456 250347519 250200064 119.3G 83 Linux发现我们需要修改的磁盘名为
/dev/mmcblk0,因此执行:fdisk /dev/mmcblk0按照图示内容进行修改即可,建议
mmcblk0p2按照原本的start位置开始分区,避免其他错误。root@ZhangOpenWrt:~# fdisk /dev/mmcblk0 Welcome to fdisk (util-linux 2.40.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. This disk is currently in use - repartitioning is probably a bad idea. Command (m for help): p Disk /dev/mmcblk0: 119.38 GiB, 128177930240 bytes, 250347520 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x3c92ff95 Device Boot Start End Sectors Size Id Type /dev/mmcblk0p1 * 8192 139263 131072 64M 6 FAT16 /dev/mmcblk0p2 147456 761855 614400 300M 83 Linux Command (m for help): d Partition number (1,2, default 2): 2 Partition 2 has been deleted. Command (m for help): n Partition type p primary (1 primary, 0 extended, 3 free) e extended (container for logical partitions) Select (default p): p Partition number (2-4, default 2): First sector (2048-250347519, default 2048): 147456 Last sector, +/-sectors or +/-size{K,M,G,T,P} (147456-250347519, default 250347519): Created a new partition 2 of type 'Linux' and of size 119.3 GiB. Partition #2 contains a ext4 signature. Do you want to remove the signature? [Y]es/[N]o: n Command (m for help): w The partition table has been altered. Syncing disks.最后使用
fdisk -l可以查看分区表已经成功修改。拓展文件系统
Loop Device 是一个虚拟块设备接口,它可以将文件或块设备映射为一个新的块设备,这种映射提供了一个中间层,允许以更安全的方式操作底层设备
物理设备(如/dev/mmcblk0p2) -> Loop Device(/dev/loop0) -> resize2fs操作方法:
# 1. 建立映射 losetup /dev/loop0 /dev/mmcblk0p2 # 此时创建了一个从 loop0 到实际分区的映射 # 2. 文件系统操作 resize2fs -f /dev/loop0 # resize2fs 通过 loop device 接口修改文件系统 # 3. 变更生效 reboot # 重启使所有缓存的更改写入磁盘
一般来说,在进行第二步之后,可以使用df -h的方法查看硬盘分区大小是否改变,若改变,可重启保存更改。若未改变,请先排查错误原因,避免配置错误后重启导致的系统奔溃。 -
基于 WireGuard 的内网组网教程:实现多设备间的安全互联
前言
很久以前写了frp over wirguard这篇文章,里面主要讲述了如何通过wireguard打通通道,并通过frp将内部端口映射出去,主要作用为将无公网IP的服务器的服务通过有公网IP的服务器映射出去,达到网络可访问内网服务器服务的效果。本文主要讲解通过wireguard进行组网,达到所有设备内部访问的效果,与前文不同的是,前文将客户端置于该内网外部,本文将客户端置于内网内部。
应用
此方法搭建出来内网应当是面向个人使用,例如将自己的硬盘映射出来,自己在任何地方都可以访问;更方便地远程控制电脑等。
详细工作
准备
由于wireguard采用了interface(本端)和peer(对端)的方式,本文不区分各个客户端和服务端,但是为了方便区分,将有公网IP的服务器成为服务端。
首先,应当在各设备上安装wireguard,各设备应当参照wireguard官网安装,此处仅列举出一般设备:
- Ubuntu:
sudo apt install wireguard - Windows:下载安装软件并安装
- IOS:使用美区icloud id登录app store,直接下载安装
中心服务器基本配置搭建
生成公私钥对
在此处我使用了Ubuntu作为我的服务器系统,其他设备自行查找配置文件位置。
首先,生成服务器端需要的公私钥
sudo mkdir -p /etc/wireguard && sudo chmod 0777 /etc/wireguard && cd /etc/wireguard umask 077 wg genkey | tee private.key | wg pubkey > public.key创建公私钥后可以查看私钥内容,后面配置需要
cat public.key cat private.ley配置文件讲解
wireguard默认将配置文件放置于
/etc/wireguard/中,可以使用wg0.conf/wg1.conf这样的方式进行命名,一个组网使用一个文件以下为一个示例:
编辑一个配置文件
/etc/wireguard/wg0.confnano /etc/wireguard/wg0.conf由于服务器我们作为提供公共ip的服务器,同时还负责转发流量的服务,所以我们需要有PostUp和PostDown的设置,以及对于每个对端Peer(组网中其他设备),在每次添加设备的时候我们还需要额外添加,在后文也会有讲述。
wireguard的配置文件格式大概为
[Interface] 本机配置 [Peer] 对端配置 [Peer] 对端配置 ......因此我们分开配置两个部分进行讲解。
配置文件Interface部分配置
[Interface] PrivateKey = 此处填写密钥内容 Address = 10.0.8.1/24 PostUp = iptables -A FORWARD -i wg0 -o wg0 -j ACCEPT; iptables -A FORWARD -i wg0 -o eth0 -j ACCEPT; iptables -A FORWARD -i eth0 -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE PostDown = iptables -D FORWARD -i wg0 -o wg0 -j ACCEPT; iptables -D FORWARD -i wg0 -o eth0 -j ACCEPT; iptables -D FORWARD -i eth0 -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE ListenPort = 此处填写端口 MTU = 1420其中密钥、端口以及内网地址可以更换为你所希望的配置,但是作为路由和网关的中心服务器,更简易使用
/24地址,让中心服务器可以管理整个子网的流量和路由。配置文件Peer部分配置
纵然在理论上,可以使用一个公钥文件和私钥文件添加多个对端,但是不推荐。因为 WireGuard 的设计要求每个peer都有其独立的公钥-私钥对,保持安全性和保证可用,中心服务器的配置文件需要根据每个Peer端来单独设置。
因此在添加任何一个新设备的时候,都应该在中心服务器对应组网的配置文件中添加一个Peer部分,以下是一个Peer部分的配置文件示例:
[Peer] PublicKey = Peer端的公钥内容 AllowedIPs = 10.0.8.11/32请修改对应公钥和允许的IP端。
组网各设备的配置
生成各设备的公私钥对
通过各设备自己的方式生成公私钥对,此处不再详细讲解。
各设备Interface配置
[Interface] PrivateKey = 各设备生成的私钥内容 Address = 10.0.8.11/32 MTU = 1420其中修改你希望该设备的内网地址
各设备Peer部分配置
[Peer] PublicKey = 中心服务器公钥内容 AllowedIPs = 10.0.8.0/24 Endpoint = 中心服务器ip:端口 PersistentKeepalive = 30注意此处AllowedIP端修改为了/24端,这样做可以形成一个
10.0.8.0-10.0.8.255之间组网的设备,可以根据需要修改。测试
各设备与中心服务器的连接测试
在首次搭建好中心服务器和组网中其他设备的wireguard后,应当先连接wireguard并进行测试
ping 10.0.8.1替换为你的中心服务器地址,如果ping通,说明组网成功。
如果ping不通,请使用端口扫描工具检查中心服务器端口是否开放,如果开放请检查对应配置。
组网中各设备的连接测试
如果有此需求,搭建好组网中两个设备后应当进行Ping测试,如果发现不通,但是各设备和中心服务器相通,请检查中心服务器转发服务是否正常。
- Ubuntu:
-
搭建Minecraft空岛服务器:基于docker和CarpetSkyAdditions
引言
前几天无聊的时候,偶然在视频平台刷到了我小时候,可能上至小学五六年级,最喜欢玩的游戏之一——我的世界,minecraft。想当初在手机上长按第二个格子便可以刷出很多物品的乐趣,现在长大了,对于儿时的记忆仍然尤新,还是能切身体会到那种“逃课”的快乐(当然,现在在塞尔达里面也经常能体验到)。
然而,儿时较大的遗憾是没有技术,不会自己组建服务器,通常都是在别人的服务器里肝得开开心心,转头关服又灰心丧气,所以,儿时的快乐总是极致而又短暂的。不过到了现在,自己已经有了技术,对服务器也了解一二,反而对这种游戏没有太大兴趣了。因此自己开服玩游戏其实一直都没有很多机会。这段时间偶尔的“上号”,才按照最好的方式部署了一次 Minecraft 服务器。因此,本文在我成功部署之后,将此步骤作为记录,以提供给想要自行部署服务器玩的朋友们,愿你们能在这个世界中玩的开心。
本文将讲述如何使用 Linux 服务器,通过 docker 和 CarpetSkyAdditions 来搭建一个 minecraft 空岛服务器。对于 windows 开服的玩家来说,步骤可能有些许不同,如果有不懂的问题,请随时提问,我将在本文章评论区提供帮助。
准备工作
服务器
- Linux 系统
- 按照Wiki给出的配置菜单,用于 Unix 的 Minecraft 服务器不应当小于以下配置
需求 玩家 CPU 内存 硬盘 上传带宽 下载带宽 [隐藏]注释 最低配置 1-2 Intel Pentium 4 1.8 GHz 或 AMD Athlon XP 1600+ 或 PowerPC 750 1000 MHz/G4 1 GHz 以上 512 MB 2 GB 可用空间 (5GB -如果经常备份服务器) 3 Mbit/s 2 Mbit/s (Minecraft 服务器能勉强在 1Mbit/s 的上传带宽上运行) Acceptable 2-4 Intel Pentium 4 2.6 GHz 或 AMD Athlon XP 2000+ 或 G4/Frescale 7xxx 1.8 GHz 以上 2 GB 8 GB 可用空间 6 Mbit/s 3 Mbit/s 推荐配置 4-5 Intel Pentium 4 3.6 GHz 或 AMD Phenom 3600+ G4 2.0 GHz 或 IBM 970 以上 3 GB 16 GB 可用空间 8 Mbit/s 4 Mbit/s 优良配置 5-7 Intel Core-Based CPUs 或 AMD K8-Based CPUs IBM 970 2.0 GHz 以上 5 GB 25 GB 可用空间 14 Mbit/s 7 Mbit/s 最佳配置 7+ Intel Core-Based CPUs 或 AMD K8-Based CPUs at 3.6GHz 或 higher IBM 970 2.0 GHz 以上 6 GB 35 GB 可用空间 30 Mbit/s 15 Mbit/s 推荐使用高读写速度的机械磁盘或 SLC SSD。 - 我个人建议,应当保持不小于 2G 的内存空间,不小于 20G 的存储空间,上下行带宽不应小于 5Mbps 即可
所需软件和工具
- 必要的指令
apt install curl tar zip- Docker 的安装与配置
curl -fsSL https://get.docker.com | bash -s docker对于国内服务器,可以使用
--mirror参数设置镜像源进行安装,例如:curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun创建并运行 docker compose 生成默认配置文件
- 创建 docker-compose.yml
我们选用的 Docker 镜像为广受使用的itzg 的 docker-minecraft-server,由于 CarpetSkyAdditions 是基于Fabric的,所以我们配置文件需要使用 Fabric 对应的 docker 镜像。当然如果你并不是想游玩空岛地图,你可以在官方给出的环境示例或者直接在Github 配置文件示例选择你想要的 server type 并使用即可。mkdir mc && cd $_当然,此处我直接给出我自己的配置文件
services: mc: image: itzg/minecraft-server stdin_open: true tty: true restart: unless-stopped environment: EULA: "true" TYPE: FABRIC VERSION: 1.20.1 MEMORY: 3G ports: - "25565:25565" volumes: - ./data:/data volumes: fabric: {}注意,上面的内容请不要照抄,请修改自己对应的内存
MEMORY。如果你想跟我一样玩空岛并想自己写配置文件的话,请先参考CarpetSkyAdditions对应的MC的最新版本,由于写这篇文章时最新版为1.20.1,因此本文以版本为主。按下Esc键并输入
:wq回车保存- 运行 docker compose 并创建默认文件
docker compose up等待运行完成,会生成默认世界,世界生成完毕后 Ctrl+C 退出 docker 页面并停止容器
docker compose down至此,我们对于 docker 和 mc 的创建就已经完成,如果你想要体验原汁原味的生存,就可以开始了。
空岛配置
配置 CarpetSkyAdditions
- 从 Github 官网下载
- 下载CarpetSkyAdditions模组
cd data/mods && curl -L -o carpetskyadditions-1.20.1-4.4.1.jar https://github.com/jsorrell/CarpetSkyAdditions/releases/download/v1.20.1-4.4.1/carpetskyadditions-1.20.1-4.4.1.jar>- 下载必须的模组,由于 Curseforge 的原因,并不方便通过
curl或者wget命令进行下载。通过手动访问下载并通过 ftp 上传到服务器 (上传到data文件夹下的./mods文件夹中)- fabric-api访问的下载方式:链接
- fabric-carpet访问的下载方式:链接
- Cloth-config访问的下载方式:链接
- 此外,我还将这几个文件打包放入我的服务器中,你可以通过此方式直接下载:
- 从本站下载
cd data/mods && curl -L -o mods.tar.gz https://api.zty.ink/api/v2/objects/file/4k41dx7iv5onapouj7.zip && unzip mods.tar.gz配置服务器属性文件(
server.properties)- 在前面创建 docker compose 文件的时候我们已经运行过一次了,因此会在
data目录下生成我们的server.properties文件,直接修改即可
将level-type=minecraft\:normal(世界生成类型:默认)修改为level-type=carpetskyadditions\:skyblock(世界生成类型:空岛),并启用数据包carpetskyadditions:skyblock... initial-enabled-packs=carpetskyadditions\:skyblock level-type=carpetskyadditions\:skyblock ... - 如果你不清楚如何修改,直接运行下面命令即可。
请进入./data 目录下运行该指令。sed -i 's/^level-type=minecraft\\:normal/level-type=carpetskyadditions\\:skyblock/' server.properties && awk -F= '/^initial-enabled-packs=/ {print $0",carpetskyadditions:skyblock"; next} 1' server.properties > server.properties.tmp && mv server.properties.tmp server.properties- (可选)指定种子:
- 在
level-seed中填写你对应的种子即可。
- 在
(可选)添加其他模组
以下模组均可直接下载 MC 对应版本的 mod 后添加到
./data/mods文件夹,重启服务器即可docker compose restart- GugleCarpetAddition
- 假人模组,可以不用在空岛这么肝
- Servus
- 服务器端提供结构边界框给客户端 MiniHUD 的工具
创建世界并添加数据包
在做完以上工作后,我们便可以正常创建一个空岛世界,并添加适合空岛玩法的数据包。
删除原有世界并创造新的世界
由于我们之前的世界并不是根据 CarpetSkyAdditions 生成的,所以我们需要先删掉之前生成的 world 世界,重新由 carpetskyadditions\:skyblock 生成一个世界。
rm -rf world && cd .. && docker compose up -d添加并启用数据包
- 下载数据包到 datapacks 文件夹中
- 从官网下载
cd data/world/datapacks && curl -L -o carpetskyadditions-1.20.1-4.4.1-datapack.zip https://github.com/jsorrell/CarpetSkyAdditions/releases/download/v1.20.1-4.4.1/carpetskyadditions-1.20.1-4.4.1-datapack.zip- 启用数据包
- 进入控制台
docker ps会输出类似于以下内容,找到其 NAMES CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1fca3576a47f itzg/minecraft-server “/start” 4 days ago Up 4 days (healthy) 0.0.0.0:25565->25565/tcp, :::25565->25565/tcp mc-mc-1docker exec -i <NAMES> rcon-cli将其中的< NAMES >更换为上面的内容 - 启用数据包
首先,通过以下命令查看哪些数据包没有被启用> datapack list类似于以下输出There are 4 data pack(s) enabled: [carpetskyadditions:skyblock (built-in: Carpet Sky Additions)], [fabric (Fabric mod)], [vanilla (built-in)], [file/carpetskyadditions-1.20.1-4.4.1-datapack.zip (world)]There are 1 data pack(s) available: [carpetskyadditions:skyblock_acacia (built-in: Carpet Sky Additions)]启用对应数据包即可 (一般来说是 carpetskyadditions-1.20.1-4.4.1-datapack.zip)datapack enable carpetskyadditions-1.20.1-4.4.1-datapack.zip
测试服务器
外部连接测试
由于开放的是 Minecraft 标准的 25565 端口,因此在服务器地址一栏中直接输入服务器地址即可直接连接。
客户端配置
同样,您需要将
datapack文件和language文件放入客户端的datapacks文件夹中,并且在游戏配置中启用,才能获得更好的体验。此外,我强烈建议您在客户端安装
MiniHUDmod,这在空岛生存中非常有用常见问题解答
- 为何我连接不上?
- 首先,通过
docker ps检查容器是否正常运行,如果容器发生错误,请根据 log 自行排查 - 若容器运行正常,大概率为网络问题,请先检查防火墙是否阻断,一般我习惯用 ufw 来管理防火墙。您应当检查 iptables
- 版本问题
服务器维护与管理
常见问题及解决方法
- 容器重启和停止命令
重启: docker compose restart 停止: docker compose down- 日志查看与错误排查
Minecraft 日志存放于./data/logs文件夹中
cat data/logs/latest.log备份与恢复
- 数据备份策略
一般来说,我们只需要备份world文件夹(或者你创建的其他世界的名称)即可,如果 mod 使用过多或者使用了不常见的 datapacks,建议备份对应文件夹以及server.properties
tar -zcf bak.tar.gz world datapacks mods server.properties- 恢复备份数据的方法
将备份文件解压到data目录下即可
tar -zxf bak.tar.gz结论
总体来说,通过 docker 的搭建方式让我觉得比使用其他方式更加便携和更加模块化,我更喜欢通过 docker 来部署 Minecraft 服务器,当然我也在此鼓励各位尝试更加个性化的部署方式,一方面能够体验更多的乐趣,另一方面也希望各位不要总是遵循文档办事。我相信,有自己的创造力是每一个 mc 玩家最值得骄傲的事情。
附录
这些资源可以帮助您更深入地了解如何使用 Docker 和 Minecraft 模组来定制和优化自己的游戏服务器。
-
树莓派4B校园网连接和自动认证配置
配置
- Raspi 4B
- Linux version 6.1.0-rpi7-rpi-v8 (gcc-12 (Debian 12.2.0-14) 12.2.0, GNU ld (GNU Binutils for Debian) 2.40) #1 SMP PREEMPT Debian 1:6.1.63-1+rpt1 (2023-11-24)
- systemd-networkd(这个版本默认安装此软件管理网络)。其他管理软件可以通过
systemctl list-unit-files | grep network查询 - wpa_supplicant
- systemd-networkd(这个版本默认安装此软件管理网络)。其他管理软件可以通过
- 校园网(BUAA-Mobile)
- SSID:BUAA-Mobile
- 安全类型:WPA2-企业(PEAP)
- 频段:5 GHz
- IPv4 DNS服务器:202.112.128.51, 202.112.128.50
- 校园网(BUAA-WiFi)
- SSID:BUAA-WiFi
- 安全类型:开放
- 频段:5 GHz
- IPv4 DNS服务器:202.112.128.51, 202.112.128.50
wpa supplicant配置
编辑wpa supplicant配置
nano /etc/wpa_supplicant/wpa_supplicant.confctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 country=CN network={ ssid="BUAA-WiFi" key_mgmt=NONE priority=11 } network={ ssid="BUAA-Mobile" key_mgmt=WPA-EAP eap=PEAP TTLS identity="*" password="*" phase1="PEAP" phase2="MSCHAPv2" priority=10 proactive_key_caching=1 }重新启动
systemd-networkd服务重新启动systemd-networkd服务:
sudo systemctl restart systemd-networkd检查
wpa_supplicant服务状态:sudo systemctl status wpa_supplicant如果
wpa_supplicant服务未运行,可以尝试启动它:sudo systemctl start wpa_supplicant重新加载网络配置:
sudo systemctl restart networking通过以上设置,可以轻松连接到校园网。
使用BeihangLogin自动认证
https://github.com/buaahub/BeihangLogin
git clone https://github.com/buaahub/BeihangLogin.git mv account.example account //编辑登录文件 nano account ./login-v2.sh login -
阿里云学生认证优惠购买及配置T5服务器指南
学生认证及优惠券领取
学生认证
进行学生认证前,您需要先完成账号的个人实名认证。
完成个人实名认证后进入阿里云-学生认证页面,进行学生认证,按照操作提示完成认证。
优惠券领取
进入优惠券领取地址,领取高校学生通用权益,获得¥ 300无门槛抵扣金。
创建VPC并完成对应配置
创建交换机及专有网络
进入阿里云-专有网络VPC-专有网络-创建专有网络,完成以下配置,未标注的部分请自行完成。
配置要点:
- 地域:选择香港(或其他地区),各地区具体价格可查看首页>共享带宽>产品概述>产品计费>按量计费>按主流量计费
- IPv4网段:随意
- IPv6网段:分配(阿里云)
查看T5服务器可用区步骤:
- 进入云服务器ECS-自定义购买
- 在地域中选择你要购买的地区(以香港为例)
- 在筛选中输入t5
- 在网络及可用区中点击全部可用区,然后点页面其他部分(不要点默认交换机),这样才可以显示随机分配可用区
- 在实例部分查看t5可用区,例如显示当前地域:中国(香港)- 可用区 B 可用区 C,因此BC均为我们的可用区

交换机可用区:填写上一步骤中找到的可用区之一即可,点击确定创建专有网络。
创建共享带宽及弹性公网IPv4和IPv6
进入专有网络-共享带宽,点击购买共享带宽,按照以下部分配置,未标注的部分请自行完成。
配置参数:
- 商品类型选择按量计费
- 线路类型选择BGP(多线)
⚠️ 重要提醒:只有BGP(多线)享受免费的20+180G流量,精品不享受共享流量。参考链接
- 计费方式选择按主流量
- 带宽可拉满也可以自定义,按照需求
- 立即购买

重新进入共享带宽页面,点击最右侧的添加IP并添加一个EIP。

开通CDT
- 进入CDT页面
- 开通CDT及云产品,注意需要升级产品,否则无法享用200G流量

购买T5服务器并绑定VPC
购买服务器
创建完VPC后就可以在之前打开过的页面成功创建我们的VPS了。
服务器配置:
- 付费类型:包年包月
- 地域:香港
- 网络及可用区:选择之前创建过的专有网络
- 实例:选择T5(不要打开突发性能实例,镜像自行选择)

存储配置:
请将云盘大小修改为20GiB。
⚠️ 重要提醒:这里默认是40GiB,若不修改最后不是最便宜的计费方式

带宽和安全组配置:
- IPv4:请不要分配公网IPv4,我们将在后面绑定弹性公网IP地址
- IPv6:选择下方的免费分配IPv6地址

查看右方概要是否正确,修改购买时长并使用优惠券进行购买。

为T5服务器绑定VPC(公网IP)
- 进入专有网络-弹性公网IP,可以看到有我们之前创建的EIP
- 在右侧操作中绑定我们的服务器即可
常见问题解答
如果我的服务器在香港,流出流量到大陆,是计算在20G大陆流量还是180G全球流量中?
答案:我暂时未使用到20G流量,但是通过查看账单,我认为其按照服务器地区进行评判(即使用180G全球流量)。

能否不使用共享带宽?
答案:可以,跳过共享带宽创建的部分,可以到专有网络-公网访问-弹性公网IP中直接申请公网IP即可,不过带宽最大只有200Mbps,且计费方式为**出向公网的实际流量计费**,如果出站大于入站,建议选此种方法。
阿里云学生认证优惠购买及配置T5服务器指南
学生认证及优惠券领取
学生认证
进行学生认证前,您需要先完成账号的个人实名认证。
完成个人实名认证后进入阿里云-学生认证页面,进行学生认证,按照操作提示完成认证。
优惠券领取
进入优惠券领取地址,领取高校学生通用权益,获得¥ 300无门槛抵扣金。
创建VPC并完成对应配置
创建交换机及专有网络
进入阿里云-专有网络VPC-专有网络-创建专有网络,完成以下配置,未标注的部分请自行完成。
配置要点:
- 地域:选择香港(或其他地区),各地区具体价格可查看首页>共享带宽>产品概述>产品计费>按量计费>按主流量计费
- IPv4网段:随意
- IPv6网段:分配(阿里云)
查看T5服务器可用区步骤:
- 进入云服务器ECS-自定义购买
- 在地域中选择你要购买的地区(以香港为例)
- 在筛选中输入t5
- 在网络及可用区中点击全部可用区,然后点页面其他部分(不要点默认交换机),这样才可以显示随机分配可用区
- 在实例部分查看t5可用区,例如显示当前地域:中国(香港)- 可用区 B 可用区 C,因此BC均为我们的可用区

交换机可用区:填写上一步骤中找到的可用区之一即可,点击确定创建专有网络。
创建共享带宽及弹性公网IPv4和IPv6
进入专有网络-共享带宽,点击购买共享带宽,按照以下部分配置,未标注的部分请自行完成。
配置参数:
- 商品类型选择按量计费
- 线路类型选择BGP(多线)
⚠️ 重要提醒:只有BGP(多线)享受免费的20+180G流量,精品不享受共享流量。参考链接
- 计费方式选择按主流量
- 带宽可拉满也可以自定义,按照需求
- 立即购买

重新进入共享带宽页面,点击最右侧的添加IP并添加一个EIP。

开通CDT
- 进入CDT页面
- 开通CDT及云产品,注意需要升级产品,否则无法享用200G流量

购买T5服务器并绑定VPC
购买服务器
创建完VPC后就可以在之前打开过的页面成功创建我们的VPS了。
服务器配置:
- 付费类型:包年包月
- 地域:香港
- 网络及可用区:选择之前创建过的专有网络
- 实例:选择T5(不要打开突发性能实例,镜像自行选择)

存储配置:
请将云盘大小修改为20GiB。
⚠️ 重要提醒:这里默认是40GiB,若不修改最后不是最便宜的计费方式

带宽和安全组配置:
- IPv4:请不要分配公网IPv4,我们将在后面绑定弹性公网IP地址
- IPv6:选择下方的免费分配IPv6地址

查看右方概要是否正确,修改购买时长并使用优惠券进行购买。

为T5服务器绑定VPC(公网IP)
- 进入专有网络-弹性公网IP,可以看到有我们之前创建的EIP
- 在右侧操作中绑定我们的服务器即可
常见问题解答
如果我的服务器在香港,流出流量到大陆,是计算在20G大陆流量还是180G全球流量中?
答案:我暂时未使用到20G流量,但是通过查看账单,我认为其按照服务器地区进行评判(即使用180G全球流量)。

能否不使用共享带宽?
答案:可以,跳过共享带宽创建的部分,可以到专有网络-公网访问-弹性公网IP中直接申请公网IP即可,不过带宽最大只有200Mbps,且计费方式为**出向公网的实际流量计费**,如果出站大于入站,建议选此种方法。
-
优化服务器资源与网络线路的利用:通过负载均衡搭建多网站环境
引言
- 服务器资源不均衡和网络线路差异的常见问题
现在大多数 vps 都是没办法同时将高性能和优秀线路结合在一起的。例如,在我本人手持服务器中,会有 GIA/9929 等优秀线路的服务器,然而这些服务器的性能普遍较弱,而性能较强,搭载 5950X 等 cpu 的服务器却在国际互联上表现较差。搭建网站时,我可能会更希望在接受高并发(优秀的硬件条件)的情况下访问速度更快,延迟更低(优秀的线路)。因此我通过负载均衡来有效利用两种服务器的优势。

- 高可用性和快速响应的重要性
快速响应时间是用户体验的关键因素之一。当用户访问网站时,他们期望能够快速加载页面并进行交互,而不是等待很长时间。提高可用性和实现快速响应时间,有助于提高用户满意度,增加页面浏览量,并提升搜索引擎排名。
第一部分:负载均衡的基本概念
负载均衡的定义和作用
负载均衡是一种用于分配工作负载到多个计算资源(如服务器、网络链接、CPU 等)的方法。其主要目的是提高资源的利用率、确保系统的高可用性和快速响应。通过将请求分散到多个服务器上,负载均衡可以避免单个服务器成为瓶颈,从而提高整个系统的吞吐量和可靠性。

提高资源利用率
负载均衡可以确保每个服务器的工作负载尽可能均匀地分布,从而避免某些服务器过载而其他服务器闲置的情况。这种均衡分配能够优化资源的使用,提升整体系统的性能。
保证高可用性和快速响应
负载均衡器可以实时监控服务器的运行状态,并将流量重定向到健康的服务器。如果某个服务器出现故障,负载均衡器会自动将请求分配给其他可用的服务器,确保服务的连续性和可靠性。此外,通过将请求分配给响应时间最快的服务器,负载均衡可以显著提高用户的访问速度和体验。
常见的负载均衡算法
负载均衡算法决定了如何将传入的请求分配到后端的服务器。以下是几种常见的负载均衡算法:
轮询(Round Robin)
轮询算法是最简单的一种负载均衡算法。它按顺序将每个新请求分配给后端服务器列表中的下一个服务器。每个服务器接收到的请求数量大致相同,适用于负载较为均匀的场景。
加权轮询(Weighted Round Robin)
加权轮询是在轮询算法的基础上增加了权重的概念。每个服务器根据其权重值分配到的请求数量不同,权重越高的服务器分配到的请求越多。这种算法适用于后端服务器性能不一致的情况,通过设置不同的权重,可以让性能更好的服务器承担更多的负载。
最少连接(Least Connections)
最少连接算法将新请求分配给当前连接数最少的服务器。这样可以确保每个服务器的负载尽可能均匀地分布,适用于长连接和负载不均匀的场景。通过实时监控每个服务器的连接数,可以动态调整负载分配,避免某些服务器过载。
源地址哈希(IP Hash)
源地址哈希算法根据请求源 IP 地址的哈希值分配服务器。每个请求的源 IP 地址经过哈希函数计算后得到一个值,并根据该值将请求分配给特定的服务器。这种算法保证了同一个 IP 地址的请求总是分配到同一台服务器上,适用于需要会话保持(如购物车等)的场景。
负载均衡通过使用上述各种算法,可以根据实际需求和服务器性能,灵活地将工作负载分配到合适的服务器上,从而优化系统的性能和可靠性。
第二部分:反向代理和负载均衡的技术实现
反向代理的原理与作用
反向代理是一种服务器架构,它的主要功能是代理内部服务器处理来自客户端的请求。反向代理服务器接收客户端的请求,然后将这些请求转发给后端的服务器进行处理。处理完成后,反向代理服务器将后端服务器的响应返回给客户端。
请求转发与负载均衡
- 请求转发: 反向代理服务器可以将来自客户端的请求转发到多个后端服务器。这不仅可以提高系统的安全性和隐私性,还可以简化内部服务器的配置和管理。
- 负载均衡: 反向代理可以配合负载均衡算法,将请求分配到不同的后端服务器,从而平衡负载,避免某些服务器过载,提高系统的整体性能和可靠性。
Nginx 的反向代理与负载均衡配置
Nginx 是一个高性能的 HTTP 和反向代理服务器,它可以轻松配置反向代理和负载均衡。
基本配置示例
以下是 Nginx 的基本反向代理配置示例:
server { listen 80; server_name your_domain.com; location / { proxy_pass http://backend_servers; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } upstream backend_servers { server 192.168.0.1; server 192.168.0.2; }负载均衡算法的应用
Nginx 支持多种负载均衡算法,包括轮询(Round Robin)、加权轮询(Weighted Round Robin)、最少连接(Least Connections)和源地址哈希(IP Hash)。
- 轮询(Round Robin)
upstream backend_servers { server 192.168.0.1; server 192.168.0.2; }- 加权轮询(Weighted Round Robin)
upstream backend_servers { server 192.168.0.1 weight=10; server 192.168.0.2 weight=5; }- 最少连接(Least Connections)
upstream backend_servers { least_conn; server 192.168.0.1; server 192.168.0.2; }- 源地址哈希(IP Hash)
upstream backend_servers { ip_hash; server 192.168.0.1; server 192.168.0.2; }HAProxy 的反向代理与负载均衡配置
HAProxy 是一个开源的高可用性负载均衡和代理服务器,特别适用于高流量的 Web 站点。
基本配置示例
以下是 HAProxy 的基本反向代理配置示例:
frontend http-in bind *:80 default_backend backend_servers backend backend_servers server server1 192.168.0.1:80 check server server2 192.168.0.2:80 check负载均衡算法的应用
HAProxy 同样支持多种负载均衡算法,包括轮询(Round Robin)、加权轮询(Weighted Round Robin)、最少连接(Least Connections)和源地址哈希(IP Hash)。
- 轮询(Round Robin)
backend backend_servers balance roundrobin server server1 192.168.0.1:80 check server server2 192.168.0.2:80 check- 加权轮询(Weighted Round Robin)
backend backend_servers balance roundrobin server server1 192.168.0.1:80 weight 10 check server server2 192.168.0.2:80 weight 5 check- 最少连接(Least Connections)
backend backend_servers balance leastconn server server1 192.168.0.1:80 check server server2 192.168.0.2:80 check- 源地址哈希(IP Hash)
backend backend_servers balance source server server1 192.168.0.1:80 check server server2 192.168.0.2:80 check其中,HAProxy 可以完全代替 Nginx 作为反向代理和负载均衡器,而不需要同时使用 Nginx 和 HAProxy。HAProxy 是一款专为高可用性、负载均衡和代理服务设计的解决方案,特别适用于高流量网站。
第三部分:利用 HAProxy 实际部署多网站环境
示例场景介绍
- 服务器 A(网络线路好)和服务器 DEFG(高性能服务器)
部署方案:反向代理与负载均衡结合
- 在 ABC 服务器上配置 Nginx 反向代理
- 在 DEFG 服务器上部署完整的 LNMP 环境
- 配置示例和优化措施
第四部分:优化和扩展
提升 Nginx 性能的配置建议
- 增加 worker 进程和连接数限制
- 缓存静态内容
使用负载均衡集群
- DNS 负载均衡的实现
- 扩展 ABC 服务器的方案
实时监控和自动扩展
- 监控工具的使用
- 自动扩展的配置和管理