首页
留言板
统计
时间轴
友情链接
关于
Search
1
Linux-Ubuntu22.04安装使用Clash
101 阅读
2
使用Docker架设OpenVPN服务端实现异地组网
40 阅读
3
Typecho Joe 导航菜单目录以及搜索关键字回显主题优化版
37 阅读
4
使用Docker+PHP搭建苹果Maccms的影视站详细教程
28 阅读
5
Linux-Ubuntu22.04安装使用V2ray
19 阅读
默认分类
网站建设
科学上网
电子游戏
补丁插件
登录
Search
标签搜索
Typecho
个人博客
网站搭建
Docker
PHP
Linux
Ubuntu
Joe
网站美化
Clash
Maccms
影视站
Steam
单机游戏
补丁文件
游戏汉化
侠盗列车
罪恶都市
VPN
OpenVPN
Java小学生丶
累计撰写
10
篇文章
累计收到
26
条评论
首页
栏目
默认分类
网站建设
科学上网
电子游戏
补丁插件
页面
留言板
统计
时间轴
友情链接
关于
搜索到
10
篇与
张涵哲
的结果
2024-08-25
Typecho Joe 导航菜单目录以及搜索关键字回显主题优化版
Joe 是 Typecho 博客中一款开源免费且非常精美的主题,但是这款主题很早就停止维护了,有些功能作者并没有开发,并且在 Typecho 更新到 1.2.1 版本后还出现了一个小 BUGJoe 主题的知名度很高,所以在原作者停止维护后很多大佬发布过自己魔改的版本,魔改后的主题修复了 BUG 而且新增了很多的功能,但是大佬都是基于自己的想法魔改的,我个人觉得有些过于花里胡哨,所以我决定自己动手只做微调,保证 Joe 的原汁原味,本次主要调整了两点1. 修复(或者说适配)了 Joe 主题在 Typecho 1.2.1 版本中搜索关键字不回显的问题 2. 在文章详情页侧边栏添加了导航目录模块,如果文章中包含 H1 H2 H3 等标题元素时会生成导航目录主要就这两点修改其他地方基本没动,我将该主题命名为 Joe 优化版并在结尾给出下载地址,哪怕只有这两点您也觉得改动大,或介意使用第三方修改过的主题或其他原因也没关系,后面我会详细说明修改步骤可自行修改适配/修复搜索关键字回显问题截图:据猜测只有在使用 Typecho 1.2.1 以上版本才会出现这个问题,这并不是 BUG 只是主题并没有适配新版,看了一下源码后发现只是简单的取值问题而已,改几个字母就可以了,可以直接在服务器上改也可以在本地修改后上传至服务器找到主题文件夹所在位置,编辑joe/archive.php文件,大概在25行左右可以看到他取值为_keywords,把这个值改成archiveTitle即可解决问题侧边导航菜单目录该功能并非我原创,是照搬他人代码后做少量调整并整合进主题中,点击查看原作者文章这个功能对我诱惑很大,去年因为这个功能我从 Typecho 转到 Halo(国产 Java 编写的网站构建工具),并且有大佬把 Joe 主题移植过去实现了导航目录,但当我真正使用 Halo 后发现生态不是很完善,性能不强且有很多细小的 BUG,兜兜转转又回到了 Typecho,并最终实现了导航目录的效果添加侧边组件编辑joe/public/aside.php文件,这个文件包含了所有侧边栏组件,在博主栏和人生倒计时中间插入下面这段代码<?php if (($this->is('post') || $this->is('page')) : ?> <section class="joe_aside__item catalogue"> <div class="joe_aside__item-title"> <svg class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2084" width="18" height="18"><path d="M640 192H224c-17.7 0-32-14.3-32-32s14.3-32 32-32h416c17.7 0 32 14.3 32 32s-14.3 32-32 32zM960 544H224c-17.7 0-32-14.3-32-32s14.3-32 32-32h736c17.7 0 32 14.3 32 32s-14.3 32-32 32zM640 896H224c-17.7 0-32-14.3-32-32s14.3-32 32-32h416c17.7 0 32 14.3 32 32s-14.3 32-32 32zM96 192H64c-17.7 0-32-14.3-32-32s14.3-32 32-32h32c17.7 0 32 14.3 32 32s-14.3 32-32 32zM96 544H64c-17.7 0-32-14.3-32-32s14.3-32 32-32h32c17.7 0 32 14.3 32 32s-14.3 32-32 32zM96 896H64c-17.7 0-32-14.3-32-32s14.3-32 32-32h32c17.7 0 32 14.3 32 32s-14.3 32-32 32z" p-id="2085"></path></svg> <span class="text">导航目录</span> <span class="line"></span> </div> <div class="joe_aside__item-contain"> <ul class="catalogue-items"> </ul> </div> </section> <?php endif; ?>刷新页面后可以看到,导航目录的雏形已经出现了编写JS生成目录接下来修改joe\assets\js\joe.post_page.min.js文件,在文件开头的第一个大括号后面添加下面这段代码function get_catalogs(article_content) { let titles = []; let diffLevel = 0; let nodeNameSet = new Set(); const titleTag = ["H1", "H2", "H3", "H4"]; article_content.childNodes.forEach((e, index) => nodeNameSet.add(e.nodeName)); for (let ttIndex in titleTag) { let item = titleTag[ttIndex]; if (!nodeNameSet.has(item)) { diffLevel++ } else { break } } article_content.childNodes.forEach((e, index) => { const id = "header-" + index; if (titleTag.includes(e.nodeName)) { titles.push({ id: id, text: e.textContent, level: Number(e.nodeName.substring(1, 2) - diffLevel) }); e.setAttribute("id", id) } }); return titles } article_content = document.querySelector('.joe_detail__article'); if (article_content) { var catalog = get_catalogs(article_content); if (catalog.length == 0) { $('.catalogue').hide() } else { let asideArr = ['timelife', 'today', 'hot', 'newreply', 'weather', 'tags', 'flatterer']; asideArr.forEach(item => $('.joe_aside__item.' + item).remove()); let catalogue = ''; for (let i = 0; i < catalog.length; i++) { let node = '<li class="catalogue-item"><a href="javascript:;" id="to-' + catalog[i].id + '" to="' + catalog[i].id + '" title="' + catalog[i].text + '"><span class="dir_name">' + catalog[i].text + '</span></a>'; if (i == catalog.length - 1) { catalogue += node + '</li>' } else { if (catalog[i + 1].level == catalog[i].level) { catalogue += node + '</li>' } else if (catalog[i + 1].level > catalog[i].level) { catalogue += (catalog[i + 1].level > 1) ? node + '<ul class="level-' + catalog[i + 1].level + '">' : node + '</li>' } else { if (catalog[i + 1].level - catalog[i].level == -2) { catalogue += i > 1 ? node + '</li></ul></li></ul></li>' : node + '</li></ul></li>' } else { catalogue += i > 1 ? node + '</li></ul></li>' : node + '</li>' } } } } document.querySelector('.catalogue-items').innerHTML = catalogue; $('.catalogue-item > a').on('mouseenter', function() { $(this).parent().addClass('_active') }); $('.catalogue-item > a').on('mouseleave', function() { $(this).parent().removeClass('_active') }); $('.catalogue-item > a').on('click', function() { document.removeEventListener("scroll", autoActive); $('.catalogue-item').removeClass('active'); $(this).parent().addClass('active'); let aim = document.querySelector('#' + $(this).attr('to')); let aim_top = aim.offsetTop; let aim_h = aim.clientHeight; let above_h = document.querySelector('.joe_header__above').clientHeight; let below_h = document.querySelector('.joe_header__below').clientHeight; let offset = 0; let case1 = !document.querySelector('.joe_header__above').className.includes('active'); let case2 = document.getElementsByTagName("html")[0].scrollTop + above_h > aim_top; if (case1 && case2) { offset = above_h } window.scrollTo({ top: aim_top - offset - below_h - 10, behavior: 'smooth' }); setTimeout(() => { document.addEventListener("scroll", autoActive) }, 500) }); if (catalog.length) $('.catalogue-item').eq(0).addClass('active'); let autoActive = function() { let html_top = document.getElementsByTagName("html")[0].scrollTop; let contain = $(".joe_aside__item.catalogue .joe_aside__item-contain"); for (let i = 0; i < catalog.length; i++) { let offset = 0; let h_id = '#' + catalog[i].id; let h_offset = document.querySelector(h_id).offsetTop; let above_h = document.querySelector('.joe_header__above').clientHeight; let below_h = document.querySelector('.joe_header__below').clientHeight; if (!document.querySelector('.joe_header').className.includes('active')) offset = above_h; if (h_offset + below_h + offset + 10 >= html_top) { $('.catalogue-item').removeClass('active'); if (i > 0 && i < catalog.length - 1 && document.querySelector('#' + catalog[i].id).offsetTop > html_top + window.innerHeight * 0.2) { i-- } $('#to-' + catalog[i].id).parent().addClass('active'); break } } }; document.addEventListener("scroll", autoActive) } } else { $('.catalogue').hide() }刷新页面后可以看到,目录的基本结构已经出来了,为了保证导航目录的显示效果,在有目录的页面其他侧边组件会被移除编写CSS美化目录后面就是样式问题了,接下来修改joe\assets\css\joe.post.min.css在文件末尾添加下面这段CSS.joe_aside__item.catalogue{margin-bottom:15px;transition:top 0.35s;background:var(--background)} .joe_aside__item.catalogue .joe_aside__item-contain{padding:0;margin:0;margin-left:10px;max-height:500px;overflow-y:auto} .joe_aside__item.catalogue .joe_aside__item-contain::-webkit-scrollbar{width:3px} .joe_aside__item.catalogue .joe_aside__item-contain .catalogue-items{border-left:2px solid var(--classC);padding:10px 15px} .joe_aside__item.catalogue .joe_aside__item-contain .catalogue-items .catalogue-item{margin:0;padding:0;line-height:26px;font-size:15px} .joe_aside__item.catalogue .joe_aside__item-contain .catalogue-items .catalogue-item a{position:relative;display:block;line-height:26px;color:var(--main);transition:color 0.5s} .joe_aside__item.catalogue .joe_aside__item-contain .catalogue-items .catalogue-item a:hover{color:var(--theme)} .joe_aside__item.catalogue .joe_aside__item-contain .catalogue-items .catalogue-item._active>a,.joe_aside__item.catalogue .joe_aside__item-contain .catalogue-items .catalogue-item.active>a{color:var(--theme)} .joe_aside__item.catalogue .joe_aside__item-contain .catalogue-items .catalogue-item._active>a::before,.joe_aside__item.catalogue .joe_aside__item-contain .catalogue-items .catalogue-item.active>a::before{content:"";position:absolute;left:-17px;top:0;width:2px;height:26px;background-color:var(--theme);transition:height 0.35s} .joe_aside__item.catalogue .joe_aside__item-contain .catalogue-items .catalogue-item .level-2>.catalogue-item,.joe_aside__item.catalogue .joe_aside__item-contain .catalogue-items .catalogue-item .level-3 .catalogue-item{font-size:14px} .joe_aside__item.catalogue .joe_aside__item-contain .catalogue-items .catalogue-item .level-2 .catalogue-item._active>a::before,.joe_aside__item.catalogue .joe_aside__item-contain .catalogue-items .catalogue-item .level-2 .catalogue-item.active>a::before,.joe_aside__item.catalogue .joe_aside__item-contain .catalogue-items .catalogue-item .level-3 .catalogue-item._active>a::before,.joe_aside__item.catalogue .joe_aside__item-contain .catalogue-items .catalogue-item .level-3 .catalogue-item.active>a::before{left:-34px} .joe_aside__item.catalogue .joe_aside__item-contain .catalogue-items .catalogue-item .level-2 .catalogue-item .level-3 .catalogue-item,.joe_aside__item.catalogue .joe_aside__item-contain .catalogue-items .catalogue-item .level-3 .catalogue-item .level-3 .catalogue-item{font-size:14px} .joe_aside__item.catalogue .joe_aside__item-contain .catalogue-items .catalogue-item .level-2 .catalogue-item .level-3 .catalogue-item._active>a::before,.joe_aside__item.catalogue .joe_aside__item-contain .catalogue-items .catalogue-item .level-2 .catalogue-item .level-3 .catalogue-item.active>a::before,.joe_aside__item.catalogue .joe_aside__item-contain .catalogue-items .catalogue-item .level-3 .catalogue-item .level-3 .catalogue-item._active>a::before,.joe_aside__item.catalogue .joe_aside__item-contain .catalogue-items .catalogue-item .level-3 .catalogue-item .level-3 .catalogue-item.active>a::before{left:-51px} .joe_aside__item.catalogue .joe_aside__item-contain .catalogue-items .catalogue-item .level-3>.catalogue-item{font-size:14px} .joe_aside__item.catalogue .joe_aside__item-contain .catalogue-items .catalogue-item ul{padding-left:17px} .joe_aside__item.catalogue .joe_aside__item-contain .catalogue-items ul{display:block;list-style-type:disc} .joe_aside__item.catalogue .joe_aside__item-contain .catalogue-items .catalogue-item a span.dir_name{display:block;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}回过头来刷新页面,发现样式已经修改完成,原作者很给力CSS样式十分契合主题的风格资源下载可以下载我准备好的优化版主题包,保证目录名称一致无需任何操作,替换完成后刷新页面就生效了{cloud title="Joe主题优化版 by zhe" type="lz" url="https://hanzhe.lanzouw.com/inIaZ28d3dza" /}
2024年08月25日
37 阅读
0 评论
0 点赞
2024-01-23
调整 Halo2 Joe 主题友情链接页面样式
本人之前是使用 Typecho 建站的,后来接触到了 Halo,权衡后将网站内容都迁移到 Halo 建站上了,无论是 Typecho 还是 Halo 都有一款 Joe 主题,我个人非常喜欢这款主题,决定迁移到 Halo 也是因为 Joe 主题移植的很成功,相似度极高但还是有点地方不太一样,例如友情连接页面,Halo 中的友链的样式占位太大了,布局我也不是很喜欢,相比之下我还是觉得原版的比较漂亮于是我决定调整一下友链页面的样式,使其布局与原本保持一致,但样式仍然使用这种线条边框,同时保留两种样式的风格,经过一番调整后最终的效果如下所示:如果你跟我一样觉得Joe的友链页面看着不太好,并喜欢这种效果的话,点击左侧的【主题】,在Joe主题编辑的Tab栏中滑到最右侧,点击【自定义】,在【自定义CSS】中加入下面的代码:/*** 友情链接 ***/ /* 整体边距调整 */ .joe_detail__article ol, .joe_detail__article ul { padding-left: 15px; } /* 最外层标签 */ .evan-friends .contain { display: flex; align-items: flex-end; flex-direction: row-reverse; padding: 10px; } /* 图片外 */ .evan-friends .evan-f-left { width: auto; min-width: auto; } /* 图片内 */ .evan-friends .evan-f-left .f-avatar { width: 45px; height: 45px; } /* 内容外 */ .evan-friends .evan-f-right { display: flex; flex-direction: column; align-items: start; justify-content: space-around; padding-right: 10px; } /* 标题外 */ .evan-friends .title { justify-content: start; margin-top: 0; font-size: unset; min-width: unset; border-bottom: 1px solid; } /* 隐藏√符号 */ .evan-friends .title .icon { display: none !important; } /* 描述外 */ .joe_detail__friends-item .contain .content { height: 45px; } /* 描述内 */ .joe_detail__friends-item .contain .content .desc { -webkit-line-clamp: 2 !important; height: 45px; }
2024年01月23日
13 阅读
0 评论
0 点赞
2023-12-27
Linux-Ubuntu22.04安装使用V2ray
碎碎念2023年11月02日,Clash 作者删库并发文停止更新内核代码,Clash for Windows 这款软件我用了好久好久,界面简洁美观好上手,且各大机场都在推这个软件,订阅时基本都推荐优先使用 Clash,就这么没了还是挺难受的当初我刚开始接触外网,那时还没有迈入计算机行业的大门,使用的工具是轮子研发的无界浏览,当初他们四处发光盘发传单,我有幸在传单上接触到了这款软件,首次访问了 Google,虽然速度很慢,但是纯文字的网页还是可以访问,当时的我也没意识到这有什么用后来在网友那里买 SSR 链接(现在想想就是订阅里随便拿一条给我,好坑),使用了一段时间 Shadowsocks,SSTap,而后又购买 RackNerd 的 VPS 通过脚本自建节点,然后封机器(哭哭),而后用机场节点,前前后后换了不少家机场,最终使用 AmyTelecom + Clash 的组合直到今天虽然停止更新并不会影响使用,但是总是要未雨绸缪的,所以准备研究研究 V2ray 这款软件,当初接触这款软件时因为UI不是很漂亮一直不愿意用,但如今看来它好像是最稳定风评最好的了.....项目简介花点时间研究了一下,这里梳理一下研究成果,简单介绍一下几个 Github 仓库v2ray/v2ray-core,V2ray 内核程序最早在这个仓库上更新,不过根据 README 所说该仓库已停止维护v2fly/v2ray-core,V2ray 无人维护后一群人建立了 v2fly 社区,用于继续维护 V2ray 内核项目XTLS/Xray-core,该内核也出自 v2fly 之手,不过由于版权问题独立了出来,它在 V2ray 现有功能的基础上完善了许多其他功能,也就是说 V2ray 能干的 Xray 能干,V2ray 不能干的 Xray 也能干,而且 Xray 完全兼容 V2ray 属于升级版2dust/v2rayN,基于 V2ray 以及多种内核的PC客户端工具2dust/v2rayNG,基于 V2ray 内核的安卓客户端工具前三个是内核仓库,后面两个是分别是WIN和安卓的客户端仓库,当然还有其他平台,有需要自己在 Github 上找一找Linux使用代理既然在看 Linux 使用 V2ray 的教程,那么本文就假定你在 Windows 下已经会使用 V2rayN 客户端且拥有自己的订阅,上面提到了 Xray 完全兼容 V2ray 是后者的升级版,所以本文实际用到的是 Xray,文中提到的软件都可以在 Github 上下载到,下不到也没关系结尾会给出下载地址首先保证在 Windows 平台下代理工具可以正常使用并访问外网,访问 Github 下载 Linux 版本的XTLS/Xray-core程序备用我之前写过一篇 Linux-Ubuntu22.04安装使用Clash,在这篇文章中 Clash 订阅后会下载为配置文件,拿着配置文件在 Linux 上配合 Clash-UI 可以直接使用,但是 Xray 有一点不同,它并没有提供WEB管理页面,无法随心所欲的切换节点,所以这里导出单个节点作为演示使用打开 V2rayN 客户端选择任意节点,我这里以【香港01】节点为例,右键导出为hk01.json的客户端配置文件,如图所示现在连接 Linux 服务器,同之前一样我继续以 Ubuntu-22.04 为例,将Xray-linux-64.zip上传到/usr/local/xray目录下,使用unzip将文件解压,具体步骤如下# 递归创建目录 $ mkdir -p /usr/local/xray # 移动到指定目录 $ cd /usr/local/xray # 上传文件后解压,unzip命令没有的话请自行安装 $ unzip Xray-linux-64.zip # 建议将可执行文件链接到bin目录中方便调用 $ ln -s /usr/local/xray/xray /usr/local/bin/xray然后在当前目录下创建一个节点目录,我这里就叫 urls,将刚刚导出的配置文件上传到该目录中# 创建目录并进入目录 $ mkdir urls && cd urls # 配置文件上传完成后应该是这样 $ ll 总用量 4.0K -rw-r--r-- 1 root root 3.7K 12月 27 03:52 hk01.json接下来就指定配置文件启动 xray 即可$ xray -c hk01.json Xray 1.8.4 (Xray, Penetrates Everything.) Custom (go1.21.0 linux/amd64) A unified platform for anti-censorship. 2023/12/27 08:16:32 [Info] infra/conf/serial: Reading config: hk01.json 2023/12/27 08:16:32 [Warning] core: Xray 1.8.4 started启动完成!xray 默认提供两个代理端口,10808 为socket 代理,10809 为 http 代理,为了保持 xray 的运行状态,新开一个窗口测试代理效果$ curl --proxy http://127.0.0.1:10809 www.google.com <!doctype html><html itemscope="" itemtype="http://schema.org/WebPage".....可以看到,使用 curl 命令通过 HTTP 代理成功请求到 Google,到此教程完毕,已经明白代理如何使用,后面是使用 nohup 挂后台也好或者封装服务也好都随意了资源下载{cloud title="蓝奏网盘" type="lz" url="https://hanzhe.lanzouu.com/b0b15ecih" password="5lpj" /}
2023年12月27日
19 阅读
0 评论
0 点赞
2023-11-07
使用Docker架设OpenVPN服务端实现异地组网
需要一台有公网IP的服务器操作系统:Ubuntu 22.04 LTSDocker版本:Docker Engine - Community 24.0.6Docker镜像地址:https://hub.docker.com/r/kylemanna/openvpnGitHub开源地址:https://github.com/kylemanna/docker-openvpn服务端架设生成配置文件该Docker镜像对OpenVPN的一些操作进行了封装,这里初始化环境配置文件# 初始化配置文件到宿主机的/opt/docker/openvpn目录下(可自行修改) $ docker run -v /opt/docker/openvpn:/etc/openvpn --rm kylemanna/openvpn ovpn_genconfig -u udp://公网IP # 配置文件初始化完成,如有需要可以在这里修改配置文件便于后面生成证书 $ ls /opt/docker/openvpn/ ccd openvpn.conf ovpn_env.sh生成服务端证书OpenVPN中有证书的概念,服务端需要有证书才可以启动,否则会启动报错,这也是上面运行docker容器时为什么都加--rm的原因,这里初始化服务端证书# 根据配置文件初始化服务端证书,结尾nopass为可选项,表示无需密码生成证书,过程需要输入Common Name,如不想输入可以选择直接回车 $ docker run -v /opt/docker/openvpn:/etc/openvpn --rm -it kylemanna/openvpn ovpn_initpki nopass # 证书生成时间可能会比较长,会输出一堆.....+.......耐心等待即可,生成后可查看效果 $ ls /opt/docker/openvpn/ ccd openvpn.conf ovpn_env.sh pki启动OpenVPN服务启动OpenVPN服务就比较简单了,直接使用下面段命令启动容器即可,这里需要注意暴露端口使用的时udp协议,如果服务器有设置安全组记得要放行udp协议的1194端口# 启动OpenVPN服务 $ docker run --name openvpn -v /opt/docker/openvpn:/etc/openvpn -p 1194:1194/udp --cap-add=NET_ADMIN -d kylemanna/openvpn # 查看运行状态,检查OpenVPN是否启动成功 $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 85c5c0da569a kylemanna/openvpn "ovpn_run" 2 seconds ago Up 1 second 0.0.0.0:1194->1194/udp, :::1194->1194/udp openvpn # 查看目录,发现此时多了一个crl.pem,据说是证书吊销列表文件,我没用过不太清楚不过不用管放着就行 $ ls /opt/docker/openvpn ccd crl.pem openvpn.conf ovpn_env.sh pki客户端管理之前说过OpenVPN中有证书的概念,服务端必须有证书才可以启动,同样的客户端也需要有证书才能加入VPN网络,这里介绍Docker中封装的几个客户端管理命令,也可以点击这里直接看原文档命令解释docker exec -it openvpn easyrsa build-client-full [client] nopass生成无密码的客户端证书docker exec -it openvpn ovpn_getclient [client] > [client].ovpn构建带有嵌入证书的.ovpn文件docker exec -it openvpn ovpn_listclients查看客户端列表docker exec -it openvpn ovpn_revokeclient [client] remove吊销客户端证书使用案例# 生成一个客户端证书 cc $ docker exec -it openvpn easyrsa build-client-full cc nopass # 查看客户端列表,多了一个刚刚创建的cc $ docker exec -it openvpn ovpn_listclients name,begin,end,status cc,Nov 7 08:00:22 2023 GMT,Feb 9 08:00:22 2026 GMT,VALID # 构建带有嵌入式证书的.ovpn文件 $ docker exec -it openvpn ovpn_getclient cc > cc.ovpn # 查看配置文件目录,多个了cc.ovpn文件,这个就是客户端加入VPN网络用到的文件,里面嵌入了证书 $ ls /opt/docker/openvpn ccd cc.ovpn crl.pem openvpn.conf ovpn_env.sh pki # 正常来说每个客户端都应该有个独享的.ovpn证书,如果不想让某个人继续使用VPN就吊销它的证书,吊销过程需要手动输入yes $ docker exec -it openvpn ovpn_revokeclient cc remove # .ovpn文件需要手动删除,吊销后可以查看证书列表看看效果,这里我就不看了 $ rm /opt/docker/openvpn/cc.ovpn当服务端的配置项做出修改后如果没有生效,建议删除证书重启容器后生成新的证书在进行测试修改IP段通过Docker镜像生成的环境配置中,默认使用的IP段是192.168.255.x,如果不幸网络环境与这个IP段冲突就不好办了,针对这点可以通过修改配置文件来修改IP段,这里我选择将IP段修改为10.18.0.x# 编辑OpenVPN配置文件 # 将 server 192.168.255.0 255.255.255.0 改为 server 10.18.0.0 255.255.255.0 # 将 route 192.168.254.0 255.255.255.0 改为 route 10.18.1.0 255.255.255.0 $ vim /opt/docker/openvpn/openvpn.conf # 编辑环境配置文件 # 将 declare -x OVPN_ROUTES=([0]="192.168.254.0/24") 改为 declare -x OVPN_ROUTES=([0]="10.18.1.0/24") # 将 declare -x OVPN_SERVER=192.168.255.0/24 改为 declare -x OVPN_SERVER=10.18.0.0/24 $ vim /opt/docker/openvpn/ovpn_env.sh配置分割隧道当客户端加入VPN网络后全局都会走VPN网络,如果服务器带宽不高就会严重影响使用体验,个人强烈推荐配置分割隧道,只有访问VPN内部资源时走VPN网络,可点击访问原文档查看对此的描述# 禁用默认路由(-d),但仍使用NAT(-N)来保持网络地址转换启用 $ docker exec -it openvpn ovpn_genconfig -N -d # 使用ovpn_genconfig修改配置后目录下会对原配置进行备份生成.bak文件 $ ls /opt/docker/openvpn ccd crl.pem openvpn.conf openvpn.conf.1699346494.bak ovpn_env.sh ovpn_env.sh.1699346494.bak pki配置静态(固定)IP当客户端加入VPN网络后默认是从前往后分配IP地址的,如果有某台机器需要固定IP的话可以通过在ccd目录下添加配置文件来实现,可以点击这里查看原文档,例如之前创建的客户端,我希望使用cc证书登录的用户分配到的始终是静态IP# 在ccd目录下创建与客户端同名的文件 # 在客户端同名文件中添加: ifconfig-push 10.18.0.6 10.18.0.5 # 其中.0.6代表IP地址,.0.5代表网关地址 $ vim /opt/docker/openvpn/ccd/cc需要注意的是IP地址不能随便用,只能从以下范围中选取,具体详见这篇文章,否则可能会报错[ 1, 2] [ 5, 6] [ 9, 10] [ 13, 14] [ 17, 18] [ 21, 22] [ 25, 26] [ 29, 30] [ 33, 34] [ 37, 38] [ 41, 42] [ 45, 46] [ 49, 50] [ 53, 54] [ 57, 58] [ 61, 62] [ 65, 66] [ 69, 70] [ 73, 74] [ 77, 78] [ 81, 82] [ 85, 86] [ 89, 90] [ 93, 94] [ 97, 98] [101,102] [105,106] [109,110] [113,114] [117,118] [121,122] [125,126] [129,130] [133,134] [137,138] [141,142] [145,146] [149,150] [153,154] [157,158] [161,162] [165,166] [169,170] [173,174] [177,178] [181,182] [185,186] [189,190] [193,194] [197,198] [201,202] [205,206] [209,210] [213,214] [217,218] [221,222] [225,226] [229,230] [233,234] [237,238] [241,242] [245,246] [249,250] [253,254][1, 2]IP地址默认被服务端占用,所以IP地址是从[5, 6]开始分配的,个人建议按照OpenVPN的规范来使用,例如[21, 22]这一组,应该用后面的22作为IP地址,前面的21作为网关,如下所示# 假设这是ccd目录下某个配置文件 ifconfig-push 10.18.0.22 10.18.0.21其他配置项这里只记录几个我用到过的配置项,其余配置项日后我用到在随时补充# 允许客户端与客户端相连接 client-to-client # 允许一套证书或账户多人登录 duplicate-cnWindows加入VPN网络安装OpenVPN客户端软件,软件下载地址结尾会给出,安装过程中会提示安装虚拟网卡的弹窗,一定要点击同意,安装完成后打开OpenVPN的安装目录,将服务端构建的.ovpn文件下载并放入config目录下,然后双击运行OpenVPN软件,右下角右键建立连接即可Linux加入VPN网络这里使用Ubuntu作为演示机器,首先要保证服务器内有/dev/net/tun设备文件,可以执行ls /dev/net/tun命令查看,有打印结果就说明可以使用Proxmox构建的CT虚拟机的特殊处理如果使用Proxmox构建的CT虚拟机内没有该设备文件,需要检查宿主机是否有这个设备文件,如果宿主机有该设备文件但虚拟机内没有,可以编辑虚拟机的配置文件,具体如下所示# 在宿主机内编辑CT虚拟机的配置文件 # 在配置文件结尾追加 lxc.mount.entry: /dev/net/tun dev/net/tun none bind,optional,create=file # 然后回到CT虚拟机内重启系统,就可以看到这个设备文件了 $ vim /etc/pve/lxc/xxx.confUbuntu加入VPN网络在这之前需要先将.ovpn文件上传至ubuntu,假设文件上传至/root/client.ovpn# 安装OpenVPN $ apt install openvpn # 加入VPN网络 $ openvpn --config /root/client.ovpn标题1哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈标题2哈哈哈标题3哈哈哈标题1哈哈哈1标题2哈哈哈1标题3哈哈哈1标题1哈哈哈2标题2哈哈哈2标题3哈哈哈2标题1哈哈哈3标题2哈哈哈3标题3哈哈哈3标题1哈哈哈4标题2哈哈哈4标题3哈哈哈4标题1哈哈哈5标题2哈哈哈5标题3哈哈哈5资源下载{cloud title="蓝奏网盘" type="lz" url="https://hanzhe.lanzoue.com/i31Ux1e38zre" /}
2023年11月07日
40 阅读
3 评论
0 点赞
2023-10-06
2023最新Win10/Win11运行罪恶都市解决方案
原文地址(防爬):https://typecho.hanzhe.site/archives/6.html心血来潮想玩一玩很久之前的游戏《侠盗猎车手·罪恶都市》,游戏来源为Steam正版,下载安装运行后发现一直报错玩不了,当时报错忘记截图了只记得这串错误信息:Unhandled Exception:c0000005,网上找了好久资料四处收集补丁终于成功运行版本说明操作系统:Windows11专业版系统版本:22H2(OS 内部版本 22621.2361)Steam版本:1696019606Steam客户端生成版本日期:9月30日周六 上午2:45 UTC-08:00Steam网页生成版本日期:9月30日周六 上午4:25 UTC-08:00SteamAPI版本:SteamClient020罪恶都市AppID:12110生成版本ID:2745已安装内容更新于:2023年10月5日开启DirectPlay打开开始菜单输入【控制面板】并打开依次点击【程序】【启用或关闭Windows功能】勾选【旧版组件】下的【DirectPlay】并确定高级设置数据安全在【此电脑】右键,点击【高级系统设置】,在【性能设置】中修改为【指定程序之外】后添加gta-vc.exe,最后点击确定安装错误修复补丁打开下载好的【罪恶都市游戏错误补丁.zip】压缩文件,将文件内的所有内容替换到罪恶都市的安装目录汉化 可选项在上一个步骤将将补丁文件拖拽替换到罪恶读书的安装目录后,游戏应该就可以正常运行了,如果仍然报错可以重启电脑试下效果,游戏内语言默认为英文且不支持中文,这里额外提供了两个汉化包,选择任意一个使用即可【汉化包1.zip】内的文件直接双击安装到罪恶都市目录就可以实现汉化【汉化包2.zip】直接解压替换到罪恶都市目录就可以实现汉化资源下载地址链接失效请联系我补链接,如果你看不到链接可能该文章并非原文地址,请访问原文地址再找资源下载地址{cloud title="蓝奏网盘" type="lz" url="https://hanzhe.lanzoue.com/b0b0vklih" password="2bov"/}
2023年10月06日
15 阅读
0 评论
0 点赞
1
2