首页
斐讯设备
疯言疯语
系统运维
编程语言
网站建设
友情连接
推荐
autojs
Search
1
charles破解注册码(含windows和mac)最新安装教程「亲测有效」
53 阅读
2
aris常用命令收集
22 阅读
3
Centos7本地yum源更换阿里云
21 阅读
4
【omv5安装教程二】N1盒子Armbian系统下,一条命令搞定Openmediavault(OMV5)安装
19 阅读
5
告别破解!用Aspose.Words实现Java版Word转PDF的实战指南
16 阅读
登录
Search
标签搜索
JAVA
JAVA学习系列
docker
Linux
js
N1
git
模块二
模块一
端口
模块五
数据库
模块九
模块四
镜像
模块三
模块六
MySQL
百度网盘
nginx
DaiMaFengZi
累计撰写
589
篇文章
累计收到
8
条评论
首页
栏目
斐讯设备
疯言疯语
系统运维
编程语言
网站建设
页面
友情连接
推荐
autojs
搜索到
33
篇与
的结果
2026-04-08
从Google Authenticator解密获取2FA密钥备份教程
前言启用2FA可以有效的保证账户安全,但一旦手机丢失或者换手机等操作不当丢失2FA密钥就会导致账户可能再也无法找回。Google Authenticator是一个常用的二步验证动态口令生成工具,支持设备间转移和google云备份,但是在软件内不能直接查看到密钥,不能很方便的进行密钥的本地保存和备份,或者是迁移到其它2FA平台。这里介绍一个从Google Authenticator解密获取到2FA密钥的工具和使用方法。操作过程导出配置文件二维码打开Google Authenticator,点击左上角的三条横线按钮,选择转移账号选择导出账号勾选需要导出的账号并点击下一步这里我们会看到一个二维码,截图保存为文件,比如ga.jpg使用decodeGoogleOTP工具解码为了方便整个过程,我写了一个命令行工具decodeGoogleOTP,前往Github下载页面,根据自己的平台,下载最新版本的工具。https://github.com/Kuingsmile/decodeGoogleOTP/releases下载后解压,为了方便操作可以重命名一下,比如windows平台重命名为decodeGoogleOTP.exe,然后和ga.jpg放在一个文件夹下。decodeGoogleOTP支持将结果导出为csv文件、json文件、txt文件或者二维码图片等多种格式。如果我们需要将结果导出为json文件,运行如下命令即可decodeGoogleOTP -i ga.jpg -c output.json输出的结果格式如下:[ { "issuer": "", "name": "xx", "secret": "AAAAAAAAAAA", "type": "totp", "counter": 0, "url": "otpauth://totp/xx?secret=AAAAAAAAAAA" } ]其中secret字段就是2FA密钥,有了密钥就可以方便的转移到其它平台。而url可以用来生成二维码供其它2FA软件扫描导入,也可以使用decodeGoogleOTP直接导出二维码图片供扫描
2026年04月08日
4 阅读
0 评论
0 点赞
2026-02-22
【亲测免费】 推荐使用:TrueTime for Android - 精准把握时间的Android库
前言在移动应用开发中,获取准确的时间信息至关重要。TrueTime for Android是一个强大的(S)NTP客户端,它提供了一种不受手动调整设备时钟影响的方式来计算“现在”的日期和时间。无论用户出于何种原因改变设备时间,TrueTime都能确保你的应用获取到真实、可靠的时间。什么是TrueTime?TrueTime是一款专为Android设计的(N)TP库,旨在解决因设备时钟手动修改导致的时间不准确问题。通过连接网络中的时间服务器,TrueTime可以让你的应用在任何情况下都能获取到不受本地设置影响的真实世界时间。为什么选择TrueTime?对于那些依赖准确时间的场景,例如金融交易、定时任务或精确计时的应用,TrueTime是理想的选择。避免用户设定错误的时钟影响你的服务,确保每个操作都基于不可篡改的时间基准。如何运作?TrueTime的原理基于NTP协议,它会与网络上的时间服务器进行同步,从而获取标准的世界时间。尽管技术细节已在一次会议演讲中详细讲解(视频链接和幻灯片见项目README),但当前版本已更新为Kotlin和Coroutines实现,不再需要额外的RxJava依赖。如何集成与使用?TrueTime通过JitPack托管,只需将以下代码添加到你的build.gradle文件中:repositories { maven { url "https://jitpack.io" } } dependencies { implementation 'com.github.instacart:truetime-android:<release-version>' }然后,在应用程序类中启动TrueTime同步器:class App : Application() { val trueTime = TrueTimeImpl() override fun onCreate() { super.onCreate() trueTime.sync() } }之后,你可以通过调用trueTime.now()来获取准确的当前时间。正在进行的工作:TrueTime 4.0TrueTime 4.0进行了重大重构,引入了Kotlin和Coroutines,虽然一些高级功能还在开发中,但它已经完全可用。未来的改进包括:引入缓存提供商、算法优化、移除对Android的直接依赖以及利用所有NTP池地址等。即使在这些特性完善之前,你也可以立即开始使用TrueTime。许可证TrueTime遵循Apache 2.0许可证,这意味着你可以自由地使用、修改并分发这个库,具体详情参阅LICENSE文件。开始你的精准时间之旅借助TrueTime for Android,你可以让应用的时间管理更加精确和可靠。无论是为了提高用户体验还是保证业务逻辑的一致性,TrueTime都是你不可或缺的工具。立即集成并体验其强大功能吧!{cloud title="下载链接" type="default" url="https://gitcode.com/gh_mirrors/tr/truetime-android/?utm_source=gitcode_aigc_v1_t1&index=bottom&type=card&&uuid_tt_dd=10_20155177610-1768621114071-687479&isLogin=1&from_id=141041738&from_link=609a3b4387017873e22a3e595618e595" password=""/}
2026年02月22日
5 阅读
0 评论
0 点赞
2025-10-01
安装Office office Tool 一键解决,选择性安装功能
前言最近换了台电脑,就有很多东西要装,office也就无法避免,以前都是在使用绿色版,而且一下载就是office那一套全家桶,现在通过office tool这个工具完全不用担心这些问题了,所用工具已经上传,下载即可Office too 安装教程一看就会,选择性安装自己需要的office功能!解压office tool 压缩包,打开 Office Tool Plus,如果电脑上有office 的朋友,要提前卸载office,好用的卸载工具这里也提供一下,iobit 卸载软件卸载完之后点击部署,如果没有卸载干净也可以部署,那么你的电脑上可能会出现2个office,所以大家在安装的时候还是要注意一下{cloud title="好用的卸载工具" type="default" url="https://gitcode.com/open-source-toolkit/94285.git" password=""/}选择一下六步,其他的可以不用选,如果想选,可以安装的话也是没问题的,注意安装版本和通道一定要一样,不能是不能部署的安装许可证,进行激活也是一定要按照步骤来,一步一步的点,如果跳过了可能就激活失败了,切记KMS 主机首行office tool压缩包里面还有很多验证码,有些验证码可能是验证失败的,要多试几个就好了打开安装好的office,查看激活情况对了,office tool 安装office 的唯一缺点在于,不能指定office 安装路径,默认在C盘,不介意的话其实也没啥关系,就2-3个G左右,嘿嘿看到这里,恭喜你,成为office用户!Office_Tool工具下载{cloud title="官网: https://otp.landian.vip/zh-cn/" type="default" url="https://otp.landian.vip/zh-cn/" password=""/}
2025年10月01日
4 阅读
0 评论
0 点赞
2025-09-08
如何批量卸载?BCUninstaller这个工具超好用!
前言电脑上的流氓软件,简直是用户们的噩梦。卸了又来,来了又卸,反反复复,就像打不死的小强,顽固得让人抓狂。相信很多朋友都深有体会。残留的文件和注册表项在系统的深处悄悄积累,它们占据了珍贵的存储空间,潜移默化中可能令系统变得重负累累,行动迟缓。Windows标准卸载功能尽管方便,但有时它像是用木棍挑战高科技锁门,无法达到用户真正的卸载需求。今天分享的这款卸载工具专治流氓,使用也很简单,还你一个干净的电脑,BCUninstaller,相信你会爱上它。BCUninstaller软件简介是一款功能强大的免费卸载工具,专为高效清理 Windows 系统中的不必要软件而设计。它支持批量卸载、多选卸载和强制卸载等功能,可以彻底移除顽固程序及其残留文件、注册表项,帮助用户释放系统空间、提升系统性能。BCUninstaller 特别适合需要频繁安装和卸载软件的用户,是管理和优化 Windows 系统的理想选择。它的细节做得非常到位。首次使用时,它会检测电脑上所有第三方软件,并详细展示软件的用户评分、安装日期、占用空间、存储位置等信息。下载地址https://github.com/Klocman/Bulk-Crap-Uninstaller{cloud title="下载链接" type="default" url="https://github.com/Klocman/Bulk-Crap-Uninstaller" password=""/}
2025年09月08日
4 阅读
0 评论
0 点赞
2025-09-04
【N1和Armbian】十一、在 docker 中使用 mihomo
须知本文默认您已经安装好了 docker 并了解 docker 的一些基本概念如果您是纯命令行环境,本文将默认你会命令行最基本的使用(如创建文件/文件夹、编辑文本等)mihomo 是 clash 的一个分支,也是目前使用最广泛的分支,各平台许多客户端使用的核心均为 mihomo,或者它曾经还有个可能更多人听过的名字叫 mihomo meta。需要说明的是 mihomo 与最原始的 clash 本身都是一个纯命令行程序,这意味着它本身没有图形界面,但本文会讲到如何配置 mihomo 的 webUI,以便日常使用。编写 mihomo 配置文件新建一个空文件夹命名为 mihomo,在其中新建文本文档 config.yaml可参考下方模板来创建您自己的配置文件,模板参考自官方文档,如果你希望了解配置文件的具体规则,同样请参考官方文档。(本文最后有链接)该模板中必须要修改的是第 19、20 行与 25 行,根据实际情况进行填写,修改模板后不含模板中的尖括号。其中节点提供者名称可自由填写,用于程序区分多个订阅;节点名称前缀会在显示节点信息时插入到原始节点名称前,便于自己区分不同订阅的节点。第 1 行为代理端口设置,第 6 行为外部控制端口设置(如使用 webUI 控制 mihomo)如有需要可自行更改。# =================== 基础设置 =================== mixed-port: 7890 allow-lan: true bind-address: '*' mode: rule log-level: warning external-controller: '0.0.0.0:9090' # =================== 连接优化与实验性功能 =================== tfo: true experimental: http2: true # 提升网页/YouTube加载速度 sniff-tls-sni: false # 更兼容,避免部分网站 TLS 握手失败 # =================== Profile 与连接优化 =================== profile: store-selected: true store-fake-ip: true unified-delay: true keep-alive-interval: 15 # 每15秒保活长连接 tcp-concurrent: true global-client-fingerprint: chrome # =================== 嗅探(新版,无警告)=================== sniff: enabled: true include: - tls - http parse-pure-ip: true override-destination: true force-dns-mapping: true skip-domain: - "+.local" - "+.lan" - "localhost" - "+.alipay.com" - "+.tenpay.com" - "mch.weixin.qq.com" # =================== 代理节点提供者 =================== proxy-providers: 自己: type: file path: ./subs-check/output/mihomo.yaml interval: 3600 health-check: enable: true url: "https://www.gstatic.com/generate_204" interval: 300 timeout: 3000 lazy: true method: GET disable-keepalive: true override: additional-prefix: "MY_" IKUUU: url: "https://rze57.no-mad-world.club/link/WM9j6NcfU4Odu20u?clash=3&extend=1" type: http interval: 3600 health-check: enable: true url: "https://www.gstatic.com/generate_204" interval: 300 timeout: 3000 lazy: true method: GET disable-keepalive: true override: additional-prefix: "IKUUU_" # =================== 本地代理 =================== proxies: - name: "🎯 直连" type: direct udp: true - name: "🛑 拒绝" type: reject udp: true # =================== Geo 数据源(使用 github.dpik.top 加速)=================== geodata-mode: true geox-url: geoip: "https://github.dpik.top/MetaCubeX/meta-rules-dat/releases/download/latest/geoip.dat" geosite: "https://github.dpik.top/MetaCubeX/meta-rules-dat/releases/download/latest/geosite.dat" mmdb: "https://github.dpik.top/MetaCubeX/meta-rules-dat/releases/download/latest/country-lite.mmdb" asn: "https://github.dpik.top/MetaCubeX/meta-rules-dat/releases/download/latest/GeoLite2-ASN.mmdb" # =================== DNS 设置 =================== dns: enable: true prefer-h3: true ipv6: false respect-rules: true enhanced-mode: fake-ip fake-ip-range: 198.18.0.1/16 fake-ip-filter: - "+.lan" - "+.local" - "localhost" - "+.market.xiaomi.com" proxy-server-nameserver: - 223.5.5.5 - 119.29.29.29 - https://223.5.5.5/dns-query default-nameserver: - 223.5.5.5 - 119.29.29.29 namesater: - https://120.53.53.53/dns-query - https://223.5.5.5/dns-query fallback: - https://cloudflare-dns.com/dns-query - https://dns.google/dns-query - https://1.1.1.1/dns-query fallback-filter: geoip: true geoip-code: CN ipcidr: - 240.0.0.0/4 - 0.0.0.0/8 domain: - "+.google.com" - "+.gstatic.com" - "+.facebook.com" - "+.twitter.com" - "+.telegram.org" - "+.youtube.com" - "+.netflix.com" - "+.googleusercontent.com" nameserver-policy: "geosite:cn,private": - https://120.53.53.53/dns-query - https://223.5.5.5/dns-query "geosite:geolocation-!cn": - https://cloudflare-dns.com/dns-query - https://dns.google/dns-query # =================== 代理组 (移除AI和奈飞专用组) =================== proxy-groups: - name: "⚡ 超高速节点" type: url-test use: ["自己", "IKUUU"] url: "https://www.gstatic.com/generate_204" interval: 300 tolerance: 100 lazy: true max-failed-times: 3 - name: "🚀 高速节点" type: url-test use: ["自己", "IKUUU"] url: "https://www.gstatic.com/generate_204" interval: 300 tolerance: 50 timeout: 3000 lazy: true - name: "🚀 节点选择" type: select proxies: - "⚡ 超高速节点" - "🚀 高速节点" - "🚀 手动切换" - "🎯 直连" - name: "🚀 手动切换" type: select include-all: true - name: "📱 电报消息" type: select proxies: - "⚡ 超高速节点" - "🚀 高速节点" - "🚀 手动切换" - name: "📺 油管视频" type: select proxies: - "⚡ 超高速节点" - "🚀 高速节点" - "🚀 手动切换" - name: "📺 哔哩哔哩" type: select proxies: - "🎯 直连" - "🚀 节点选择" - name: "🇨🇳 国内媒体" type: select proxies: - "🎯 直连" - name: "🐟 漏网之鱼" type: select proxies: - "🚀 节点选择" - "🚀 手动切换" - "🎯 直连" # =================== 规则提供者 (移除 Telegram/YouTube/ProxyGFWlist 的外部文件) =================== rule-providers: LocalAreaNetwork: url: "https://testingcf.jsdelivr.net/gh/ACL4SSR/ACL4SSR@master/Clash/LocalAreaNetwork.list" path: ./ruleset/LocalAreaNetwork.list behavior: classical interval: 86400 format: text type: http UnBan: url: "https://testingcf.jsdelivr.net/gh/ACL4SSR/ACL4SSR@master/Clash/UnBan.list" path: ./ruleset/UnBan.list behavior: classical interval: 86400 format: text type: http # =================== 规则 =================== rules: - "PROCESS-NAME,subs-check.exe,🎯 直连" - "PROCESS-NAME,subs-check,🎯 直连" - "RULE-SET,LocalAreaNetwork,🎯 直连" - "RULE-SET,UnBan,🎯 直连" - "GEOSITE,private,🎯 直连" - "GEOSITE,telegram,📱 电报消息" - "GEOSITE,youtube,📺 油管视频" - "GEOSITE,gfw,🚀 节点选择" - "GEOSITE,cn,🎯 直连" - "GEOIP,CN,🎯 直连" - "MATCH,🐟 漏网之鱼"安装mihomo和webUI对于 metacubexd 服务:docker run -d \ --name metacubexd \ --restart always \ -p 9097:80 \ ghcr.io/metacubex/metacubexd对于 mihomo 服务:由于mihomo使用了host网络模式、添加了所有的Linux capabilities (cap_add: - ALL),并且挂载了一些特殊的卷(如/dev/net/tun),其docker run命令稍微复杂一些。请确保替换<config.yaml所在目录>为您实际的配置文件目录路径。docker run -d \ --name mihomo \ --restart always \ --pid host \ --ipc host \ --network host \ --cap-add ALL \ -v <config.yaml所在目录>:/root/.config/mihomo \ -v /dev/net/tun:/dev/net/tun \ docker.io/metacubex/mihomo:latest打开 webUI 并开始使用在局域网内任意设备浏览器中输入 设备IP:9097 即可访问 metacubexd 的界面,后端地址填写 http://设备IP:9090 ,密钥留空即可,如图所示,点击添加便可管理 mihomo 的各项配置。若在前文中修改了 webUI 访问端口和外部控制端口,请自行替换为自己设置的端口号。如果你使用 metacubexd 更改了一些设置,那将只会在 mihomo 的本次运行生效,重启 mihomo 会将所有设置重置为你第一步在 config.yaml 中所填写的配置至此已搭建完成,在需要使用网络代理的地方在代理选项内填入 设备IP:7890 即可使用。附上我的配置{cloud title="蓝奏云" type="lz" url="https://daimafengzi.lanzout.com/iDf3835ejsdi" password=""/}{cloud title="百度云" type="bd" url="https://pan.baidu.com/s/1r6gbtIhPDl0vuL45X6hn3w?pwd=2jff" password="2jff"/}{cloud title="123盘" type="default" url="https://www.123912.com/s/0ztiVv-K7Yod" password=""/}{cloud title="天翼云(访问码:to8l)" type="default" url="https://cloud.189.cn/web/share?code=yQriea7NjEby" password=""/}
2025年09月04日
7 阅读
0 评论
0 点赞
2025-04-03
sourcetreeapp管理git。精美的 Git 图形用户界面,简约而强大
{cloud title="下载地址" type="default" url="https://www.sourcetreeapp.com/" password=""/}简介Sourcetree 可简化您与 Mercurial 和 Git 存储库的交互,让您集中精力编写代码。通过 Sourcetree 简单的 Git 图形用户界面查看和管理您的存储库。
2025年04月03日
10 阅读
0 评论
0 点赞
2025-02-25
frp 部署及使用(内网穿透)
前言FRP(Fast Reverse Proxy) 是一个开源的反向代理工具,主要用于内网穿透和远程访问。它可以通过映射网络服务(如 HTTP、TCP、UDP 等)到公网,实现内网服务的外网访问,特别适合在无公网 IP 或有防火墙限制的场景下使用。 下载地址:https://github.com/fatedier/frp/releases {cloud title="下载链接" type="default" url="https://github.com/fatedier/frp/releases" password=""/}详细使用文档:https://gofrp.org/zh-cn/docs/overview/核心功能内网穿透反向代理自定义域名跨网络访问安全性多种高级功能一、环境准备说明一下frp 分为: 1、frps 服务端(外网使用);2、frpc 客户端(内网使用)模拟环境:家用服务器没有公网 ip 云服务器有公网 ip 两服务器系统环境均为:Ubuntu 24.04 frp服务包: (两个环境版本一致) 二、安装包准备{cloud title="蓝奏云," type="lz" url="https://daimafengzi.lanzout.com/b01tp77j0f" password="2t25"/}{cloud title="天翼云盘,(访问码:kn18)" type="default" url="https://cloud.189.cn/web/share?code=ZZrEvm32iqiy" password=""/}{cloud title="123云盘" type="default" url="https://www.123684.com/s/0ztiVv-vUaod?" password="R14f"/}三、外网服务器部署 frps上传压缩包到任意目录然后解压,示例 /usr/local/ 目录# 解压到当前目录 unzip frps.zip # 移动并改名 mv frps /usr/local/frps # 创建 frp 用户 useradd -r -s /usr/sbin/nologin -M frp # 授权文件夹 chown -R frp:frp /usr/local/frp备份并修改 frps 配置文件 frps.toml (直接执行命令,不用手动编辑)# 备份配置文件 cp /usr/local/frp/frps.toml /usr/local/frp/frps.tomlbak# 直接执行覆盖原来的配置 /usr/local/frp/frps.toml > [common] # 服务端绑定的端口,用于客户端与服务端通信的核心端口。需要确保该端口对外网开放。 bind_port = 7000 # HTTP 代理的虚拟主机端口。用于通过域名访问客户端的 HTTP 服务,需配置 DNS。 vhost_http_port = 80 # HTTPS 代理的虚拟主机端口。用于通过域名访问客户端的 HTTPS 服务,需配置 DNS。 vhost_https_port = 443 # 密钥,是自定义的,想怎么填写就怎么填写,但客户端和服务端必须保持一致,确保安全通信。 token = "Frp20241129" # 仪表板端口,用于查看 frps 服务端的运行状态和管理客户端连接。访问地址:服务器IP:7500 dashboard_port = 7500加入系统服务并开机自启动 # 加入系统服务 /etc/systemd/system/frps.service [Unit] Description = frp server After = network.target syslog.target Wants = network.target [Service] Type = simple ExecStart = /etc/frpc/frps -c /etc/frpc/frps.toml [Install] WantedBy = multi-user.target # 重载配置使其生效 systemctl daemon-reload # 启动 frps 服务 systemctl start frps.service # 设置开机自启 systemctl enable frps.service四、内网服务器部署 frpc上传压缩包到任意目录然后解压,示例 /usr/local/ 目录# 解压到当前目录 unzip frpc.gz # 移动并改名 mv frpc /usr/local/frpc # 创建 frp 用户 useradd -r -s /usr/sbin/nologin -M frp # 授权文件夹 chown -R frp:frp /usr/local/frp备份并修改 frpc 配置文件 frpc.toml (直接执行命令,不用手动编辑)cp /usr/local/frp/frpc.toml /usr/local/frp/frpc.tomlbak# 直接执行覆盖原来的配置 /usr/local/frp/frpc.toml > [common] server_addr = "此处引号内填写外网服务器的公网IP" # 服务端口 server_port = 7000 # 密钥,需要和 frps 配置一致 token = "Frp20241129" # 配置每个内网服务 # 服务名称,随便写,自己能看懂就行 [ssh_test] type = "tcp" local_ip = "127.0.0.1" # 家用服务器上暴露的端口 local_port = 22 # 外网服务器上暴露的端口,ssh时候,使用外网 IP 和这个端口可以远程访问家里的服务器 remote_port = 2299 # 服务名称,随便写,自己能看懂就行 [web_server] type = "http" local_ip = "127.0.0.1" # 家用服务器上暴露的端口 local_port = 80 # 外网服务器上暴露的端口,使用外网 IP 和这个端口可以远程访问家里web服务,这个配置和域名 #remote_port = 6001 # 用于 HTTP 和 HTTPS 域名的代理。填写自己的域名,没有就注释这个配置,启用 remote_port 配置 custom_domains = "www.adbc.cn" #remote_port 和 custom_domains 配置冲突,只能使用一个 加入系统服务并开机自启动 # 加入系统服务 /etc/systemd/system/frpc.service [Unit] Description = frp server After = network.target syslog.target Wants = network.target [Service] Type = simple ExecStart = /etc/frpc/frps -c /etc/frpc/frps.toml [Install] WantedBy = multi-user.target # 重载配置使其生效 systemctl daemon-reload # 启动 frps 服务 systemctl start frpc.service # 设置开机自启 systemctl enable frpc.service五,查看 frpc 是否在 frps 内注册,并测试网页访问使用外网手机或者电脑访问域名,测试通过。域名记得配置 公网DNS解析 。
2025年02月25日
3 阅读
0 评论
0 点赞
2024-11-29
使用wireguard搭建实现异地组网并使用 wg-gen-web 来管理 WireGuard 的配置
使用wireguard搭建实现异地组网并使用 wg-gen-web 来管理 WireGuard 的配置内容有点长,让我缕缕前言说起异地组网,之前一直在使用zerotier-planet进行搭建,使用了一段时间也挺稳定,唯一的不足就是ios平台由于系统限制没办法修改planet文件,也就没法进行组网。网上找了一圈,看到很早就有人在官方论坛里面提过这个需求,但是官方似乎对此兴趣好像不大,没办法只能研究其他组网方式,找了一圈后最后确定下来使用wireguard搭建中继服务器进行组网,wireguard的各平台支持也都比较齐全,其功能也都满足我的需求,在此记录下组网过程。画个图安装wireguard #Ubuntu22 apt install -y wireguard #Centos yum install -y wireguard #armbian yum install -y wireguard #KylinV10 yum install -y wireguard # 添加下面的配置到 /etc/sysctl.conf 后执行 sysctl -p 生效 net.ipv4.ip_forward = 1一键命令,一次性搞定。wg-gen-web 配置wg-gen-web 仓库对于新手来说,如何才能快速把 WireGuard 用起来呢?当然是通过图形管理界面啦,填几个参数,生成个二维码,再拿客户端扫下二维码就连上了,简直是比爽姐还爽~wg-gen-web 就是这样一款图形管理界面,主要包含以下这些功能:根据 CIDR 自动分配 IP 地址给客户端;每个客户端会生成 QR 二维码,方便移动客户端扫描使用;支持通过邮件发送二维码和配置文件;支持启用和禁用某个客户端;支持 IPv6;支持使用 GitHub 和 Oauth2 OIDC 来进行用户认证;颜值还比较高。wg-gen-web 支持直接通过容器来运行,如果你是在本地运行,可以准备一份 docker-compose 文件:version: '3.6' services: wg-gen-web: image: vx3r/wg-gen-web:latest container_name: wg-gen-web restart: always expose: - "8080/tcp" ports: - 80:8080 environment: - WG_CONF_DIR=/data - WG_INTERFACE_NAME=wg0.conf - OAUTH2_PROVIDER_NAME=fake - WG_STATS_API=http://<API_LISTEN_IP>:8182 volumes: - /etc/wireguard:/data network_mode: bridge wg-json-api: image: james/wg-api:latest container_name: wg-json-api restart: always cap_add: - NET_ADMIN network_mode: "host" command: wg-api --device wg0 --listen <API_LISTEN_IP>:8182我习惯于用docker命令来安装:docker run --rm -it -v /tmp/wireguard:/data -p 8080:8080 -e "WG_CONF_DIR=/data" vx3r/wg-gen-web:latest这里还用到了另外一个项目 wg-api,该项目提供了一个 JSON-RPC 接口,用来暴露 WireGuard 的网络状态信息。其中 <API_LISTEN_IP> 可以直接替换成 docker0 的 IP。执行以下命令运行 wg-gen-web:docker-compose up -d在浏览器中输入 URL 打开图形管理界面,点击 “SERVER” 开始填写服务端和客户端的配置信息:这里的 PostUp和PostDown我只有如下设置的时候才行,不知道是不是我的内网原因。各位看着弄 #PostUp iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE #PostDown iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE填写好配置信息后,直接点击 UPDATE SERVER CONFIGURATION 保存,同时会生成配置文件 wg0.conf: cat /etc/wireguard/wg0.conf # Updated: 2021-01-20 03:59:37.718655459 +0000 UTC / Created: 2021-01-20 03:32:28.045982181 +0000 UTC [Interface] Address = 10.6.6.1/24 ListenPort = 51820 PrivateKey = iLPeSYaKYERfyrOX/YcAam4AIIHCNEBXnqL2oRedAWQ= PreUp = echo WireGuard PreUp PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE PreDown = echo WireGuard PreDown PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE注意: 这里如果需要多个内网网段,记得都填写下去接下来点击 CLIENTS,然后点击 ADD NEW CLIENT 开始新增客户端配置:填写客户端配置信息:点击 SUBMIT,就会在 /etc/wireguard 目录下生成客户端的 json 配置文件:cat /etc/wireguard/f5fcc1e7-e03a-48bb-acd9-8d5214c6cb1f { "id": "f5fcc1e7-e03a-48bb-acd9-8d5214c6cb1f", "name": "test", "email": "yangchuansheng33@gmail.com", "enable": true, "ignorePersistentKeepalive": false, "presharedKey": "8QkkeXGt4D/lnLDA1jfJUhB3oiShhRWp/GC8GFQtgKs=", "allowedIPs": [ "10.6.6.0/24" ], "address": [ "10.6.6.2/32" ], "tags": [], "privateKey": "ODN2xN12p5lwcEuj20C4uZV9kJE9yHz4eAHB/4czPEM=", "publicKey": "k2Ut15aQn7+mNHqEd4bwdNx3WcvA4F7SPmETYuWdSjM=", "createdBy": "Unknown", "updatedBy": "", "created": "2021-01-20T05:19:16.659225991Z", "updated": "2021-01-20T05:19:16.659225991Z" }如果勾选了 “Enable client after creation”,还会将 peer 的配置加入 wg0.conf:cat /etc/wireguard/wg0.conf # Updated: 2021-01-20 03:59:37.718655459 +0000 UTC / Created: 2021-01-20 03:32:28.045982181 +0000 UTC [Interface] Address = 10.6.6.1/24 ListenPort = 51820 PrivateKey = iLPeSYaKYERfyrOX/YcAam4AIIHCNEBXnqL2oRedAWQ= PreUp = echo WireGuard PreUp PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE PreDown = echo WireGuard PreDown PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE # test / yangchuansheng33@gmail.com / Updated: 2021-01-20 05:19:16.659225991 +0000 UTC / Created: 2021-01-20 05:19:16.659225991 +0000 UTC [Peer] PublicKey = k2Ut15aQn7+mNHqEd4bwdNx3WcvA4F7SPmETYuWdSjM= PresharedKey = 8QkkeXGt4D/lnLDA1jfJUhB3oiShhRWp/GC8GFQtgKs= AllowedIPs = 10.6.6.2/32最后直接启动 wg-quick 服务就行了:systemctl start wg-quick@wg0如果你之前已经启动过该服务,现在只需要重启就行了:systemctl restart wg-quick@wg0每次更新配置后都要手动 reload 还是很麻烦的,我们可以通过 systemd 来监听配置文件的实时变化,一但配置文件有所改动,就立即触发 reload。方法也很简单,先创建一个 wg-gen-web.service 用来 reload:# /etc/systemd/system/wg-gen-web.service [Unit] Description=Restart WireGuard After=network.target [Service] Type=oneshot ExecStart=/usr/bin/systemctl reload wg-quick@wg0.service [Install] WantedBy=multi-user.target然后再创建一个同名的 wg-gen-web.path 用来监听文件变化:# /etc/systemd/system/wg-gen-web.path [Unit] Description=Watch /etc/wireguard for changes [Path] PathModified=/etc/wireguard [Install] WantedBy=multi-user.target设置开机自启:systemctl enable wg-gen-web.service wg-gen-web.path --now后面如果再到 Web 页面上更新配置信息,会立即触发 reload,不需要再自己手动 reload 了。查看接口信息:wg show wg0 interface: wg0 public key: dG5xPA7Q6X7ByeNl5pasI/8ZPhiTOsfsy0NUX4w2wmI= private key: (hidden) listening port: 51820 peer: k2Ut15aQn7+mNHqEd4bwdNx3WcvA4F7SPmETYuWdSjM= preshared key: (hidden) allowed ips: 10.6.6.2/32客户端建立连接Linux客户端# 安装wireguard apt install -y wireguard # 添加下面的配置到 /etc/sysctl.conf 后执行 sysctl -p 生效 net.ipv4.ip_forward = 1将上面服务器添加的客户端配置文件下载后 存放到 /etc/wireguard/并执行启动程序systemctl reload wg-quick@wg0启动后ping一下上面设置的局域网内网连接,如果通了,则组网成功!一些优化有时外网IP变化了,wg服务并未报错,但是也没有重连到中继服务器上,造成机器离线,这里新增一个watchdog服务进行连接保活监控# 新建watchdog服务 vim /lib/systemd/system/wg-watchdog.service # 添加下面代码到service中 [Unit] Description=Wireguard Watchdog After=network.target StartLimitIntervalSec=0 [Service] Type=simple Restart=always RestartSec=10 ExecStart=/etc/wireguard/watchdog.sh [Install] WantedBy=multi-user.target# 新建脚本 vim /etc/wireguard/watchdog.sh # 添加下面代码到watchdog.sh中 #!/bin/bash # TARGET_HOST 根据实际情况修改,这里是中继服务器的内网IP TARGET_HOST='10.0.1.1' # this is your wireguard network server IP UP=false while true do count=$(ping -c 1 $TARGET_HOST | grep rtt | wc -l) if [ $count -eq 0 ]; then echo "$(date)" "Target host" $TARGET_HOST "unreachable, reinitiating wireguard wg0 interface!" systemctl restart wg-quick@wg0 UP=false else if [ $UP = false ]; then echo "$(date)" "Wireguard connection reestablished!" fi UP=true fi sleep 10 done最后启动服务systemctl daemon-reload systemctl start wg-watchdog systemctl enable wg-watchdog脚本原理是每隔10秒ping一下中继服务器IP,如果ping不通则说明本机离线,检测到离线后就重启wg服务,这样就可以保证机器一直在线了。
2024年11月29日
4 阅读
0 评论
0 点赞
1
2
...
5