首页
留言
导航
统计
Search
1
追番推荐!免费看动漫的网站 - 支持在线观看和磁力下载
777 阅读
2
PVE自动启动 虚拟机 | 容器 顺序设置及参数说明
472 阅读
3
一条命令,永久激活!Office 2024!
444 阅读
4
优选 Cloudflare 官方 / 中转 IP
324 阅读
5
[Windows] MicroSoft Office LTSC Professional Plus 2024 官方安装部署工具
323 阅读
默认分类
服务器
宝塔
VPS
Docker
OpenWRT
Nginx
群晖
前端编程
Vue
React
Angular
NodeJS
uni-app
后端编程
Java
Python
SpringBoot
SpringCloud
流程引擎
检索引擎
Linux
CentOS
Ubuntu
Debian
数据库
Redis
MySQL
Oracle
虚拟机
VMware
VirtualBox
PVE
Hyper-V
计算机
网络技术
网站源码
主题模板
登录
Search
标签搜索
Java
小程序
Redis
SpringBoot
docker
Typecho
Cloudflare
虚拟机
WordPress
uni-app
CentOS
docker部署
Vue
Java类库
群晖
Linux命令
防火墙配置
Mysql
脚本
计算机网络
流年微醺
累计撰写
255
篇文章
累计收到
8
条评论
首页
栏目
默认分类
服务器
宝塔
VPS
Docker
OpenWRT
Nginx
群晖
前端编程
Vue
React
Angular
NodeJS
uni-app
后端编程
Java
Python
SpringBoot
SpringCloud
流程引擎
检索引擎
Linux
CentOS
Ubuntu
Debian
数据库
Redis
MySQL
Oracle
虚拟机
VMware
VirtualBox
PVE
Hyper-V
计算机
网络技术
网站源码
主题模板
页面
留言
导航
统计
搜索到
30
篇与
的结果
2025-07-05
用虚拟IP扩容服务器端口池
最近遇到一个棘手的问题:服务器的 WebSocket 服务在高并发场景下,客户端连接数达到一万多时,服务器的端口资源被耗尽了。导致后面的任何请求都没响应。通过 netstat 查看连接情况,发现所有连接的本地端口都是从 32768 开始的,即使我已经将系统的端口范围设置为 1024-65535[root@server ~]# cat /proc/sys/net/ipv4/ip_local_port_range 1024 65535但实际分配的端口还是从32768开始,导致高位端口很快被耗尽,新连接无法建立。问题分析经过一番调研,发现这个问题在 Linux 系统中很常见。虽然设置了 ip_local_port_range 为 1024-65535,但实际上如下:glibc的默认行为:很多Linux发行版的glibc硬编码了临时端口分配的起始值为32768内核版本限制:老版本内核(如3.10)没有 ip_unprivileged_port_start 参数历史遗留问题:这是Linux系统的"正常"行为,不是配置错误我的服务器环境: 内核:3.10.0-1127.19.1.el7.x86_64glibc:2.17系统:CentOS 7.6解决方案探索方案一:升级系统(不推荐)升级glibc和内核到新版本可以支持更灵活的端口分配,但在生产环境中风险极高,容易导致系统崩溃。方案二:虚拟IP扩容(推荐)通过在同一台服务器上添加多个虚拟IP,每个IP都拥有独立的端口池,从而成倍扩容端口资源。虚拟IP方案实施第一步:查看网络环境首先确认服务器的网卡和IP配置:[root@server ~]# ip addr show eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:16:3e:1f:ee:09 brd ff:ff:ff:ff:ff:ff inet 1.2.3.17/20 brd 11.22.33.255 scope global dynamic eth0可以看到主IP是 1.2.3.17/20 ,子网掩码是 /20。第二步:添加虚拟IP根据主IP的网段,添加几个虚拟IP:ip addr add 1.2.3.100/20 dev eth0 ip addr add 1.2.3.101/20 dev eth0 ip addr add 1.2.3.102/20 dev eth0这里的ip后三位可以随便写。ip个数最好是100个以内,多了会影响性能。验证添加成功:ip addr show eth0显示出刚才添加的ip就是没问题的第三步:配置Nginx负载均衡修改Nginx配置,将流量分发到不同的虚拟IP:upstream websocket_backend { server 1.2.3.100:38088; server 1.2.3.101:38088; server 1.2.3.102:38088; } server { listen 80; server_name xx.com; location /请求上下文 { proxy_pass http://websocket_backend/请求上下文; proxy_redirect default; proxy_pass_header Server; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Scheme $scheme; } }第四步:重启服务重启 WebSocket服务端 和 Nginx ,让配置生效:nginx -t nginx -s reload效果验证查看连接分布使用 ss 命令查看连接是否被正确分发到不同虚拟IP:ss -tnp | grep 38088输出显示连接确实被分发到了不同IP:CLOSE-WAIT 1 0 1.2.3.100:38088 169.24.13.2:36294 CLOSE-WAIT 1 0 1.2.3.101:38088 169.24.13.2:57430 CLOSE-WAIT 1 0 1.2.3.102:38088 169.24.13.2:37558这里的169.24.13.2不用管,这是我的nginx用的docker镜像的原因端口资源扩容效果之前:所有连接都占用 1.2.3.17 的端口池(32768~65535)现在:连接分散到3个虚拟IP,每个IP都有独立的端口池效果:端口资源扩容3倍,极大缓解端口耗尽问题注意事项1. 子网掩码的确定添加虚拟IP时,子网掩码必须和主IP一致。查看方法很简单:ip addr show eth0看输出中的 inet 1.2.3.17/20,直接使用 /20 即可。2. 虚拟IP的持久化临时添加的虚拟IP重启后会失效,需要写入启动脚本:# 编辑 /etc/rc.local ip addr add 1.2.3.100/20 dev eth0 ip addr add 1.2.3.101/20 dev eth0 ip addr add 1.2.3.102/20 dev eth0 # 赋予执行权限 chmod +x /etc/rc.d/rc.local3. 网络架构要求Nginx 和 WebSocket服务端 必须在同一台服务器虚拟IP必须在同一网段内,不能和其他机器冲突如果是云服务器,可能需要先在控制台申请辅助私网IP总结通过 虚拟IP + Nginx 负载均衡的方案,成功将端口资源扩容了 3倍,有效解决了高并发 WebSocket 场景下的端口耗尽问题。这个方案的优势:实施简单:只需添加虚拟IP和配置Nginx风险较低:不需要升级系统内核效果显著:端口资源成倍扩容扩展性好:可以根据需要继续添加虚拟IP对于高并发WebSocket、短连接等场景,这是一个非常实用的解决方案。
2025年07月05日
3 阅读
0 评论
0 点赞
2025-01-23
首发!!移动新光猫九联UNG853H破解超级密码
论和移动师傅搞好关系有多么重要!最近在升级捣鼓家里的WiFi,但因为单线复用的问题需要超级密码登录光猫,所以不得不问师傅要超级密码,但是因为所有运营商都启用了随机密码政策,所以就问师傅要,还好跟师傅混的关系很好,每一次问超级密码都会发给我,但我想着每一次都麻烦师傅不太好,所以就有了以下文章:我的光猫是最新版的un853h,因为让师傅换了小个一点的,好让弱电箱清净一些,已经麻烦师傅帮我换了三次光猫了😂还好师傅每次都不觉得麻烦,有求必应,有次7点多了还来换但是因为是新版光猫,所以就在网上找了很多教程碰碰撞撞才总结方法,理论上是支持九联所有型号的光猫的1、首先查看光猫的普通密码,可以在光猫后面看到,再打开光猫管理页面登录登录进去后再输入:http://192.168.1.1/webcmcc/telnet.html然后看到 open telnet success 就成功打开 telnet 了2、打开电脑的 telnet,如何打开电脑 telnet 可以在网上查,这里我就不再啰嗦3、打开 cmd,然后输入 telnet 192.168.1.1提示输入账号密码,账号密码就是光猫背后的普通的账号密码,然后进入到命令行界面,显示,然后再输入cd /返回根目录,再输入 ls 查看当前目录下文件夹,看到 config,输入 cd /config 进入 config 文件夹再输入 ls 查看,看到 workb 文件夹,再输入 cd workb 文件夹,或者像我图中一样一步到位,直接 cd /config/workb,进入 workb 文件夹然后再输入 ls,查看文件,看到有个 backup_lastgood.xml,输入 vi backup_lastgood.xml,进入文件查看此时直接在键盘输入 /CMCCAdmin 回车,直接跳转到CMCCAdmin 这一行,下面第一个就是密码了到此就成功了!!!
2025年01月23日
151 阅读
0 评论
0 点赞
2024-11-05
将云服务器IP绑定到本地服务器或OpenWrt,彻底告别家宽没有公网IP的痛!
通过VPN将云服务器IP绑定到本地服务器或OpenWrt之前看到有某某某云服务器商有售卖家庭宽带IP购买的服务,宣称是可以给家庭宽带增加一条静态IP,出于好奇,我购买了一个月进行尝试。在客服使用 SSH 连接将 IP 链接到我本地的Linux服务器后,我通过查询系统进程和网络接口的方式发现,其实所谓增加静态 IP 不过是使用 WireGuard 将公网IP绑定到设备上,于是我产生了一个大胆奇妙的想法,能不能将自己手边吃灰的云服务器IP绑定到本地,甚至绑定到OpenWrt上,经过一番摸索和与GPT的深入交流,成功将云服务器IP绑定到了本地服务器,这种绑定和frp有所不同,所有访问到云服务器IP的请求,都将转发到本地服务器,甚至包括Ping请求。正如上图所示,我使用的是腾讯云北京的服务器,正常在北京节点对其ip进行ping命令,得到的延迟应该在5ms以内,但是现在ping的延迟增加了从腾讯云北京到我家里的时间。并且现在通过这台服务器的IP可以直接访问到我家里的设备。下面是详细的部署流程。公网服务器部署WireGuard安装WireGuardsudo apt update sudo apt install wireguard生成秘钥对# 生成公网服务器的密钥对 wg genkey | tee server_privatekey | wg pubkey > server_publickey # 生成无公网服务器的密钥对 wg genkey | tee client_privatekey | wg pubkey > client_publickey密钥对文件保存在当前命令行路径下的 server_privatekey 和 server_publickey 文件,以及 client_privatekey 和 client_publickey,其中 server_privatekey 和 server_publickey 为公网服务器的私钥与公钥,client_privatekey 和 client_publickey 为无公网服务器的私钥与公钥,这两对秘钥需要在妥善保存后删除。下文中将以以下代称称呼代称秘钥文件名称<公网服务器的私钥>server_privatekey<公网服务器的公钥>server_publickey<无公网服务器的私钥>client_privatekey<无公网服务器的公钥>client_publickey配置WireGuard创建并编辑配置文件 /etc/wireguard/wg0.confsudo vi /etc/wireguard/wg0.conf添加以下内容[Interface] Address = 10.1.0.1/24 PrivateKey = <公网服务器的私钥> ListenPort = 51820 [Peer] PublicKey = <无公网服务器的公钥> AllowedIPs = 10.1.0.2/32将 <公网服务器的私钥> 替换为你生成的 privatekey,将 <无公网服务器的公钥> 替换为无公网服务器生成的 publickey。启动WireGuardsudo wg-quick up wg0无公网服务器部署 WireGuard这里先以普通Ubuntu服务器为例,如果想在OpenWrt上部署,本节主要查看配置WireGuard小节即可。配置WireGuard创建并编辑配置文件 /etc/wireguard/wg0.confsudo vi /etc/wireguard/wg0.conf添加以下内容[Interface] Address = 10.1.0.2/24 PrivateKey = <无公网服务器的私钥> [Peer] PublicKey = <公网服务器的公钥> Endpoint = <公网服务器的IP>:51820 AllowedIPs = 0.0.0.0/0 PersistentKeepalive = 25或者填写[Interface] Address = 10.1.0.2/24 PrivateKey = <无公网服务器的私钥> [Peer] PublicKey = <公网服务器的公钥> Endpoint = <公网服务器的IP>:51820 AllowedIPs = 10.1.0.1/32 PersistentKeepalive = 25启动 WireGuardsudo wg-quick up wg0配置端口转发本节内所有操作均在公网服务器上执行,并建议彻底关闭云服务器上的网络防火墙。配置IP转发在公网服务器上启用 IP 转发sudo sysctl -w net.ipv4.ip_forward=1如果需要永久生效,需编辑 /etc/sysctl.conf 并取消 net.ipv4.ip_forward=1 的注释或添加 net.ipv4.ip_forward=1。配置防火墙规则在公网服务器上使用 iptables 将流量转发到无公网服务器sudo iptables -t nat -I PREROUTING -p udp --dport 51820 -j ACCEPT sudo iptables -t nat -A PREROUTING -d <公网服务器的IP> -j DNAT --to-destination 10.1.0.2 sudo iptables -t nat -A POSTROUTING -j MASQUERADE注意!!! 这里 <云服务器的IP> 有很多大厂的服务器,使用 ip addr 命令查询到的网卡绑定IP与实际公网IP不同,这里一定要使用 网卡实际绑定的 ip 而不是 公网IP 。为了确保规则在重启后仍然有效,保存规则sudo apt install iptables-persistent sudo netfilter-persistent save验证配置1、确认 WireGuard 隧道连接已建立sudo wg show2、通过公网 IP 测试连接,确保请求能够转发到无公网服务器。注意 确保公网服务器和无公网服务器的防火墙配置正确,允许必要的端口和协议通过。OpenWrt部署WireGuard1、首先确保 OpenWrt 上安装以下插件2、插件安装完成后,必须重启路由器,否则无法再接口处查看到 WireGuard 接口。3、网络-> 接口-> 添加新接口 输入名称 wg0 和选择 WireGuard VPN协议4、编辑接口-> 导入配置,粘贴无公网服务器部署 WireGuard 一节中配置 WireGuard 中的配置文件即可。5、将新建接口加入到 wan 防火墙区域6、完成后即可把服务器 IP 当做 OpenWrt 的一个 wan 口接入使用,相当于给你的宽带绑定了一条 公网IP 。如果遇到绑定 OpenWrt 后无效的情况,将 AllowedIPs 从 0.0.0.0/0 修改为公网服务器 ip 即可,例如:10.1.0.1/32 。
2024年11月05日
90 阅读
0 评论
0 点赞
2024-09-26
Linux ubuntu debian ufw (防火墙) 使用指南
前言UFW 是 “简单防火墙” 的缩写,是更复杂的 iptables 实用程序的前端。它旨在使管理防火墙变得像设置端口打开和关闭以及调节允许通过的流量一样简单。ufw 可以在 Debian 和 Ubuntu 系统中使用,是默认的防火墙配置工具,默认 ufw 是禁用状态,支持 IPv4 和 IPv6。国内的服务器,一般都会有安全组,如果有安全组,则无须使用 ufw国外的服务器,一般端口全都是放行的,所以有必要使用 ufw如果是 CentOS 系统,可以使用 firewalld,强烈建议弃用 CentOS 系统,官方早已经不维护了,会有很多漏洞无法修复。推荐系统:Debian > Ubuntu >>>>> CentOS提示:以下所有命令默认在 root 环境下运行,如果是非 root 环境,则命令需要加前缀:sudoufw 使用更新软件包apt update apt upgrade -y安装# 安装 apt-get install ufw # 帮助命令 ufw --help推荐配置如果要开启防火墙的话,建议先拒绝所有入站流量,然后逐一打开需要的端口。# 默认阻止入站(不会立即切断你的 SSH 连接,因为防火墙尚未启用) ufw default deny incoming # 默认允许出站 ufw default allow outgoing # 拒绝所有访问(如果配置了入站/出战,这个可以不配置) ufw default deny # 根据需求开启端口 ufw allow 22⚠注意确保在修改 SSH 端口后,不要关闭当前 SSH 窗口,尝试使用新的端口进行 SSH 登录,以确保没有防火墙或其他网络配置问题,以免被自己锁定出服务器。启用禁用# 启用 ufw enable # 查看状态 ufw status verbose # 禁用 ufw disable # 防火墙规则存放位置 # /etc/ufw 中的规则文件(后缀名:.rules)允许拒绝allow 例子:# 接受 97 端口的 tcp/udp 流量 ufw allow 97 # 接受 97 端口的 tcp/udp 流量,并添加备注 ufw allow 97 comment 'open 97 port' # 接受 97 端口的 tcp 流量 ufw allow 97/tcp # 接受 97 端口的 udp 流量 ufw allow 97/udp # 通过服务名来处理, 会从 /etc/services 中查找端口 ufw allow ssh # 允许特定IP访问 ufw allow from 1.2.3.4 # 允许特定子网访问 ufw allow from 1.2.3.4/97 # 允许特定IP使用任何协议访问22端口 ufw allow from 1.2.3.4 to any port 22 # 允许特定IP使用任何TCP协议访问22端口 ufw allow from 1.2.3.4 to any port 22 proto tcpdeny 例子:# 拒绝 97 端口的 tcp/udp 流量 ufw deny 97 # 拒绝 97 端口的 tcp 流量 ufw deny 97/tcp # 拒绝 97 端口的 udp 流量 ufw deny 97/udp # 通过服务名来处理, 会从 /etc/services 中查找端口 ufw deny ssh # 拒绝特定IP访问 ufw deny from 1.2.3.4 # 同allow ufw deny from 1.2.3.4 to any port 22 ufw deny from 1.2.3.4 to any port 22 ufw allow from 1.2.3.4/97 to any port 22 proto tcp删除# 要删除规则,只需在原始规则前加上删除,删除 80 端口的 tcp 配置 ufw delete deny 80/tcp # 显示规则的顺序和ID号 ufw status numbered # 删除编号规则(删除规则,规则将向上移动以填充列表) ufw delete 1日志# 启用日志 ufw logging on # 禁用日志 ufw logging off
2024年09月26日
10 阅读
0 评论
0 点赞
2024-09-26
Linux ufw(防火墙)使用指南,解决ufw和docker冲突问题,保护你的服务器/VPS
前言如果你在服务端使用 Docker 映射了某个宿主机端口,然后公网访问这个端口的话,你会发现仍然可以访问,即使 ufw 禁用了这个端口,却不起效果。因为默认状态下的 Docker 并不遵守 ufw 的防火墙规则解决ufw和docker的问题解决方案:https://github.com/chaifeng/ufw-docker目前新的解决方案只需要修改一个 UFW 配置文件即可,Docker 的所有配置和选项都保持默认。修改 UFW 的配置文件 /etc/ufw/after.rules ,在最后添加上如下规则:# BEGIN UFW AND DOCKER *filter :ufw-user-forward - [0:0] :ufw-docker-logging-deny - [0:0] :DOCKER-USER - [0:0] -A DOCKER-USER -j ufw-user-forward -A DOCKER-USER -j RETURN -s 10.0.0.0/8 -A DOCKER-USER -j RETURN -s 172.16.0.0/12 -A DOCKER-USER -j RETURN -s 192.168.0.0/16 -A DOCKER-USER -p udp -m udp --sport 53 --dport 1024:65535 -j RETURN -A DOCKER-USER -j ufw-docker-logging-deny -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 192.168.0.0/16 -A DOCKER-USER -j ufw-docker-logging-deny -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 10.0.0.0/8 -A DOCKER-USER -j ufw-docker-logging-deny -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 172.16.0.0/12 -A DOCKER-USER -j ufw-docker-logging-deny -p udp -m udp --dport 0:32767 -d 192.168.0.0/16 -A DOCKER-USER -j ufw-docker-logging-deny -p udp -m udp --dport 0:32767 -d 10.0.0.0/8 -A DOCKER-USER -j ufw-docker-logging-deny -p udp -m udp --dport 0:32767 -d 172.16.0.0/12 -A DOCKER-USER -j RETURN -A ufw-docker-logging-deny -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW DOCKER BLOCK] " -A ufw-docker-logging-deny -j DROP COMMIT # END UFW AND DOCKER或者使用 ufw-docker 工具下载脚本,修改 after.rules 文件配置:# 下载脚本 wget -O /usr/local/bin/ufw-docker https://github.com/chaifeng/ufw-docker/raw/master/ufw-docker # 赋予权限 chmod +x /usr/local/bin/ufw-docker # 修改配置文件 ufw-docker installufw-docker install 命令做了以下事情:备份文件 /etc/ufw/after.rules把 UFW 和 Docker 的相关规则添加到文件 after.rules 的末尾然后重启 UFW ,systemctl restart ufw 。现在外部就已经无法访问 Docker 发布出来的任何端口了,但是容器内部以及私有网络地址上可以正常互相访问,而且容器也可以正常访问外部的网络。可能由于某些未知原因,重启 UFW 之后规则也无法生效,请重启服务器。如果希望允许外部网络访问 Docker 容器提供的服务,比如有一个容器的服务端口是 80。那就可以用以下命令来允许外部网络访问这个服务:ufw route allow proto tcp from any to any port 80这个命令会允许外部网络访问所有用 Docker 发布出来的并且内部服务端口为 80 的所有服务。请注意,这个端口 80 是容器的端口,而非使用 -p 0.0.0.0:8080:80 选项发布在服务器上的 8080 端口。如果有多个容器的服务端口为 80 ,但只希望外部网络访问某个特定的容器。比如该容器的私有地址为 172.17.0.2 ,就用类似下面的命令:ufw route allow proto tcp from any to 172.17.0.2 port 80如果一个容器的服务是 UDP 协议,假如是 DNS 服务,可以用下面的命令来允许外部网络访问所有发布出来的 DNS 服务:ufw route allow proto udp from any to any port 53同样的,如果只针对一个特定的容器,比如 IP 地址为 172.17.0.2ufw route allow proto udp from any to 172.17.0.2 port 53ufw-docker 也是支持 Docker Swarm 的,详细教程及配置参考文章:https://github.com/chaifeng/ufw-docker
2024年09月26日
125 阅读
0 评论
1 点赞
2024-01-02
Ubuntu-Shell-监控公网IP-变化邮件报警
1、安装ssmtp服务sudo apt-get install ssmtp mailutils发送邮件需要有mailutils基础库,ssmtp库可以进一步选择发送人,收件人,邮件主题,邮件内容等。2、开通邮箱smtp服务需要开通发件人邮箱的smtp服务,无论是qq邮箱还是163邮箱等都可以直接开通,我选择的是qq邮箱,具体步骤可以参考:设置完之后呢,就要把生成的授权码作为邮箱的password3、配置ssmtp3.1、设置ubuntu发件人信息首先更改文件 /etc/ssmtp/ssmtp.conf ,编辑器选择自己常用的,我用的是vimsudo vim /etc/ssmtp/ssmtp.conf进入文件后默认显示如下:在文件中加入如下内容:UseTLS=Yes root=*********@qq.com AuthUser=********* AuthPass=******************即 mailhub 修改为qq邮箱的smtp服务器和端口,smtp.qq.com:465,如果发件人使用的是163邮箱,则163邮箱的服务器和端口自行百度,可能是 smtp.163.com:465;hostname 保持不变;root 后的邮箱为发件人邮箱, AuthUser 为发件人账号, AuthPass 为之前申请所得的smtp授权码。保存退出( :wq )3.2、配置ssmtp用户使用权限即配置允许哪个ubuntu用户可以使用发件人邮箱发送邮件。更改文件 /etc/ssmtp/revaliases (我默认使用root):sudo vim /etc/ssmtp/revaliases在下方添加如下:root:xxxxxx@qq.com:smtp.qq.com:465 rj01:xxxxxx@qq.com:smtp.qq.com:465即格式为:用户:邮箱:smtp.qq.com:465,163邮箱更改对应位置即可。这样配置即允许root用户和指定用户(如我的为rj01)使用ssmtp服务发送邮件。至此ssmtp配置完成。3.3、简单测试echo "hello world" | mail -s "title" xxxxxx@qq.com输入上述命令,后面邮箱为收件人邮箱,可以任意指定,收到邮件,测试成功。4、crontab 命令定时循环执行检测脚本发送邮件4.1、编写Shell脚本#!/bin/bash dirfile='/home/ip_change' new_ip=`curl icanhazip.com` #获取新公网ip mail_user=xxxxxx@qq.com #接收收邮件邮箱 mail_subject="IP已经发生变化,及时处理" #邮件主题 log="/var/log/tool.log" datetime=`date '+%Y-%m-%d %H:%M:%S'` #判断文件是否存在 if [ ! -f "$dirfile" ]; then touch "$file" echo "1.1.1.1" > $dirfile fi #判断new_ip是否获取 if [ ! -n "$new_ip" ]; then echo "$datetime 公网IP获取失败,检查'curl icanhazip.com' " >> $log exit 1 fi old_ip=`cat $dirfile` #查看旧ip # 判断两个IP是否相等 发邮件 if [ "$new_ip" = "$old_ip" ]; then echo "$datetime IP正常 - true " >> $log else echo $new_ip > $dirfile echo "IP已经发生变化, 新IP: $new_ip 旧IP: $old_ip !!! " | mail -s "$mail_subject" "$mail_user" echo "$datetime IP已经发生变化 - error 新IP :$new_ip 旧IP: $old_ip" >> $log fi4.2、crontab 定时循环执行脚本在之前配置的用户权限中允许的用户下,输入如下命令:crontab -e添加如下命令(路径需修改成自己编写的shell脚本路径):*/10 * * * * /bin/bash /data/shell/getIp/getIp.sh至此,每隔10分钟,自动获取最新公网ip,如果有更新,发送到目标邮箱。
2024年01月02日
16 阅读
0 评论
0 点赞
2023-12-30
Linux服务器上传|下载命令测速方法
这边使用 speedtest 测速安装命令:wget https://raw.github.com/sivel/speedtest-cli/master/speedtest.py chmod a+rx speedtest.py mv speedtest.py /usr/local/bin/speedtest chown root:root /usr/local/bin/speedtest运行 speedtest 检测运行命令:speedtest如果想把测出来的数据生成为图片命令如下:speedtest --share
2023年12月30日
11 阅读
0 评论
0 点赞
2023-10-20
【Minecraft开服教程】使用 MCSM 面板一键搭建我的世界服务器,并内网穿透公网远程联机
文章目录Mcsmanager安装创建Minecraft服务器本地测试联机内网穿透前言MCSManager 是一个开源、分布式、轻量级、一键开服、支持大部分游戏服务端和控制台程序的管理工具,我们可以用它来一键部署搭建Minecraft我的世界服务器,跟小伙伴们联机。现在一般家庭局域网宽带没有公网IP,不在同个局域网下的小伙伴没办法直接联机。所以我们在这个教程中同时做内网穿透,将本地端口映射到公网上,使用所生成的公网地址来远程联机,突破局域网的限制,不需要公网IP,不需要设置路由器,也不用购买云服务器。1.Mcsmanager安装点击下载 MCSManager ,我们下载windwos版本 【不支持windwos10以下系统安装】 。下载好后解压打开,然后点击启动器,启动后台程序启动后,会自动跳转到浏览器打开,如没有跳转,可直接在浏览器输入localhost:23333,首次访问需要我们创建一个账号然后即可进入到面板界面2.创建Minecraft服务器在面板中,我们点击快速开始,创建一个Minecraft 服务器选择一键开服这里可以自由选择相应的版本,这里选择1.19.2原版,点击安装然后输入服务器的名称,输入后等待安装完成安装完成后,点击前往实例控制台然后出现联机方式,我们点击下面跳过设置联机方式的选择接下来修改配置文件,取消正版服务器的验证,点击文件管理找到 server.properties 文件,点击编辑把 online-mode 的值改为 false ,然后保存,关闭然后开启实例,这里的实例表示服务的意思启动成功,我们可以看到端口信息,端口号为:255653.本地测试联机打开我的世界启动器,选择和服务器一样的版本1.19.2,启动然后点击多人游戏正常来说会自动搜索到这个本地服务器,可以直接点击即可连接如果没有,我们可以点击下面的直接连接,然后输入地址:127.0.0.1:25565,点击加入服务器然后我们可以看到成功进入了游戏4. 内网穿透测试本地联机正常后,我们接着做内网穿透,实现在外不同网络环境下的远程联机。内网穿透网上很多,有收费的和免费的这里就不介绍了。在本地安装成功后,创建一条隧道将我的世界服务端口映射到公网上,然后使用所生成的公网地址来远程联机就可以了。
2023年10月20日
76 阅读
0 评论
0 点赞
2023-10-18
让你免费拥有一个无限大小的存储服务器【全过程分享】
前言前段时间玩了AList,突发奇想既然RaiDrive能把Alist映射到本地,那是不是能把映射盘部署到服务器呢?这样我就有了一个无限大小的存储了,既然写了这篇文章,说明还是可以的,这篇没什么技术含量,没有什么深层次解读,只说实现过程细节步骤,查的资料也比较多,只是觉得有趣记录一下,如果涉及到谁的原创内容我没说请私聊,我给你名字和链接加上(/doge 保命)话不多说,开搂步骤大纲使用Alist管理网盘使用RaiDrive把Alist映射到本地把映射盘部署到服务器一:Alist管理网盘Alist:相当于一个聚合网盘管理器,能实现网盘的统一管理,并能达到文件在线浏览的效果AList 开源项目地址: https://github.com/alist-org/alist可以点击链接下载Alist Windows最新版:https://github.com/alist-org/alist/releases/download/v3.28.0/alist-windows-amd64.zip也可以在官网找自己喜欢的版本,但是注意新版本(V3 及更高版本)与 V2 不兼容下载完成后解压,在解压后的文件夹中打开cmd,运行 alist server 启动服务password is 后面是初始密码 start server 后面是 AList 的管理页面地址,IP(127.0.0.1/localhost) + 端口然后打开浏览器,输入链接127.0.0.1:5244 / localhost:5244输入账号(admin)密码(刚刚的初始密码)进入管理页面后可以点击右下角管理,修改初始密码,重新登录接下来添加需要管理的网盘,这里以百度网盘为例点击 管理 -> 存储 -> 添加驱动 选择百度网盘挂载路径 是根目录下的文件夹WebDav策略 推荐选择代理地址刷新令牌 为你百度网盘的 refresh_token ,官方文档里有获取方法:获取客户端ID与密匙 会自动获取,无需手动填写参数填写完毕后,直接点击添加 这就添加好了,接下来你就可以通过本机IP+端口访问网盘了如果要添加更多网盘,可以去 官方文档 查看,基本步骤都大差不差二:使用RaiDrive把alist映射到本地盘RaiDrive:将云存储和网络存储映射在本地磁盘 RaiDrive官网 :www.raidrive.com/ (点击Download下载)下载好后,打开 install 一直无脑下一步即可(注意安装位置,不建议安装到C盘)安装好后打开,点击 添加 服务类型 :选择 NAS —— WebDAV 虚拟驱动器 :前面是盘符,后面是名字,可以自行选择地址 :取消勾选,http后面填Alist的登陆地址,下面填/dav账户 :刚刚Alist登录的账号密码随后点击 连接 ,搞定此时在我的电脑里就多一个盘,打开之后就会显示Alist中管理的网盘注意:此处的磁盘大小为 7.99EB !!而 1EiB = 1,024 PiB = 1,048,576 TiB = 1,073,741,824 GiB 先别急着幻想,其实没有这么大,只不过是 没办法显示具体的大小,而随机生成的大小而已 /doge三:部署到服务器这里详细步骤我就不赘述了直接使用 Idea 新建一个web工程,配置Tomcat,默认 "Hello World" 出现之后(说明工程没有问题)在 Deployment 中添加映射路径选择刚刚添加的映射路径然后启动服务打开网页输入地址:localhost(ip):8080(Tomcat端口)/bd(Application context)至此,大功告成拓展啥?你问我这有啥用?既然都部署到服务器了,那还不是被咱玩弄于股掌之间以Android为例随便写个数据库 存放个文件路径,刚刚的web项目里 随便写个接口把路径返回,Android随便写个请求 从接口拿到数据,再随便找个播放器加载(顺便提一嘴,如果不行。。。那就是你写的太随便了/doge)注意事项还记得第一步,解压 Alist 的时候,启动了 alist server 的窗口吗,这个是在线的, 不能关闭!!! 关闭会导致Alist获取不到网盘资源,那么RaiDrive自然也就映射不到本地所以如果不想麻烦每次都手动启动,可以写个脚本实现:隐藏cmd窗口开机自启动 隐藏cmd窗口 :在 Alist解压文件夹 中新建一个 txt ,填入以下内容Set ws = CreateObject("Wscript.Shell") ws.run "D:\alist\alist.exe server",vbhide MsgBox "success"ws.run 修改为你 alist.exe 的路径保存之后将后缀改为 vbs 双击打开即可,弹出 success 说明启动成功这时你会发现,并没有cmd黑窗口弹出,打开alist管理页面,一切正常,🆗可以在任务管理器的进程中找到你启动的脚本,也可以在此处结束进程开机自启动 :将刚刚 vbs 文件,添加个快捷方式(注意!是快捷方式)打开运行( Win + R ),输入 shell:startup ,再将快捷方式拖入打开的文件夹里重启测试下,开机后等待success窗口弹出,大功告成!结语Alist加载会有延迟,对于过大的文件,有时亦会导致卡顿,对于宽带会有一定的要求,目前网上对Alist各网盘的优化和解决办法很多,大家可以根据自己的需求添加完善内网访问效果理想,若想在公网访问,无论是本地穿透,还是部署到云服务器,都需要通过服务器中转,转发之后具体能达到什么样的效果需要测试,如果有哪位大佬做出来了欢迎告知本篇没什么深层讲解,因此也没什么难度,按照步骤一步一步来即可,如果有问题随时提问,要是我哪里写错了,别客气,过来给我一巴掌,就行了(温柔点,别打肿,影响颜值就不好了/doge)。
2023年10月18日
11 阅读
0 评论
0 点赞
2023-09-21
自建远程桌面连接服务,RustDesk搭建教程
什么时候需要远程协助呢? 可能是远程自己在家的电脑,方便游戏排队或者下载文件;也可能是远程单位电脑,进行远程办公;当然,我觉得更多情况是远程小伙伴,帮小伙伴解决一些技术问题。远程协助,除了可以用向日葵、QQ远程和Todesk等软件,有没有一款安全、经济和快速的软件呢?RustDesk本次教程教给大家如何通过 RustDesk ,部署自己的自建远程平台。主要的优点:安全性:RustDesk使用安全的加密通信协议来保护数据传输,确保远程桌面连接的安全性和隐私保护。跨平台支持:RustDesk支持跨多个操作系统平台,包括Windows、macOS和Linux、Android等,这使得它非常灵活和适用于不同的工作环境。而且从名字可以看出,RustDesk是使用Rust所编写,而使用Rust编写的程序,两大特点就是高效和并发,实际使用上,一台亚马逊入门(1C1G)EC2或者Lightsail(1C2G)给个人或者小型团队使用是没有问题的。准备工具服务器目前, RustDesk 支持 Linux Server 和 Windows Server 服务器;看自己的取舍,Linux比较节约资源,而Windows方便小白上手。为了重新体现我们是Linux技术博主,本次搭建使用 Linux Server 进行演示。根据 RustDesk 官网描述和实际测试,一台1C 1G的亚马逊EC2,中继模式下,8对设备远程依旧不卡!!!如果你是Windows Server用户,那么建议至少选择2C 4G的服务器配置,毕竟需要让Windows Server可以跑起来;本文主要演示Linux Server的方法。RustDesk部署下载服务端Github地址 我们使用的是X86版本服务器,所以这里我们下载X86版本的服务包:拷贝下载地址,到服务器上使用wget进行下载和解压:# 使用wget进行下载1.1.8-2版本(最新版本可以看上述发布地址) wget https://github.com/rustdesk/rustdesk-server/releases/download/1.1.8-2/rustdesk-server-linux-amd64.zip # 使用unzip解压 unzip rustdesk-server-linux-amd64.zip # 重命名解压后文件(方便管理) mv amd64 RustDesk现在,我们的RustDesk前期的准备就完成了。接下来,我们尝试运行,之后再注册为服务。尝试运行我们可以先尝试运行一下;确保可以使用后,我们再使用pm2挂起访问,或者systemctl注册为服务。为了方便我们测试,这里使用screen双开两个虚拟终端,并以前台模式挂起后端进程:# 安装screen sudo apt install screen之后,在刚刚我们的RustDesk解压后的目录内,可以看到相关的文件:RustDesk├── hbbr├── hbbs└── rustdesk-utils解释一下各个作用:hbbs: RustDesk的ID服务,用于分配和注册ID;hbbr: RustDesk的中继服务,主要远程访问就是这个,如果直连远程不行,会使用hbbr进行流量中继。之后,我们使用两个screen进行启动:# 创建一个叫myHbbs的虚拟终端: screen -R myHbbs # 运行hbbs ./hbbs通常情况下就会启动成功:使用screen启动hbbs紧接着,Ctrl+a 和 d 返回主终端,启动 hbbr 。# 创建一个叫yHbb的虚拟终端: screen -R myHbbr # 运行hbbr ./hbbr到此,如果没什么防火墙、安全组问题, RustDesk 就启动完成了。使用screen启动hbbr使用screen启动完成查看这个 RustDesk 目录,就可以发现,多了一些数据库文件和一个证书文件:RustDesk├── db_v2.sqlite3├── db_v2.sqlite3-shm├── db_v2.sqlite3-wal├── hbbr├── hbbs├── id_ed25519├── id_ed25519.pub└── rustdesk-utils我们需要拷贝.pub这个公钥文件,用于接下来的本地配置:拷贝公钥文件比如,我的公钥文件内容:C6bJn7*50nCK3y4=接下来,我们可以进行本地的配置。本地配置到 RustDesk 上的客户端下载地址,下载我们的客户端:RustDesk 客户端 Github 发布地址 通常情况下,我们下载最新的发布版本即可:比如:我这里安装macOS,并打开:点击上面的三个点,进入配置:找到网络配置:解锁网络配置,上方两个输入你的服务器IP,下方的Key输入上一步内我们拷贝的公钥(对于我是C6bJn7*50nCK3y4=),如果你有使用域名,IP部分也可以使用域名(CDN不行):我们没有开启强制加密,所以理论上key不填写,也可以进行连接;只是,不填写key,网络传输可能不安全。到此,我们的配置配置就完成了。我们可以体验一下。注册服务现在,我们回到服务端。刚刚使用的screen可能不太优雅,这里我们准备了两个方案注册为访问,方便管理。使用pm2运行如果要使用pm2运行,需要提前安装nodejs,使用nodejs的软件包管理器(npm或者yarn)安装pm2。安装nodejs的方法,我在之前的文章内已经说的十分详细,这里就不再过多介绍,如果不知道如何操作,可以参考:Windows/macOS/Linux上安装Node.js,并使用NVM管理多版本Node.js 就简单说一下思路和使用命令吧:# 安装nvm git clone https://github.com/nvm-sh/nvm.git ~/.nvm # 追加到环境变量 echo 'export NVM_DIR="$HOME/.nvm"' >> ~/.zshrc echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm' >> ~/.zshrc # 重载环境变量 source ~/.zshrc # 使用nvm安装18版本nodejs nvm install 18 # 使用nodejs的npm安装pm2 npm install -g pm2之后,使用pm2的命令,启动hbbr和hbbs:# 当前正在RustDesk的目录内 pm2 start hbbs pm2 start hbbr之后,就可以发现。RustDesk已经启动。 具体的pm2使用,以后有机会和大家讲解。使用Systemctl运行我其实挺喜欢用 systemctl 的;但是上篇文章,其实已经足够详细,这里就直接给配置的脚本吧,我们需要创建两个Server,首先是 hbbs :[Unit] Description=RustDesk Hbbs After=network.target [Service] User=mintimate Type=simple WorkingDirectory=/home/mintimate/myApplication/RustDesk ExecStart=/home/mintimate/myApplication/RustDesk/hbbs ExecStop=/bin/kill -TERM $MAINPID [Install] WantedBy=multi-user.target之后是 hbbr :[Unit] Description=RustDesk Hbbr After=network.target [Service] User=mintimate Type=simple WorkingDirectory=/home/mintimate/myApplication/RustDesk ExecStart=/home/mintimate/myApplication/RustDesk/hbbr ExecStop=/bin/kill -TERM $MAINPID [Install] WantedBy=multi-user.target到此,使用 Systemctl 注册为服务就完成啦。其实也可以使用 screen ,就是重启系统后,再次启动比较麻烦。Q&A个人的一些使用经验,还有一些常见的问题。如何开启强制加密如果你搭建好了 RustDesk 后,会发发现:不需要设置 key ,也可以进行 RustDesk 的连接。这是因为 RustDesk 默认服务器端会开启加密,但是并不强制。如何你想开启强制加密,可以在启动 hbbr 和 hbbs 的时候,加上参数 -k _ :./hbbr -k _ ./hbbs -k _这样,客户端建立的连接,就需要强制设置好 key ,也就是我们的 *.pub 文件,否则无法建立通讯和远程连接。
2023年09月21日
178 阅读
0 评论
0 点赞
1
2
3