首页
留言板
统计
友链
关于
推荐
图片压缩
在线PO转MO
柠娜汉化站
搜索
1
PCL我的世界启动器设置第三方登录
44 阅读
2
Debian搭建wireguard组网
12 阅读
3
开源、轻量、易用的服务器监控,实战部署哪吒监控
4 阅读
4
哪吒监控配置nginx反向代理
3 阅读
5
Rust静态编译
3 阅读
服务器
技术
闲谈
MC
VPN
登录
搜索
标签搜索
debian
服务器
Linux
监控
雨云
wireguard
Android
MC
我的世界
硬盘
nginx
反向代理
哪吒
部署
Rust
静态编译
组网
局域网
联机
虚拟网卡
mohuangNPC
累计撰写
17
篇文章
累计收到
1
条评论
首页
栏目
服务器
技术
闲谈
MC
VPN
页面
留言板
统计
友链
关于
推荐
图片压缩
在线PO转MO
柠娜汉化站
搜索到
3
篇与
的结果
2025-12-09
虚拟网卡以及路由表
最近在捣鼓Linux虚拟网卡和路由表,发现了不少坑点,在这里统一整理一下。创建虚拟网卡ip tuntap add mode tun dev tun0给虚拟网卡设置IPip addr add 198.18.0.1/15 dev tun0设置路由设置路由这里有两种方法,第一种是直接给网卡设置,第二种通过路由表的方式直接设置ip route add x.x.x.x/x dev tun0 ip route show #删除规则 ip route del x.x.x.x/x dev tun0这会将所有发往x.x.x.x/x的流量全部重定向到tun0路由规则创建一个新的路由表nano /etc/iproute2/rt_tables #在文件末尾添加一行: 100 tun_table给路由表添加路由# 这个意思是将默认网关设置为咱们的自定义网卡 # 规则可以根据自己需要设置 ip route add default via 192.168.1.1 dev tun0 table tun_table # 又或者让10.0.0.0/24 走eth1 ip route add 10.0.0.0/24 dev eth1 table tun_table # 删除路由表中的规则 ip route del 10.0.0.0/24 dev eth1 table tun_table添加路由规则#这是说将所有流量都走tun_table 如果公网连接ssh很有可能断开 ip rule add from all lookup tun_table priority 1000 #这是说将所有流量源地址是192.168.1.0/24都走tun_table ip rule add from 192.168.1.0/24 lookup tun_table priority 1000 #这是说将所有流量目标地址是192.168.1.0/24都走tun_table ip rule add to 192.168.2.0/24 lookup tun_table priority 1000 #查看路由表 ip rule show #查看特定路由表 ip rule show table tun_table # 删除路由规则 ip rule del from all lookup tun_table注意这个priority 1000优先级一定要写,如果没有绝对的自信对路由比较熟悉的话,数字越小越靠前,先匹配到的就不会继续执行后面的路由了实战咱们设置一个路由规则,就是除了远程ssh的连接,其他流量全部走tun0#添加一个虚拟网卡 ip tuntap add mode tun dev tun0 #设置虚拟网卡的ip ip addr add 198.18.0.1/15 dev tun0 #启动 ip link set dev tun0 up #添加一个默认路由给路由表tun_table ip route add default via 198.18.0.1 dev tun0 table tun_table #写死设置我电脑的ip走默认的mian, 防止ssh连不上 ip rule add to x.x.x.x/32 lookup main priority 1000 ip rule add to y.y.y.y/32 lookup main priority 1001 #其余的流量全部走tun_table ip rule add to all lookup tun_table priority 2000其中x.x.x.x/32和 y.y.y.y/32就是自己电脑的公网ip,可以找个网站查询自己的公网IP。最好放到shell文件中统一执行。执行完后咱们随便curl一个地址比如curl www.baidu.com.发现已经访问不通过了(这就对了因为tun0没用),然后咱们执行:ip route get 8.8.8.8跟踪一下8.8.8.8流经的网卡,展示:已经成功设置了除了咱们连接ssh的流量,其他流量全部走tun0了!
2025年12月09日
3 阅读
0 评论
0 点赞
2025-12-08
Debian搭建wireguard组网
前言因为家里宽带没有公网IP也不支持ipv6,一直使用 frps 作为内网穿透的工具。后来发现了 wireguard,于是就将家里的服务器与具有公网IP的云服务器组网,实现内网穿透功能。这里主要介绍 wireguard 的安装以及组网方式,能够满足正常工作、学习所需了。公网服务器首先我们需要一台处于公网的服务器,这里我们使用雨云服务器,服务器配置不需要太高,2H2G即可雨云优惠注册地址 :https://www.rainyun.com/mohuang_雨云优惠码 :mohuang(使用优惠码注册可获得首月5折优惠券,还可在积分商城领取8折新购券,8折券可叠加官方的年付7折优惠,也就是5.6折)注册完账号后进到 雨云控制台,点击云产品→云服务器→立即购买: 这里我们选择湖北的,各位可根据自己的延迟选择,2H2G足够系统我们手动选择debian13然后点击下方的立即购买即可,购买后可在云产品>云服务器> 我的云服务器 中看到点击卡片中的管理可进入服务器详情页面:开始连接服务器下载安装并打开ssh客户端软件,ssh客户端软件推荐mobaxterm或xshell/xftp我这里用mobaxterm,打开软件后点击会话→SSH,在远程主机处输入你的服务器的IP地址,然后点击好的。mobaxterm下载地址 我这个mobaxterm是直接免安装的,解压到文件夹中直接运行MobaXterm_Personal_24.3.exe就可使用然后输入账号并按回车,账号一般默认为root,接着输入密码并按回车确定,输入密码时不会显示出来。温馨提示:在SSH终端中按住鼠标左键选择文字,然后松开鼠标,再在空白处单击一下,这样就把选中的文字复制了;在SSH终端单击右键即为粘贴。开启服务器转发在上一步我们购买了服务器,使用mobaxterm进入服务器之后首先开启IPV4流量转发功能(中转的公网IP服务器必须配置)echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf sysctl -p更新软件包apt update安装Wireguard这里咱们使用Debian系统,Debian支持从它的仓库直接下载安装apt install -y wireguard编写配置文件这里各位可以自行查看官方文档来自定义编写,也可以使用我自己编写的配置文件生成工具。这里使用配置文件生成工具。执行命令下载工具:curl -L https://gitee.com/edrik_1/typecho/raw/master/VpnUtil -o /usr/local/bin/vpnutil && chmod +x /usr/local/bin/vpnutil && mkdir /etc/vpnutil生成服务端配置文件我们已经安装好了wireguard以及配置文件生成工具,现在我们要初始化一下wireguard以及vpnutil的配置文件,执行命令:# 创建并进入一个文件夹用来存放配置 mkdir vpnconf && cd vpnconf # 执行初始化命令 vpnutil gen serve server 111.122.59.214 -a 172.32.100.1/24 -p 51820命令参数解析vpnutil gen serve 是基础命令server是生成配置文件的前缀名字,例如server.conf,server.key,这里最好不要变,就是server即可118.193.35.26 是自己服务器的公网ip-a 172.32.100.1/24 是设置wireguard客户端的虚拟ip范围-p 51820 是设置wireguard服务端的监听端口执行完毕后,当前文件夹会出现三个文件前缀名字.conf wireguard服务端的配置文件前缀名字_private.key wireguard服务端的私钥前缀名字_public.key wireguard服务端的公钥根据咱们当前执行的命令会出现,server.conf、server_private.key、server_public.key应用配置文件接下来咱们移动"前缀名字.conf"文件到wireguard的配置文件目录使其生效cp server.conf /etc/wireguard/ && wg-quick up server查看wireguard状态# 查看wg的状态 wg show这代表已经正常运行生成客户端配置接下来使用自动工具生成客户端配置.执行命令:vpnutil gen client client01命令参数解析vpnutil gen client 是基础命令client01 是要生成客户端配置文件的前缀,可以自定义起名字,但最好不要包含特殊字符执行完毕后,当前文件夹会出现三个文件前缀名字.conf wireguard客户端的配置文件前缀名字_private.key wireguard客户端的私钥前缀名字_public.key wireguard客户端的公钥这里要注意,服务端的配置文件名字一定要是server.conf,正常按照教程走的话是不会有问题的,如果想使用自动工具生成客户端配置,但服务端配置是自己手写的小伙伴,那就把配置文件改下名字,客户端配置文件名字随意命名即可防火墙放行我们已经运行了服务端,并设置了监听端口51820,我们开始继续部署客户端组网之前,需要在雨云后台开启服务器的防火墙放强行51820端口进入服务器防火墙新建防火墙规则点击新建防火墙规则,输入端口,协议是UDP, 点击确定新增成功新增成功,我们可以开始进行下一步了。客户端组网这里咱们演示Debian和Window下如何组网Debian组网新开一个虚拟机或者测试服务器按照上面的教程先安装一遍wireguard。然后我们在wireguard的服务端服务器上使用自动配置工具生成一个配置文件。例如:vpnutil gen client debian此时当前文件夹下会生成debian.conf,debian_private.key,debian_public.key。然后我们将debian.conf复制到虚拟机或测试服务器的/etc/wireguard目录下。执行命令:# wg启动命令,其中debian就是配置文件名字,配置文件叫什么名字,这里就填什么名字,注意不能填后缀.conf wg-quick up debian # wg关闭命令 wg-quick down debian然后我们客户端执行命令查看状态:wg show已经成功。我们回服务端同样执行wg show查看可以看到客户端连进来了Window组网同样我们去wireguard服务端执行命令生成配置文件vpnutil gen client windowwindow上安装wireguard的window版本,下载地址 安装后打开如下:我们将服务端生成的配置文件下载下来,然后点击客户端的新建隧道或从文件导入,选择window.conf。然后点击确定,如下:我们点击连接。如图连接成功。我们回到服务端,执行wg show,如图,window也已经加入到组网了完结至此,wireguard组网教程结束坑点如果window无法连接到,可以尝试关闭Window防火墙linux等系统无法连接的话,也检查一下Linux防火墙
2025年12月08日
12 阅读
0 评论
0 点赞
2025-12-08
Rust静态编译
最近在开发的过程中,遇到了一些编译问题,有跨平台编译的问题,有动态编译不兼容的问题。经过一番折腾,最后完美解决了,故记录一下这些问题的解决方案。首先要普及一些基础概念:Rust 编译的时候会用到两种链接方式:静态链接和动态链接。Rust 一般用静态链接,就是把所有需要的东西都打包到一个文件里,这样程序就能独立运行了。但是对于一些系统自带的库(比如 Linux 的 libc),Rust 还是会用动态链接。这样做有个小问题:如果你的程序用了动态链接,那它运行的时候就需要系统上有对应的库文件,而且版本还得对得上。要是系统上没有这个库,或者版本不对,程序就跑不起来。别着急,接下来我们会介绍几个解决办法,告诉你哪些方法更好用。问题1在本地 linux 环境中,编译的 rust 程序上传部署到 linux 服务器后,运行出错可能会看到类似version 'GLIBC_2.33' not found (required by /path/to/your/program)的提示。 这个提示的意思就是编译的时候依赖了服务器上版本比较低或是不兼容的glibc库,从而导致了在服务器上找不到正确的glibc,于是就出错了。解决方法也并不难:升级服务器上的 glibc(风险比较高,不推荐)使用静态编译# 查看当前存在的工具链 rustc --print target-list # 先安装 musl 工具链 rustup target add x86_64-unknown-linux-musl # 编译时指定 musl cargo build --release --target x86_64-unknown-linux-musl验证是否成功编译后用这个命令检查依赖:ldd 你的程序名如果输出显示 not a dynamic executable,恭喜你!这程序已经是完全体了,不依赖系统库了!然而,静态编译也带来了一个问题:文件体积可能会显著增加。原本小巧的程序(例如 5MB)在静态编译后可能会膨胀到 20MB 甚至更大,尤其是当使用了复杂库(如 OpenSSL)时,这种现象更为明显。别担心,这里有一些方法可以帮助你“瘦身”:第一:移除调试符号调试符号文件包含代码定位信息,虽然方便调试但显著增加体积。建议正式发布时移除。操作方式:手动移除(通用方法)strip 目标程序名称自动移除(Rust专属)在 Cargo.toml 添加:[profile.release] strip = true# 需 Rust 1.59+ 版本效果:通常可减少 30%-50% 体积第二:编译优化配置通过编译器优化策略实现深度瘦身配置方案(Cargo.toml):[profile.release] opt-level = "z"# 最高级别体积优化 lto = true# 全局链接优化(显著增加编译时间) codegen-units = 1# 提升优化密度 panic = "abort"# 禁用栈展开信息(注意:影响错误处理)注意事项:建议搭配 RUSTFLAGS="-C target-cpu=native" 提升性能 编译时间可能延长 2-3 倍第三:二进制压缩(进阶方案)使用 UPX 进行可执行文件压缩操作流程:1.安装工具# Debian/Ubuntu apt install upx # macOS brew install upx # CentOS/RHEL yum install upx 2.执行压缩 upx --best 目标程序名称风险提示:可能触发杀毒软件误报首次启动增加 100-200ms 解压时间不推荐用于高频调用的命令行工具问题2在rust中使用openssl依赖的时候,会有一大堆的错误场景找不到 OpenSSL 库或头文件错误信息示例:“openssl/ssl.h: No such file or directory” “Could not find OpenSSL installation”原因:系统上未安装 OpenSSL 的开发包或头文件;或者环境变量(如 OPENSSL_DIR、OPENSSL_LIB_DIR)未正确配置,导致构建脚本无法定位到 OpenSSL 的位置。版本不兼容问题错误信息示例: 构建失败时提示 OpenSSL 版本不匹配,或者找不到期望的符号(如undefined reference to 'CRYPTO_num_locks'原因: 系统中安装的 OpenSSL 版本(例如 1.1 与 3.0)与 openssl-sys 或其它依赖库要求的版本不一致,导致编译或链接时符号不匹配。对于上面的问题,解决方法也很简单,如果能替换成rustls的话,就优先替换成rustls,因为有测试表明,rustls 的性能表现比openssl更加优越,一般的依赖都可以设置一些feature来改用rustls,如:tokio-tungstenite = { version = "0.25.0", features = ["rustls"] }但是如果实在不能更换的话,只能通过编译源码的方式来实现静态编译,可以通过依赖的vendored的features将第三方依赖的代码直接包含在项目代码仓库中,如libsqlite3-sys = { version = "0.30.1", features = ["bundled-sqlcipher-vendored-openssl"] }这会启用openssl-sys的vendored特性,自动下载并编译OpenSSL源码。安装构建工具 确保系统已安装编译OpenSSL所需的工具:Linux (Ubuntu/Debian):apt-get update apt-get install build-essential perl pkg-configmacOS:brew install make perlWindows:安装Strawberry Perl(确保perl在PATH中)。安装NASM并添加到PATH。安装完perl,就可以成功的编译并运行了。常见问题解决编译错误(可能是因为缺少工具,如make、perl)。Windows环境问题:确保Perl和NASM路径正确,且无空格或特殊字符。最后在 Rust 的跨平台开发中,动态链接的兼容性问题与第三方库的依赖管理是常见的挑战。通过本文的实践,我们可以总结出以下关键经验:1.静态编译为王优先使用 musl 目标进行全静态编译,消除对系统库(如 glibc)的依赖。虽然这会增加应用的体积,但是可以通过strip调试符号、优化编译配置(如 opt-level = "z")或者用 UPX 来减少体积膨胀的影响。2.依赖库的灵活替换优先选择纯 Rust 实现的库(如 rustls 替代 openssl),避免 C 绑定带来的跨平台问题。大多数依赖库已经支持通过 features 切换具体的实现(例如 tokio-tungstenite 的 rustls 特性)。 对于没得替换的 C 库(如 OpenSSL),建议启用 vendored 特性(如 openssl-sys = { features = ["vendored"] })实现源码级静态编译,避免依赖系统版本。注:本文借鉴“云梦量化科技Rust开发工程师Rust炼金士”的文章原文地址: https://zhuanlan.zhihu.com/p/25127947378
2025年12月08日
3 阅读
0 评论
0 点赞
Warning
: file_put_contents(/var/www/html/rss.xml): failed to open stream: Permission denied in
/var/www/html/usr/plugins/CustomRSS/Plugin.php
on line
149