【路由器】OpenWrt 配置使用
因国家法律规定,部分内容已删除,完整内容请查看文章末尾链接
Web 界面
一般 OpenWrt 安装好之后会已经默启用了 Web 管理界面(LuCI),默认地址是 192.168.1.1,默认账号是 root,无密码,直接点击登录即可进入
汉化
默认界面是英文的,可以在 系统-软件 中搜索中文包安装进行汉化
- 点击
UPDATE LIST...耐心等待软件包的更新 - 然后在
Filter:下的输入框中输入luci-i18n-base-zh-cn,在筛选出来的结果中点击INSTALL...,安装勾上Overwrite files from other package(s),然后点击INSTALL,耐心等待安装完成之后刷新网页(Ctrl+F5)可以看见大部分界面已经汉化了 - 同理安装
luci-i18n-opkg-zh-cn包用于 系统-软件 界面的汉化 - 同理安装
luci-i18n-firewall-zh-cn包用于 网络-防火墙 界面的汉化
root 密码
进入管理界面后进入 系统-管理-密码 界面修改路由器密码,同时也是系统的 root 账号的密码
ssh
然后在 系统-管理-ssh 可以配置 ssh 登录,参考配置如下
- 接口:不指定 → 内网以及外网都可以 ssh 登录
- 端口:22 → ssh 默认端口,不做修改
- 密码验证:不勾选 → 推荐使用 ssh 登录
- 允许 root 用户凭密码登录:不勾选 → 推荐使用 ssh 登录
- 网关端口:根据需要勾选
按照上面配置完成后将只能通过 ssh 密钥进行登录,所以还得在 系统-管理-ssh密钥 添加设备的公钥
升级 LuCI
ssh 登入路由器后执行以下命令:
# 更新软件源
opkg update
# luci-compat 包有时可以帮助解决一些兼容性问题,推荐一同安装
opkg install luci luci-base luci-compat
美化
原始的 bootstrap 主题个人不太喜欢,在空间足够的情况下我个人额外安装了 material,主题的切换在 系统-系统-语言和界面 中
opkg update
opkg install luci-theme-material
锐捷认证
很多学校校园网通常采用锐捷认证,并且限制了用户账号的登陆数量,但是我们可以通过在路由器上进行锐捷认证来接入校园网,之后连接路由器的所有设备都会直接接入校园网而不需要认证了
MentoHUST
MentoHUST 是华中科技大学的 HustMoon 最初在校内 BBS 白云黄鹤上发布的一款可以在 Linux 系统上进行锐捷认证的软件。不过原始项目已经归档,不在开发,GitHub 上有加入 v4 支持的新项目
而在 OpenWrt 可以通过 Github 上的两个项目手动编译 .ipk 文件,然后 opkg install xxx.ipk 进行安装即可
- 通过 MentoHUST-OpenWrt-ipk OpenWrt 项目可以生成
mentohust的二进制文件 - 通过 OpenWrt/LEDE LuCI for MentoHUST 项目可以生成 MentoHUST 的 LuCI 控制界面
手动编译 ipk 文件的过程可以参考这里
MiniEAP
MiniEAP 是一个实现了标准 EAP-MD5-Challenge 算法的 EAP 客户端,支持通过插件来修改标准数据包以通过特殊服务端的认证。同时含有支持锐捷 v3 (v4) 算法的插件,可以用来进行锐捷认证
而在 OpenWrt 可以通过 Github 上的两个项目手动编译 .ipk 文件,然后 opkg install xxx.ipk 进行安装即可
- 通过 minieap-openwrt 项目可以生成
minieap的二进制文件 - (可选) 通过 OpenWrt/LEDE LuCI for minieap 项目可以生成 MiniEAP 的 LuCI 控制界面
补充:如果想要掉线自动重新认证,在配置文件中不要配置 no-auto-reauth,参考该 minieap@issue#43
防火墙
开放端口
以开放 80 端口,用于外网直接访问 Web 界面为例:
首先要在 网络-防火墙-通信规则 点击新增,进行如下配置

