linux学习笔记
wireguard安装与配置
dingpeng 发表于2025-09-30 浏览10 评论0
#!/bin/bash # wg-manager.sh - WireGuard 跨平台管理脚本 (使用 192.168.108.0/24 网段) set -e # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # 变量定义 - 修改为 192.168.108.0/24 网段 CONFIG_DIR="/etc/wireguard" SERVER_CONFIG="$CONFIG_DIR/wg0.conf" SERVER_PUBLIC_KEY="$CONFIG_DIR/server_public.key" SERVER_PRIVATE_KEY="$CONFIG_DIR/server_private.key" CLIENTS_DIR="$CONFIG_DIR/clients" NETWORK="192.168.108.0/24" SERVER_IP="192.168.108.1" PORT="51820" # 日志函数 log() { echo -e "${GREEN}[$(date +'%Y-%m-%d %H:%M:%S')]${NC} $1" } warn() { echo -e "${YELLOW}[警告]${NC} $1" } error() { echo -e "${RED}[错误]${NC} $1" exit 1 } # 检测操作系统 detect_os() { if [ -f /etc/os-release ]; then . /etc/os-release OS=$ID OS_VERSION=$VERSION_ID else OS=$(uname -s) fi log "检测到操作系统: $OS $OS_VERSION" } # 安装 WireGuard install_wireguard() { log "开始安装 WireGuard..." case $OS in ubuntu|debian) sudo apt update || warn "apt update 失败,继续安装..." sudo apt install -y wireguard-tools resolvconf qrencode || { warn "仓库安装失败,尝试编译安装..." compile_install } ;; centos|rhel|fedora|rocky|almalinux|opencloudos) if command -v dnf >/dev/null 2>&1; then sudo dnf install -y wireguard-tools qrencode || { sudo dnf install -y epel-release sudo dnf install -y wireguard-tools qrencode } else sudo yum install -y wireguard-tools qrencode || { sudo yum install -y epel-release sudo yum install -y wireguard-tools qrencode } fi ;; *) warn "不支持的操作系统 $OS,尝试编译安装..." compile_install ;; esac # 验证安装 if command -v wg >/dev/null 2>&1; then log "WireGuard 安装成功: $(wg --version)" else error "WireGuard 安装失败" fi } # 编译安装 compile_install() { log "开始编译安装 WireGuard..." # 安装编译依赖 case $OS in ubuntu|debian) sudo apt install -y git build-essential libmnl-dev pkg-config ;; *) if command -v dnf >/dev/null 2>&1; then sudo dnf groupinstall -y "Development Tools" sudo dnf install -y git libmnl-devel pkgconfig gcc-c++ elif command -v yum >/dev/null 2>&1; then sudo yum groupinstall -y "Development Tools" sudo yum install -y git libmnl-devel pkgconfig gcc-c++ fi ;; esac # 编译安装 wireguard-tools cd /tmp rm -rf wireguard-tools git clone https://git.zx2c4.com/wireguard-tools cd wireguard-tools/src make sudo make install # 安装 qrencode(可选) if command -v apt >/dev/null 2>&1; then sudo apt install -y qrencode elif command -v dnf >/dev/null 2>&1; then sudo dnf install -y qrencode elif command -v yum >/dev/null 2>&1; then sudo yum install -y qrencode fi } # 启用 IP 转发 enable_ip_forward() { log "启用 IP 转发..." # 临时启用 echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward >/dev/null # 永久启用 if grep -q "net.ipv4.ip_forward" /etc/sysctl.conf; then sudo sed -i 's/^#*net.ipv4.ip_forward=.*/net.ipv4.ip_forward=1/' /etc/sysctl.conf else echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf fi sudo sysctl -p >/dev/null 2>&1 log "IP 转发已启用" } # 安全的文件操作函数 create_secure_file() { local file_path="$1" local content="$2" # 创建目录 sudo mkdir -p "$(dirname "$file_path")" # 创建临时文件 local temp_file=$(mktemp) echo "$content" > "$temp_file" # 复制并设置权限 sudo cp "$temp_file" "$file_path" sudo chmod 600 "$file_path" sudo chown root:root "$file_path" # 清理临时文件 rm -f "$temp_file" } # 生成随机客户端IP (192.168.108.2 - 192.168.108.254) generate_client_ip() { local base_ip="192.168.108" local random_suffix=$(( RANDOM % 253 + 2 )) # 2-254 echo "${base_ip}.${random_suffix}" } # 初始化服务端 init_server() { log "初始化 WireGuard 服务端..." log "使用网段: $NETWORK" log "服务器IP: $SERVER_IP" sudo mkdir -p $CONFIG_DIR sudo mkdir -p $CLIENTS_DIR # 生成服务器密钥 if [ ! -f "$SERVER_PRIVATE_KEY" ]; then log "生成服务器密钥对..." sudo wg genkey | sudo tee $SERVER_PRIVATE_KEY | sudo wg pubkey | sudo tee $SERVER_PUBLIC_KEY >/dev/null sudo chmod 600 $SERVER_PRIVATE_KEY $SERVER_PUBLIC_KEY fi # 获取默认网卡 DEFAULT_IFACE=$(ip route | grep default | awk '{print $5}' | head -1) [ -z "$DEFAULT_IFACE" ] && DEFAULT_IFACE="eth0" # 创建服务端配置 create_secure_file "$SERVER_CONFIG" " [Interface] PrivateKey = $(sudo cat $SERVER_PRIVATE_KEY) Address = $SERVER_IP/24 ListenPort = $PORT SaveConfig = false # 流量转发规则 PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o $DEFAULT_IFACE -j MASQUERADE PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o $DEFAULT_IFACE -j MASQUERADE " log "服务端配置已创建: $SERVER_CONFIG" log "服务器公钥: $(sudo cat $SERVER_PUBLIC_KEY)" } # 启动服务端 start_server() { log "启动 WireGuard 服务端..." sudo systemctl enable wg-quick@wg0 if sudo systemctl is-active wg-quick@wg0 >/dev/null 2>&1; then sudo systemctl restart wg-quick@wg0 else sudo systemctl start wg-quick@wg0 fi sleep 2 if sudo systemctl is-active wg-quick@wg0 >/dev/null 2>&1; then log "WireGuard 服务端启动成功" else error "WireGuard 服务端启动失败" fi } # 添加客户端 add_client() { local client_name=$1 local client_ip=$2 [ -z "$client_ip" ] && client_ip=$(generate_client_ip) log "添加客户端: $client_name (IP: $client_ip)" # 生成客户端密钥 local client_private_key=$(wg genkey) local client_public_key=$(echo $client_private_key | wg pubkey) # 获取服务器公网IP(用于客户端配置) local server_public_ip=$(curl -s -4 ifconfig.me || curl -s -4 ipinfo.io/ip || echo "YOUR_SERVER_IP") # 创建客户端配置 local client_config="$CLIENTS_DIR/$client_name.conf" local client_config_content="[Interface] PrivateKey = $client_private_key Address = $client_ip/24 DNS = 8.8.8.8 [Peer] PublicKey = $(sudo cat $SERVER_PUBLIC_KEY) Endpoint = $server_public_ip:$PORT AllowedIPs = 192.168.108.0/24 PersistentKeepalive = 25" create_secure_file "$client_config" "$client_config_content" # 添加到服务端配置 sudo wg set wg0 peer "$client_public_key" allowed-ips "$client_ip/32" # 保存到服务端配置文件中 echo " # Client: $client_name [Peer] PublicKey = $client_public_key AllowedIPs = $client_ip/32" | sudo tee -a $SERVER_CONFIG > /dev/null # 生成二维码(如果安装了 qrencode) if command -v qrencode >/dev/null 2>&1; then sudo qrencode -t ansiutf8 < "$client_config" sudo qrencode -o "$CLIENTS_DIR/$client_name.png" < "$client_config" log "客户端二维码已生成: $CLIENTS_DIR/$client_name.png" fi log "客户端添加成功!" echo "==========================================" echo "客户端名称: $client_name" echo "客户端IP: $client_ip" echo "客户端公钥: $client_public_key" echo "配置文件: $client_config" echo "==========================================" # 显示客户端配置 echo -e "\n客户端配置内容:" sudo cat "$client_config" } # 批量添加内网节点 add_internal_nodes() { log "开始批量添加内网节点..." log "使用网段: $NETWORK" local nodes=("node1" "node2" "node3" "node4") local start_ip=2 # 从 192.168.108.2 开始 for i in "${!nodes[@]}"; do local client_name="${nodes[$i]}" local client_ip="192.168.108.$((start_ip + i))" log "添加节点: $client_name -> $client_ip" add_client "$client_name" "$client_ip" echo done log "内网节点批量添加完成" log "节点IP分配:" for i in "${!nodes[@]}"; do echo " ${nodes[$i]} -> 192.168.108.$((start_ip + i))" done } # 显示状态 show_status() { log "WireGuard 状态:" sudo wg show echo -e "\n连接的客户端:" sudo wg show | grep -A5 "peer" | grep -E "peer:|allowed ips:" | sed 's/peer:/客户端:/;s/allowed ips:/IP地址:/' echo -e "\nVPN 网络信息:" echo "网段: $NETWORK" echo "服务器: $SERVER_IP" echo "端口: $PORT" echo -e "\n配置文件列表:" sudo ls -la $CLIENTS_DIR/ 2>/dev/null || warn "客户端配置目录不存在" } # 显示使用说明 show_usage() { echo -e "${BLUE}WireGuard 管理脚本 (网段: $NETWORK)${NC}" echo "用法: $0 [选项]" echo echo "选项:" echo " install 安装 WireGuard 并启用 IP 转发" echo " server 初始化并启动服务端" echo " add-client <名称> [IP] 添加客户端" echo " add-nodes 批量添加内网节点 (node1-node4)" echo " status 显示状态" echo " restart 重启服务" echo " full-setup 完整安装配置(安装+服务端+内网节点)" echo echo "示例:" echo " $0 install # 安装 WireGuard" echo " $0 full-setup # 完整安装配置" echo " $0 add-client mypc # 添加客户端" echo " $0 status # 查看状态" } # 完整安装配置 full_setup() { log "开始完整安装配置 WireGuard..." log "VPN 网段: $NETWORK" detect_os install_wireguard enable_ip_forward init_server start_server add_internal_nodes show_status log "完整安装配置完成!" echo -e "\n${GREEN}下一步操作:${NC}" echo "1. 在云服务器安全组开放 $PORT UDP 端口" echo "2. 将客户端配置文件分发到对应节点" echo "3. 在客户端安装 WireGuard 并导入配置" echo "4. 使用 VPN IP 建立 Docker Swarm 集群" echo -e "\n${YELLOW}重要信息:${NC}" echo "服务器公钥: $(sudo cat $SERVER_PUBLIC_KEY)" echo "VPN 网段: $NETWORK" echo "服务器内网IP: $SERVER_IP" } # 主函数 main() { case $1 in install) detect_os install_wireguard enable_ip_forward ;; server) init_server start_server ;; add-client) if [ -z "$2" ]; then error "请提供客户端名称" fi add_client "$2" "$3" ;; add-nodes) add_internal_nodes ;; status) show_status ;; restart) sudo systemctl restart wg-quick@wg0 log "服务已重启" ;; full-setup) full_setup ;; *) show_usage ;; esac } # 脚本入口 if [ $# -eq 0 ]; then show_usage else main "$@" fi
docker使用
批量生成docker容器配置模板,用于编排大批量的同类容器
dingpeng 发表于2025-09-04 浏览31 评论0
###使用weget下载: wget https://dingpeng.cc/mkconfig.py ###使用curl下载: curl -O https://dingpeng.cc/mkconfig.py def generate_docker_compose(prefix="fsu", terminal_prefix="jsxnj", count=8, output_file="docker-compose.yml"): """ 生成Docker Compose配置 Args: prefix: 服务名称前缀(如:fsu) terminal_prefix: TERMINAL_ID前缀(如:jsxnj) count: 生成的服务数量 output_file: 输出文件名 """ # 基础模板 template = f'''version: '3.8' networks: fsunetwork: driver: bridge ipam: config: - subnet: 172.200.200.0/24 services: ''' # 为每个服务生成配置,image填写实际需要的镜像的名称 #####注意:image名称中,\斜杠可能会识别成转义字符,可选择使用/斜杠,docker compose都可以识别 for i in range(1, count + 1): service_name = f"{prefix}{i}" terminal_id = f"{terminal_prefix}{service_name}" service_config = f''' {service_name}: image: fsuclient restart: no networks: - fsunetwork cap_add: - NET_ADMIN devices: - /dev/ppp environment: - TERMINAL_ID={terminal_id} ''' template += service_config # 写入文件 with open(output_file, 'w') as f: f.write(template) print(f"已生成 {count} 个服务配置到 {output_file}") print(f"服务名称前缀: {prefix}") print(f"TERMINAL_ID前缀: {terminal_prefix}") # 使用示例 if __name__ == "__main__": # 默认生成8个fsu服务,可用参数如下: # prefix: 服务名称前缀(如:fsu) # terminal_prefix: TERMINAL_ID前缀(如:jsxnj) # count: 生成的服务数量 # output_file: 输出文件名 generate_docker_compose() # 自定义示例:生成12个fsu服务,TERMINAL_ID前缀不变 # generate_docker_compose(count=12
linux学习笔记
ubuntu安装迷你版后,命令补全功能无法补全二级命令
dingpeng 发表于2025-08-07 浏览51 评论0