- 名称:可以随意设置
- 协议:根据需要进行选择即可
- 源区域:选择 WAN 表示是从外网进行访问
- 源地址以及源端口:主要用于限制来访的设备,可以根据需要进行配置
- 目标区域:选择
设备代表这是一个入站的规则 - 目标地址:因为是访问设备,此时不需要配置
- 目标端口:Web 的默认端口是 80
- 操作:开放端口,当然是选择接受
然后在 状态-防火墙 根据需要对 IPv4、IPv6 防火墙进行重启即可
如果这时外网还是不能访问 LuCI 的 Web 界面,可以尝试路由器重启,确认路由器的 IP 是否能够 ping 通,以及确认 80 端口有没有被运营商封禁
端口转发
以将 Windows 的远程连接的端口 3389 为例:
首先要在 网络-防火墙-端口转发 点击新增,进行如下配置

- 名称:可以随意设置
- 协议:根据需要进行选择即可
- 源区域:选择 WAN 表示是从外网进行访问
- 外部端口:这里配置成 13389
- 目标区域:选择
LAN - 内部 IP 地址:配置成内网需要远程连接的主机
- 内部端口:远程连接的默认端口是 3389
然后在 状态-防火墙 根据需要对 IPv4、IPv6 防火墙进行重启即可
后续就可以通过访问路由器 WAN_IP:13389 来远程连接内网的 Windows 主机了
IPv6
在校园网环境下发现 WAN 口默认能自动获取到 IPv6 地址(但是 /128 的地址),并且在路由器上测试也能正常访问 IPv6 网站,但是局域网内的设备不能正常访问 IPv6 网站,于是选择 NAT6 的方式来解决
参考 官网的 NAT6 文档,需要在路由器内依次进行如下配置:
安装 kmod-ipt-nat6 包
# Install packages
opkg update
opkg install kmod-ipt-nat6
配置 IPv6 ULA 前缀,使得内网设备默认使用 IPv6
# Using IPv6 by default
NET_ULA="$(uci get network.globals.ula_prefix)"
uci set network.globals.ula_prefix="d${NET_ULA:1}"
# 默认 network.lan.ip6assign 配置可能有误,需要根据 ula_prefix 重新配置
IP6_ASSIGN="$(echo ${NET_ULA} | grep -E '(\d+)$' -o)"
uci set network.lan.ip6assign="${IP6_ASSIGN}"
uci commit network
/etc/init.d/network restart
配置默认 IPv6 路由
# Announcing default IPv6 route
uci set dhcp.lan.ra_default="1"
uci commit dhcp
/etc/init.d/odhcpd restart
配置防火墙
# Configure firewall
uci set $(uci show firewall | sed -n -e "/\.name='wan'$/s//.masq6='1'/p" | sed -n -e "1p")
uci set $(uci show firewall | sed -n -e "/\.name='Allow-ICMPv6-Forward'$/s//.enabled='0'/p" | sed -n -e "1p")
uci commit firewall
# Configure firewall
cat << "EOF" > /etc/firewall.nat6
# NAT6 + masquerading firewall script
# https://github.com/akatrevorjay/openwrt-masq6
# trevorj <github@trevor.joynson.io>
#
# You can configure in /etc/config/firewall per zone:
# * IPv4 masquerading
# option masq 1
# * IPv6 masquerading
# option masq6 1
# * IPv6 privacy extensions
# option masq6_privacy 1 set -e -o pipefail . /lib/functions.sh
. /lib/functions/network.sh
. /usr/share/libubox/jshn.sh log() {
logger -t nat6 -s "${@}"
} get_ula_prefix() {
uci get network.globals.ula_prefix
} validate_ula_prefix() {
local ula_prefix="${1}"
if [ $(echo "${ula_prefix}" | grep -c -E -e "^([0-9a-fA-F]{4}):([0-9a-fA-F]{0,4}):") -ne 1 ] ; then
log "Fatal error: IPv6 ULA ula_prefix=\"${ula_prefix}\" seems invalid. Please verify that a ula_prefix is set and valid."
return 1
fi
} ip6t() {
ip6tables "${@}"
} ip6t_add() {
if ! ip6t -C "${@}" &> /dev/null; then
ip6t -I "${@}"
fi
} nat6_init() {
iptables-save -t nat \
| sed -e "
/\sMASQUERADE$/d
/\s[DS]NAT\s/d
/\s--match-set\s\S*/s//\06/
/,BROADCAST\s/s// /" \
| ip6tables-restore -T nat
} masq6_network() {
# ${config} contains the ID of the current section
local network_name="${1}" local device
network_get_device device "${network_name}" || return 0 local done_net_dev
for done_net_dev in ${DONE_NETWORK_DEVICES}; do
if [ "${done_net_dev}" = "${device}" ]; then
log "Already configured device=\"${device}\", so leaving as is."
return 0
fi
done log "Found device=\"${device}\" for network_name=\"${network_name}\"." if [ "${zone_masq6_privacy}" -eq 1 ]; then
log "Enabling IPv6 temporary addresses for device=\"${device}\"." log "Accepting router advertisements on ${device} even if forwarding is enabled (required for temporary addresses)"
echo 2 > "/proc/sys/net/ipv6/conf/${device}/accept_ra" \
|| log "Error: Failed to change router advertisements accept policy on ${device} (required for temporary addresses)" log "Using temporary addresses for outgoing connections on interface ${device}"
echo 2 > "/proc/sys/net/ipv6/conf/${device}/use_tempaddr" \
|| log "Error: Failed to enable temporary addresses for outgoing connections on interface ${device}"
fi append DONE_NETWORK_DEVICES "${device}"
} handle_zone() {
# ${config} contains the ID of the current section
local config="${1}" local zone_name
config_get zone_name "${config}" name # Enable masquerading via NAT6
local zone_masq6
config_get_bool zone_masq6 "${config}" masq6 0 log "Firewall config=\"${config}\" zone=\"${zone_name}\" zone_masq6=\"${zone_masq6}\"." if [ "${zone_masq6}" -eq 0 ]; then
return 0
fi # IPv6 privacy extensions: Use temporary addrs for outgoing connections?
local zone_masq6_privacy
config_get_bool zone_masq6_privacy "${config}" masq6_privacy 1 log "Found firewall zone_name=\"${zone_name}\" with zone_masq6=\"${zone_masq6}\" zone_masq6_privacy=\"${zone_masq6_privacy}\"." log "Setting up masquerading nat6 for zone_name=\"${zone_name}\" with zone_masq6_privacy=\"${zone_masq6_privacy}\"" local ula_prefix="$(get_ula_prefix)"
validate_ula_prefix "${ula_prefix}" || return 1 local postrouting_chain="zone_${zone_name}_postrouting"
log "Ensuring ip6tables chain=\"${postrouting_chain}\" contains our MASQUERADE."
ip6t_add "${postrouting_chain}" -t nat \
-m comment --comment "!fw3" -j MASQUERADE local input_chain="zone_${zone_name}_input"
log "Ensuring ip6tables chain=\"${input_chain}\" contains our permissive DNAT rule."
ip6t_add "${input_chain}" -t filter -m conntrack --ctstate DNAT \
-m comment --comment "!fw3: Accept port forwards" -j ACCEPT local forward_chain="zone_${zone_name}_forward"
log "Ensuring ip6tables chain=\"${forward_chain}\" contains our permissive DNAT rule."
ip6t_add "${forward_chain}" -t filter -m conntrack --ctstate DNAT \
-m comment --comment "!fw3: Accept port forwards" -j ACCEPT local DONE_NETWORK_DEVICES=""
config_list_foreach "${config}" network masq6_network log "Done setting up nat6 for zone=\"${zone_name}\" on devices: ${DONE_NETWORK_DEVICES}"
} main() {
nat6_init
config_load firewall
config_foreach handle_zone zone
} main "${@}"
EOF
cat << "EOF" >> /etc/sysupgrade.conf
/etc/firewall.nat6
EOF
经过此步骤后会生成一个
/etc/firewall.nat6脚本,并且加入了/etc/sysupgrade.conf,保证系统升级后也不会丢失该脚本# Configure firewall
uci -q delete firewall.nat6
uci set firewall.nat6="include"
uci set firewall.nat6.path="/etc/firewall.nat6"
uci set firewall.nat6.reload="1"
uci commit firewall
/etc/init.d/firewall restart
# Configure firewall
uci set firewall.@zone[1].masq6="1"
uci set firewall.@zone[1].masq6_privacy="1"
uci commit firewall
/etc/init.d/firewall restart
USB
很多路由器有 USB 端口,通过插入 U 盘或者接入磁盘、SSD 等设备可以拓展存储空间,这样就可以安装更多的插件,或者搭建一个简单的 FTP、SMB 服务器用于共享数据
安装 USB 驱动
依次执行以下命令进行驱动基本包的安装
opkg update
opkg install kmod-usb-core
insmod usbcore
opkg install kmod-usb-storage
如果设备是 USB 2.0
opkg install kmod-usb2
insmod ehci-hcd
如果设备是 USB 3.0
opkg install kmod-usb3
insmod xhci-hcd
通常移动硬盘或者移动 SSD 还需要安装 UAS/UASP 支持
opkg install kmod-usb-storage-uas
然后热插拔存储设备,通常就能在 /dev 目录下看见 sda 设备了
自动挂载
安装块设备工具包
opkg install block-mount
分区
个人已经提前将存储设备划分了两个分区,一个分区较小(sda5)用于后续的 Extroot,剩余的空间(sda6)全用于存储个人数据
创建文件系统
推荐移动磁盘用 ext4 文件系统,而移动 SSD 推荐使用 f2fs 文件系统
分区和创建文件系统可以参考 官网的指导
配置挂载
配置挂载可以通过直接在网页端的 系统-挂载点 进行手动配置,比较直观,如图所示:

- 已启用:勾选
- UUID:推荐使用 UUID 来进行挂载
- 挂载点:也就是挂载的位置,通常在
/mnt目录下新建一个文件夹
Extroot
有时候安装太多包会导致本地空间不足,此时可以通过将包安装在 USB 设备上,也可以通过 Extroot 的方式将 USB 设备的空间直接配置成 overlay 分区,后者更为推荐
修改
fstab,将原本挂载的overlay设备挂载到新的目录/rwmDEVICE="$(sed -n -e "/\s\/overlay\s.*$/s///p" /etc/mtab)"
uci -q delete fstab.rwm
uci set fstab.rwm="mount"
uci set fstab.rwm.device="${DEVICE}"
uci set fstab.rwm.target="/rwm"
uci commit fstab
修改
fstab,配置 USB 设备挂载成overlay分区其中部分部分操作在上节已经执行过,可以略去
# 查看分区信息
# block info # 确定分区并制作文件系统
DEVICE="/dev/sda5"
# mkfs.ext4 ${DEVICE} eval $(block info ${DEVICE} | grep -o -e "UUID=\S*")
uci -q delete fstab.overlay
uci set fstab.overlay="mount"
uci set fstab.overlay.uuid="${UUID}"
uci set fstab.overlay.target="/overlay"
uci commit fstab
将原本
overlay分区数据复制到 USB 设备上,重启设备mkdir -p /tmp/cproot
mount --bind /overlay /tmp/cproot
mount ${DEVICE} /mnt
tar -C /tmp/cproot -cvf - . | tar -C /mnt -xf -
umount /tmp/cproot /mnt
reboot
FTP
配置好 USB 后,就可以配置 FTP 来共享 USB 设备
首先安装 vsftpd 包
opkg install vsftpd
修改配置文件
/etc/vsftpd.conf,这里给出个人的配置,可以参考background=YES
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
check_shell=NO
#dirmessage_enable=YES
#ftpd_banner=Welcome to MINI FTP service.
session_support=NO
#syslog_enable=YES
#userlist_enable=YES
#userlist_deny=NO
#userlist_file=/etc/vsftpd/vsftpd.users
#xferlog_enable=YES
#xferlog_file=/var/log/vsftpd.log
#xferlog_std_format=YES
###
### TLS/SSL options
### example key generation: openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/vsftpd/vsftpd_privkey.pem -out /etc
#ssl_enable=YES
#allow_anon_ssl=NO
#force_local_data_ssl=NO
#force_local_logins_ssl=NO
#ssl_tlsv1=YES
#ssl_sslv2=NO
#ssl_sslv3=NO
#rsa_cert_file=/etc/vsftpd/vsftpd_cert.pem
#rsa_private_key_file=/etc/vsftpd/vsftpd_privkey.pem
# 共享的目录位置
local_root=/mnt/ext4
pasv_enable=YES
pasv_min_port=10090
pasv_max_port=10100
然后参考之前的开放端口,打开 20、21、10090-10100 端口就可以在外网访问 FTP 服务器了

之后重启
vsftpd服务即可使用/etc/init.d/vsftpd restart
P.S. 连接 ftp 服务器的账号密码就是路由器的 root 账号密码
SMB
使用 Samba 来共享的设备可以在 Windows 的文件资源管理器中挂载,使用起来和本地磁盘一样(在局域网内)
安装 samba4-server 以及 LuCI 管理界面
opkg install samba4-server
opkg install luci-app-samba4 luci-i18n-samba4-zh-cn
在网页端的 服务-网络共享 中进行配置,个人配置如下,可以参考

之后重启
samba4服务即可使用/etc/init.d/samba4 restart
P.S. 连接 Samba 服务器的账号密码也是路由器的 root 账号密码
BT 下载
transmission 是一个轻量级跨平台的 BT 下载客户端
安装 transmission
opkg install transmission-daemon
opkg install transmission-cli
opkg install transmission-web # web 界面,可选
opkg install transmission-remote
opkg install luci-app-transmission luci-i18n-transmission-zh-cn
直接修改
/etc/config/transmission,或者在网页端的 服务-Transmission 进行配置,下面给出个人配置,可以参考
config transmission
option config_overwrite '1'
option mem_percentage '50'
option nice '10'
option alt_speed_enabled 'false'
option alt_speed_time_enabled 'false'
option bind_address_ipv4 '0.0.0.0'
option bind_address_ipv6 '::'
option blocklist_enabled 'false'
option cache_size_mb '2'
option dht_enabled 'true'
option download_queue_enabled 'true'
option download_queue_size '4'
option encryption '1'
option idle_seeding_limit_enabled 'false'
option lazy_bitfield_enabled 'true'
option lpd_enabled 'false'
option message_level '1'
option peer_limit_global '240'
option peer_limit_per_torrent '60'
option peer_port '51413'
option peer_port_random_on_start 'false'
option peer_socket_tos 'default'
option pex_enabled 'true'
option port_forwarding_enabled 'true'
option preallocation '1'
option queue_stalled_enabled 'true'
option queue_stalled_minutes '30'
option ratio_limit '2.0000'
option rename_partial_files 'true'
option rpc_bind_address '0.0.0.0'
option rpc_enabled 'true'
option rpc_host_whitelist_enabled 'false'
option rpc_port '9091'
option rpc_url '/transmission/'
option rpc_whitelist_enabled 'false'
option scrape_paused_torrents_enabled 'true'
option script_torrent_done_enabled 'false'
option seed_queue_enabled 'false'
option speed_limit_down_enabled 'false'
option speed_limit_up_enabled 'false'
option start_added_torrents 'true'
option umask '18'
option utp_enabled 'true'
option scrape_paused_torrents 'true'
option watch_dir_enabled 'false'
option enabled '1'
option user 'root'
option group 'root'
option upload_slots_per_torrent '10'
option download_dir '/mnt/ext4/transmission'
option incomplete_dir_enabled 'true'
option incomplete_dir '/mnt/ext4/transmission/incomplete'
option trash_original_torrent_files 'true'
option rpc_authentication_required 'true'
option rpc_username 'rpc_username'
option rpc_password 'rpc_password'
option ratio_limit_enabled 'true'
option config_dir '/etc/transmission'
之后重启
transmission服务即可使用/etc/init.d/transmission restart
连接的账号密码为自行配置的 RPC 连接的账号密码
默认的 Web 界面 比较简陋,并且不能配置 tracker,个人推荐使用 transgui 来 RPC 连接使用
如果需要远程访问,则需要将 rpc_port 配置的端口开放,具体流程参考 上文
参考资料
- 【OpenWrt】LuCI
- 【CSDN】luci.cbi 报错
- 【Github】MentoHUST 加入 v4 支持
- 【Github】MentoHUST-OpenWrt-ipk
- 【Github】OpenWrt/LEDE LuCI for MentoHUST
- 【Github】MiniEAP
- 【Github】minieap-openwrt
- 【Github】OpenWrt/LEDE LuCI for minieap
- 【GitHub】no-auto-reauth 配置项的逻辑判断有问题
- 【OpenWrt】firewall rules
- 【OpenWrt】防火墙配置举例
- 【OpenWrt】IPv6 NAT6 配置
- 【OpenWrt】默认使用 IPv6
- 【OpenWrt】默认 IPv6 路由
- 【OpenWrt】安装 USB 驱动
- 【OpenWrt】使用 USB 设备
- 【OpenWrt】Extroot 配置
- 【OpenWrt】FTP
- 【OpenWrt】Samba
- 【OpenWrt】transmission
本文作者: ywang_wnlo
本文链接: https://ywang-wnlo.github.io/posts/51140c4a.html
版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
【路由器】OpenWrt 配置使用的更多相关文章
- OpenWrt 20.02.2 小米路由器3G配置CP1025网络打印
家里的施乐 CP116w 工作快五年了终于罢工了. 黑粉报错, 自己也不会拆, 只能搁置了. 后来换了个 HP CP1025. 这个打印机也不错, 墨盒便宜没什么废粉, 就是启动慢一点, 而且 -- ...
- 路由器OpenWrt如何脱机(离线)下载BT文件
路由器OpenWrt如何脱机(离线)下载BT文件 1.首先到如下网址下载OpenWrt固件(确保为路由器正确型号). http://downloads.openwrt.org/snapshots/tr ...
- Cisco SG300系列交换机划分VLan与普通路由器连接配置
思科SG300系列三层交换机是针对中小企业设计的一款产品,Marvell 主控和128M Ram,最大支持52个千兆RJ45端口和2个SFP端口,因公司业务需求,最近也进行了解和配置,具体型号为 SG ...
- 网络工程实训_2路由器基本配置及IOS介绍
实验2:路由器基本配置及IOS介绍.包括:CLI的使用与IOS基本命令:配置文件的备份和IOS的备份:CDP协议. 一.实验目的 1.熟悉路由器CLI的各种模式: 2.熟悉路由器CLI的各种编辑命令: ...
- 新CCIE笔记-路由器的配置
CCIE重修笔记之路由器基本配置与最简单的路由. 路由器与交换机的基本配置命令 全局配置模式下有多种子模式 (华为可以跳跃切换模式) 思科命令行技巧 Tab键补全,也可以直接保留缩写 问号'?'类似l ...
- HCNP学习笔记之史上最全华为路由器交换机配置命令大合集
先来一张思科和华为命令的对照表: 史上最全华为路由器交换机配置命令大合集,熟练掌握下面的华为路由器交换机配置知识点,你只需花几分钟的时间就能明白华为路由器交换机配置.交换机的配置命令等等. 华为路由器 ...
- [转] Cisco路由器DNS配置
禁用Web服务 Cisco路由器还在缺省情况下启用了Web服务,它是一个安全风险.如果你不打算使用它,最好将它关闭.举例如下: Router(config)# no ip http server 配置 ...
- CISCO实验记录一:路由器基本配置
一.路由器基本配置要求 1.设置路由器名为:hehe 2.设置特权模式下password为ccna,secret为ccnp,vty线路密码为ccie 3.所有明文密码都加密 二.路由器基本配置命令 1 ...
- Cisco 三层交换机划分VLan与普通路由器连接配置
根据一些中小企业的一些业务需求,设计一套方案: 计划目标:针对不同部门划分不同的VLAN,前期满足能够同时上网的需求,后期需要能够隔离不同部门的资源访问(本次配置操作不涉及). 因之前未接触CISCO ...
- 实验1: Cisco路由器基础配置
实验 1: Cisco路由器基础配置 1. 路由器的运行模式:Router> 用户模式,通常用来查看统计信息,但不能修改路由器的设置.Router# 特许模式,可以查看并修改 ...
随机推荐
- 2021-09-07:单词接龙 II。按字典 wordList 完成从单词 beginWord 到单词 endWord 转化,一个表示此过程的 转换序列 是形式上像 beginWord -> s1 -
2021-09-07:单词接龙 II.按字典 wordList 完成从单词 beginWord 到单词 endWord 转化,一个表示此过程的 转换序列 是形式上像 beginWord -> s ...
- Sentinel基本使用与源码分析
系列文章目录和关于我 一丶什么是Sentinel Sentinel官网 Sentinel 是面向分布式.多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由.流量控制.流量整形.熔断降级 ...
- TLS 加速技术:Intel QuickAssist Technology(QAT)解决方案
作者:vivo 互联网服务器团队- Ye Feng 本文介绍了 Intel QAT 技术方案,通过Multi-Buffer技术和QAT硬件加速卡的两种方式实现对TLS的加速 一.背景 当前 TLS 已 ...
- L2-035 完全二叉树的层序遍历
题目描述: 一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是完美二叉树.对于深度为 D 的,有 N 个结点的二叉树,若其结点对应于相同深度完美二叉树的层序遍历的前 N 个结点,这样的树就 ...
- drf——权限、认证源码分析、过滤、排序、分页
权限.认证源码(了解) 权限源码 # 继承了APIView才有的--->执行流程--->dispatch中的三大认证 self.initial(request, *args, **kwar ...
- 《HelloGitHub》第 86 期
兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣.入门级的开源项目. https://github.com/521xueweiha ...
- Health Kit文档大变样,一起尝鲜!
Health Kit文档全新升级,开发场景更清晰,聚焦你关心的问题,快来一起尝鲜! 文档入口请戳:文档入口~ 如果你是运动健康的老朋友,可以从旧文档页面上方的提示信息中进入:最新版本哦. 一. 架构调 ...
- Spectre.Console-处理依赖注入
引言 之前说的做自动记录 Todo 执行过程中消耗的时间的Todo 项目,由于想持续保持程序执行,就放弃了 Spectre.Console.Cli,后来随着命令越来越多,自己处理觉得很是麻烦,想了想要 ...
- Python 中常见的 TypeError 是什么?
翻译:BioIT 爱好者原文:TypeError: A Bytes-Like object Is Required, not 'str' | Finxter 简介 目标:在本教程中,我们的目标是修复以 ...
- 重新温习git
在本地文件夹创建项目,使用git bash here,然后使用git clone[url]命令克隆,提示权限不足, 这是需要ssh重置了 1.删除原有.ssh文件下的known_hosts 2.设置用 ...