windows系统安装与使用
电脑使用耳机看视频时,只有伴奏没有人声的结局办法
dingpeng 发表于2025-01-23 浏览190 评论0
windows系统安装与使用
windows server backup备份副本无法删除的问题
dingpeng 发表于2025-01-11 浏览215 评论0
磁盘中发现剩余空间很小,但是从文件查找中发现总文件量远没有这么多,经查询资料,VSS卷影复制时会单独创建一个副本文件,且文件不可访问,不可直接查看。
管理员模式进入CMD
输入:diskshadow 进入卷影复制服务 (VSS) 管理的工具
输入:list shadows all 展现本机电脑上所有的卷影副本
输入:delete shadows ? 可查看删除副本文件相关的功能说明,使用 delete shadows all 可删除所有的备份副本
linux学习笔记
VirtualBox日常使用操作命令
dingpeng 发表于2025-01-10 浏览145 评论0
工作常用笔记
常用sql语句记录
dingpeng 发表于2025-01-10 浏览520 评论0
历史告警导出
Select OBJID as FSUID, OBJNAME as FSU名称, SUBOBJID as 设备ID, ALARMLEVEL as 告警等级, ALARMNAME as 告警名称, DETAILINFO as 告警信息, INSERTTIME as 告警开始时间, CLEARSYSTEMTIME as 告警清除时间, FAULTID as 工单号, CLEARCAUSE as 告警清除方式, STATIONID as 站址系统编码, STATIONSTATUS as 站址状态, MID as 信号量 from itower.V_IF_PROV_ALARM_JSFGS WHERE CLEARSYSTEMTIME >= TO_DATE('2022-03-01 00:00:00','yyyy-MM-dd HH24:MI:ss') AND CLEARSYSTEMTIME < TO_DATE('2022-04-01 00:00:00','yyyy-MM-dd HH24:MI:ss')

linux学习笔记
PVE退出集群&删除异常节点
dingpeng 发表于2024-04-03 浏览339 评论0

linux学习笔记
socat使用
dingpeng 发表于2024-02-27 浏览271 评论0
1、创建TCP-server,监听10010端口,且断开后可关闭;输入输出均重定向至标准输入输出
-d -d (表示调试信息输出)
TCP4-LISTEN:10010(表示监听10010端口)
reuseaddr(
linux学习笔记
linux实用命令记录
dingpeng 发表于2024-01-11 浏览326 评论0
检查此目录下各文件夹大小,按从高到低排序
sudo du -ah --max-depth=1 | sort -nr