This commit is contained in:
sindricn
2025-08-07 17:58:43 +08:00
parent a1ee4ea90e
commit f6f6be1555
13 changed files with 344 additions and 4585 deletions
+8
View File
@@ -0,0 +1,8 @@
{
"permissions": {
"allow": [
"Bash(rm:*)"
],
"deny": []
}
}
-157
View File
@@ -1,157 +0,0 @@
# 更新日志
## v1.1.0 - 2024-08-05
### 🆕 新增功能
#### 改进的卸载系统
- **双重卸载选项**: 提供"仅卸载程序"和"完全卸载"两种方式
- **智能保留机制**: 仅卸载程序时保留配置文件、证书和用户账户
- **安全确认机制**: 完全卸载需要输入 "YES" 确认,防止误操作
- **详细清理提示**: 提供手动清理命令,用户可按需执行
#### 卸载功能特性
- ✅ 遵循官方卸载行为,仅删除程序文件
- ✅ 保留配置文件和证书,便于重新安装
- ✅ 提供完整清理选项,满足彻底卸载需求
- ✅ 自动清理端口跳跃 iptables 规则
- ✅ 详细的卸载验证指导
### 📚 文档更新
#### 新增文档
- **UNINSTALL_GUIDE.md**: 详细的卸载指南
- **CHANGELOG.md**: 版本更新记录
#### 更新文档
- **README.md**: 更新卸载功能说明
- **USAGE.md**: 添加详细卸载说明
- **DEPLOYMENT_GUIDE.md**: 完善卸载部分
- **demo.sh**: 添加卸载方式演示
### 🔧 技术改进
#### 代码优化
- 模块化卸载函数设计
- 改进错误处理和用户提示
- 增强安全性检查
#### 用户体验
- 清晰的卸载选项说明
- 详细的操作步骤指导
- 完善的验证方法
---
## v1.0.0 - 2024-08-05
### 🎉 首次发布
#### 核心功能
- **一键安装**: 自动检测系统环境,安装 Hysteria2 和依赖
- **智能配置**: 支持 ACME 自动证书和自签名证书两种模式
- **域名优化**: 自动测试延迟,选择最优伪装域名
- **服务管理**: 完整的服务启停、状态监控、日志查看
- **进阶配置**: 端口修改、混淆配置、端口跳跃等高级功能
#### 项目结构
```
hy2-manager/
├── hy2-manager.sh # 主控制脚本
├── install.sh # 一键安装脚本
├── demo.sh # 功能演示脚本
├── scripts/ # 功能模块
│ ├── install.sh # 安装模块
│ ├── config.sh # 配置生成
│ ├── service.sh # 服务管理
│ ├── domain-test.sh # 域名测试
│ └── advanced.sh # 进阶配置
├── templates/ # 配置模板
│ ├── acme-config.yaml # ACME 配置
│ ├── self-cert-config.yaml # 自签名配置
│ ├── advanced-config.yaml # 高级配置
│ └── client-config.yaml # 客户端示例
└── docs/ # 文档
├── README.md # 项目说明
├── USAGE.md # 使用说明
├── PROJECT_OVERVIEW.md # 项目总览
└── DEPLOYMENT_GUIDE.md # 部署指南
```
#### 特色功能
- **模块化设计**: 清晰的代码结构,易于维护和扩展
- **交互式界面**: 友好的菜单系统,无需记忆复杂命令
- **智能域名选择**: 自动测试 30+ 优质域名,选择延迟最低的
- **配置模板丰富**: 提供多种场景的配置模板
- **安全性考虑**: 自动生成强密码,配置文件权限控制
- **用户友好**: 彩色界面,详细提示,错误处理完善
#### 支持的系统
- Ubuntu 18.04+
- Debian 9+
- CentOS 7+
- RHEL 7+
- Fedora 30+
#### 文档体系
- **README.md**: 项目介绍和快速开始
- **USAGE.md**: 详细使用说明
- **PROJECT_OVERVIEW.md**: 项目架构和设计理念
- **DEPLOYMENT_GUIDE.md**: 完整部署指南
---
## 开发计划
### v1.2.0 (计划中)
- [ ] Web 管理界面
- [ ] 多服务器管理
- [ ] 流量统计功能
- [ ] 自动更新机制
### v1.3.0 (计划中)
- [ ] 用户管理系统
- [ ] 监控告警功能
- [ ] 负载均衡支持
- [ ] API 接口
### 长期规划
- [ ] 客户端配置生成器
- [ ] 社区插件市场
- [ ] 多语言支持
- [ ] 移动端管理应用
---
## 贡献指南
欢迎社区贡献代码和建议:
1. Fork 项目仓库
2. 创建功能分支
3. 提交代码更改
4. 发起 Pull Request
### 代码规范
- 使用 Bash 最佳实践
- 添加详细注释
- 遵循项目结构
- 编写测试用例
### 文档要求
- 更新相关文档
- 添加使用示例
- 翻译多语言版本
---
## 许可证
本项目采用 MIT 许可证,详见 LICENSE 文件。
---
## 致谢
感谢 Hysteria2 项目团队提供优秀的网络工具。
感谢所有贡献者和用户的支持与反馈。
-382
View File
@@ -1,382 +0,0 @@
# Hysteria2 配置管理脚本部署指南
## 快速部署
### 方法一:一键安装(推荐)
```bash
# 一键安装到服务器
curl -fsSL https://raw.githubusercontent.com/sindricn/s-hy2/main/quick-install.sh | sudo bash
# 运行脚本
sudo s-hy2
```
### 方法二:GitHub 克隆安装
```bash
# 克隆仓库
git clone https://github.com/sindricn/s-hy2.git
cd s-hy2
# 运行安装脚本
sudo ./install.sh
# 或直接运行主脚本
sudo ./hy2-manager.sh
```
### 方法二:手动部署
```bash
# 1. 克隆仓库
git clone https://github.com/your-repo/hy2-manager.git
cd hy2-manager
# 2. 设置权限
chmod +x hy2-manager.sh
chmod +x scripts/*.sh
# 3. 创建符号链接(可选)
sudo ln -sf $(pwd)/hy2-manager.sh /usr/local/bin/hy2-manager
# 4. 运行脚本
sudo ./hy2-manager.sh
```
## 使用流程
### 新手推荐流程(一键快速配置)
1. **运行管理脚本**
```bash
sudo s-hy2
```
2. **安装 Hysteria2**
- 选择菜单选项 `1. 安装 Hysteria2`
- 脚本会自动检测系统环境并安装
3. **一键快速配置**
- 选择菜单选项 `2. 一键快速配置`
- 脚本会自动完成所有配置并启动服务
4. **查看节点信息**
- 选择菜单选项 `8. 节点信息`
- 获取节点链接和客户端配置
### 高级用户流程(手动配置)
1. **运行管理脚本**
```bash
sudo s-hy2
```
2. **安装 Hysteria2**
- 选择菜单选项 `1. 安装 Hysteria2`
3. **手动配置**
- 选择菜单选项 `3. 手动配置`
- 选择配置模式(ACME 或自签名证书)
- 按提示输入相关信息
4. **启动服务**
- 选择菜单选项 `4. 管理服务`
- 选择 `1. 启动服务`
- 选择 `4. 启用开机自启`
### 配置模式选择
#### ACME 自动证书模式(推荐生产环境)
**优点:**
- 自动申请和续期 SSL 证书
- 高安全性,证书被广泛信任
- 无需手动管理证书
**要求:**
- 拥有有效域名
- 域名已解析到服务器 IP
- 服务器可访问互联网
- 有效的邮箱地址
**配置步骤:**
1. 确保域名解析正确
2. 输入域名(如:example.com
3. 输入邮箱地址
4. 设置认证密码
5. 选择伪装网站
#### 自签名证书模式(适合测试环境)
**优点:**
- 无需域名,快速部署
- 适合内网或测试环境
- 配置简单
**缺点:**
- 证书不被信任
- 客户端需要忽略证书错误
**配置步骤:**
1. 选择伪装域名
2. 设置认证密码
3. 自动生成证书
## 进阶配置
### 域名优化
使用脚本的域名测试功能选择最优伪装域名:
1. 选择菜单选项 `5. 测试伪装域名`
2. 选择 `2. 交互式选择域名`
3. 等待测试完成,选择延迟最低的域名
### 端口配置
如果默认 443 端口被占用:
1. 选择菜单选项 `6. 进阶配置`
2. 选择 `1. 修改监听端口`
3. 输入新端口号
4. 确保防火墙允许新端口
### 混淆配置
在网络环境较差时启用混淆:
1. 选择菜单选项 `6. 进阶配置`
2. 选择 `2. 添加混淆配置`
3. 设置混淆密码
4. 客户端需要配置相同密码
### 端口跳跃
提高连接稳定性:
1. 选择菜单选项 `6. 进阶配置`
2. 选择 `4. 配置端口跳跃`
3. 选择网络接口
4. 设置端口范围
## 客户端配置
### 基本配置
```yaml
server: your.server.com:443
auth: your_password
tls:
sni: your.server.com
insecure: false # ACME 证书设为 false,自签名设为 true
socks5:
listen: 127.0.0.1:1080
http:
listen: 127.0.0.1:8080
```
### 混淆配置(如果服务器启用)
```yaml
obfs:
type: salamander
salamander:
password: your_obfs_password
```
## 防火墙配置
### Ubuntu/Debian (UFW)
```bash
# 允许 Hysteria2 端口
sudo ufw allow 443/udp
# 如果使用自定义端口
sudo ufw allow YOUR_PORT/udp
# 启用防火墙
sudo ufw enable
```
### CentOS/RHEL (firewalld)
```bash
# 允许 Hysteria2 端口
sudo firewall-cmd --permanent --add-port=443/udp
# 如果使用自定义端口
sudo firewall-cmd --permanent --add-port=YOUR_PORT/udp
# 重载配置
sudo firewall-cmd --reload
```
## 监控和维护
### 查看服务状态
```bash
# 使用脚本查看
sudo hy2-manager
# 选择 "3. 管理服务"
# 或直接使用系统命令
sudo systemctl status hysteria-server
```
### 查看日志
```bash
# 实时日志
sudo journalctl -f -u hysteria-server
# 历史日志
sudo journalctl -u hysteria-server --since "1 hour ago"
```
### 配置备份
脚本会自动备份配置文件,手动备份:
```bash
sudo cp /etc/hysteria/config.yaml /etc/hysteria/config.yaml.backup.$(date +%Y%m%d_%H%M%S)
```
## 故障排除
### 常见问题
1. **服务启动失败**
```bash
# 检查配置文件
sudo hysteria server --config /etc/hysteria/config.yaml --check
# 查看详细日志
sudo journalctl -u hysteria-server -n 50
```
2. **证书申请失败**
- 检查域名解析:`nslookup your.domain.com`
- 检查端口开放:`sudo netstat -tulnp | grep :80`
- 检查防火墙设置
3. **连接失败**
- 检查服务状态:`sudo systemctl status hysteria-server`
- 检查端口监听:`sudo netstat -tulnp | grep :443`
- 验证客户端配置
### 重新配置
如果需要重新配置:
1. 停止服务:选择 "管理服务" -> "停止服务"
2. 重新生成配置:选择 "生成配置文件"
3. 启动服务:选择 "管理服务" -> "启动服务"
## 卸载
### 卸载 Hysteria2
脚本提供两种卸载方式,根据需要选择:
#### 方式一:仅卸载程序 (推荐)
适用于:
- 临时卸载,可能重新安装
- 保留配置以备后用
- 升级或重装系统前备份
操作步骤:
1. 运行 `sudo hy2-manager`
2. 选择 `7. 卸载服务`
3. 选择 `1. 仅卸载程序 (保留配置文件和证书)`
4. 确认卸载
**保留内容:**
- 配置文件:`/etc/hysteria/config.yaml`
- SSL 证书文件
- hysteria 用户账户
- 自定义配置和备份
**手动清理命令:**
```bash
# 如需完全清理,可执行以下命令
sudo rm -rf /etc/hysteria
sudo userdel -r hysteria
sudo rm -f /etc/systemd/system/multi-user.target.wants/hysteria-server.service
sudo rm -f /etc/systemd/system/multi-user.target.wants/hysteria-server@*.service
sudo systemctl daemon-reload
```
#### 方式二:完全卸载
适用于:
- 不再使用 Hysteria2
- 彻底清理系统
- 重新开始配置
操作步骤:
1. 运行 `sudo hy2-manager`
2. 选择 `7. 卸载服务`
3. 选择 `2. 完全卸载 (删除所有文件)`
4. 输入 `YES` 确认
**删除内容:**
- Hysteria2 程序文件
- 所有配置文件和证书
- hysteria 用户账户
- systemd 服务文件
- 端口跳跃 iptables 规则
### 卸载管理脚本
```bash
# 如果使用安装脚本安装
sudo /opt/hy2-manager/install.sh --uninstall
# 或手动删除
sudo rm -rf /opt/hy2-manager
sudo rm -f /usr/local/bin/hy2-manager
```
### 卸载后验证
```bash
# 检查程序是否已删除
which hysteria
# 检查服务是否已停止
sudo systemctl status hysteria-server
# 检查配置目录 (仅程序卸载时可能存在)
ls -la /etc/hysteria
# 检查用户是否存在 (仅程序卸载时可能存在)
id hysteria
```
## 安全建议
1. **使用强密码**:认证密码和混淆密码都应使用强密码
2. **定期更新**:定期更新 Hysteria2 到最新版本
3. **监控日志**:定期检查服务日志,发现异常及时处理
4. **防火墙配置**:只开放必要的端口
5. **证书管理**:ACME 证书会自动续期,自签名证书需要定期更新
## 性能优化
1. **选择最优伪装域名**:使用脚本的域名测试功能
2. **合理设置带宽**:根据服务器带宽设置合理限制
3. **启用混淆**:在网络环境较差时启用混淆
4. **端口跳跃**:在需要时配置端口跳跃提高稳定性
## 技术支持
如遇到问题,请:
1. 查看日志文件
2. 检查配置文件
3. 参考故障排除指南
4. 提交 Issue 到项目仓库
-298
View File
@@ -1,298 +0,0 @@
# S-Hy2 功能特性详解
## 🚀 一键安装部署
### GitHub 一键安装
```bash
curl -fsSL https://raw.githubusercontent.com/sindricn/s-hy2/main/quick-install.sh | sudo bash
```
**特性:**
- 自动检测系统环境 (Ubuntu/Debian/CentOS/RHEL/Fedora)
- 自动安装必要依赖 (curl, wget, git, openssl, net-tools, iptables)
- 从 GitHub 下载最新版本脚本
- 创建快捷命令 `s-hy2``hy2-manager`
- 设置正确的文件权限
- 创建桌面快捷方式 (可选)
## 🎯 快捷命令
安装完成后,可以使用以下命令快速启动:
```bash
# 推荐使用 (简短易记)
sudo s-hy2
# 或者使用完整命令
sudo hy2-manager
```
## 📋 主菜单功能
### 1. 安装 Hysteria2
- 自动检测系统环境
- 预安装检查 (网络、端口、防火墙)
- 更新系统包和安装依赖
- 下载并安装 Hysteria2 官方程序
- 创建配置目录和设置权限
### 2. 一键快速配置 ⭐ (新功能)
**完全自动化配置,无需任何手动输入**
**自动执行步骤:**
1. **服务器信息获取**
- 自动获取公网IP地址
- 自动检测网络接口 (通过 `ip route``ip link`)
2. **智能伪装域名选择**
- 测试 30+ 优质域名延迟
- 自动选择延迟最低的域名
- 包含 Cloudflare、Google、Microsoft、Apple 等知名服务
3. **安全密码生成**
- 认证密码:16位随机强密码
- 混淆密码:16位随机强密码
- 使用 OpenSSL 生成,确保安全性
4. **自签名证书生成**
- 使用 ECC P-256 算法
- 10年有效期
- 自动设置正确权限
5. **端口跳跃配置**
- 默认范围:20000-50000
- 目标端口:443
- 自动生成 iptables 规则
- 保存配置以便管理
6. **服务启动**
- 自动启动 Hysteria2 服务
- 设置开机自启
- 验证服务状态
**配置结果:**
- 证书类型:自签名 (无需域名)
- 混淆:Salamander 算法
- 端口跳跃:已启用
- 伪装域名:自动选择最优
- 服务状态:运行中
### 3. 手动配置
传统的交互式配置方式,支持:
#### ACME 自动证书模式
- 域名验证和邮箱验证
- 自动申请 Let's Encrypt 证书
- 自动续期
- 适合生产环境
#### 自签名证书模式
- 自定义伪装域名
- 手动生成证书
- 快速部署
- 适合测试环境
### 4. 管理服务
**完整的服务生命周期管理**
#### 服务操作
- 启动/停止/重启服务
- 启用/禁用开机自启
- 详细的服务状态显示
#### 状态监控
- 实时服务状态
- 端口监听状态
- 进程信息 (PID、内存、CPU)
- 配置文件状态
#### 配置管理
- 查看配置文件
- 编辑配置文件 (nano)
- 备份和恢复配置
- 配置文件语法验证
### 5. 查看日志
- 实时日志查看 (`journalctl -f`)
- 历史日志查询 (50/100/500行,今天,自定义)
- 日志过滤和搜索
### 6. 测试伪装域名
**智能域名选择系统**
#### 预设域名测试
- 30+ 优质域名列表
- 并发延迟测试
- 按延迟排序显示结果
#### 交互式选择
- 显示测试结果排行榜
- 一键选择并更新配置
- 自动重启服务应用更改
#### 自定义域名测试
- 支持测试用户输入的域名
- 批量测试多个域名
- 显示详细测试结果
### 7. 进阶配置
**高级网络配置选项**
#### 端口修改
- 修改默认 443 端口
- 端口占用检测
- 防火墙配置提醒
#### 混淆配置
- 添加/移除 Salamander 混淆
- 自动生成混淆密码
- 客户端配置提醒
#### 端口跳跃
- 自动检测网络接口
- 自定义端口范围
- iptables 规则管理
- 规则持久化保存
### 8. 节点信息 ⭐ (新功能)
**完整的节点信息展示和管理**
#### 基本信息显示
- 服务器地址和端口
- 认证密码和混淆密码
- SNI域名和证书类型
- 端口跳跃配置
#### 节点链接生成
- 标准 Hysteria2:// 协议链接
- 包含所有必要参数
- 支持复制到剪贴板
#### 订阅链接生成
- Base64 编码的订阅链接
- 兼容主流客户端
- 支持批量导入
#### 客户端配置生成
- 完整的 YAML 配置文件
- 包含所有连接参数
- 可直接复制使用
#### 二维码生成
- 支持 qrencode 生成二维码
- 方便移动设备扫码导入
- 自动安装提示
#### 信息保存
- 保存到 `/etc/hysteria/node-info.txt`
- 包含所有连接信息
- 便于备份和分享
### 9. 卸载服务
**灵活的卸载选项**
#### 仅卸载程序 (推荐)
- 删除 Hysteria2 程序文件
- 保留配置文件和证书
- 保留用户账户
- 适合临时卸载或升级
#### 完全卸载
- 删除所有相关文件
- 清理用户账户
- 清理 systemd 服务
- 清理 iptables 规则
- 需要输入 "YES" 确认
### 10. 关于脚本
- 版本信息
- 功能特性介绍
- 使用说明
## 🔧 技术特性
### 自动化程度
- **一键快速配置**:零手动输入,3分钟完成部署
- **智能检测**:自动识别系统环境和网络配置
- **错误处理**:完善的错误检测和恢复机制
### 安全性
- **强密码生成**:使用 OpenSSL 生成随机密码
- **权限控制**:配置文件 600 权限,证书文件专用用户
- **混淆加密**:默认启用 Salamander 混淆
- **端口跳跃**:增强连接稳定性和安全性
### 兼容性
- **多系统支持**Ubuntu/Debian/CentOS/RHEL/Fedora
- **版本兼容**:支持各主要版本
- **架构支持**x86_64/ARM64 等主流架构
### 用户体验
- **彩色界面**:清晰的颜色标识和提示
- **详细反馈**:每步操作都有明确的状态反馈
- **错误提示**:友好的错误信息和解决建议
- **快捷命令**:简短易记的 `s-hy2` 命令
### 可维护性
- **模块化设计**:功能模块独立,易于维护
- **配置备份**:自动备份配置文件
- **日志记录**:详细的操作和错误日志
- **版本控制**:支持在线更新和回滚
## 🎯 使用场景
### 新手用户
- 使用 "一键快速配置" 功能
- 零技术门槛,3分钟完成部署
- 自动优化所有配置参数
### 高级用户
- 使用 "手动配置" 功能
- 自定义所有配置参数
- 使用进阶配置功能
### 生产环境
- 使用 ACME 自动证书
- 配置域名和邮箱
- 启用监控和日志
### 测试环境
- 使用自签名证书
- 快速部署和测试
- 方便重置和重新配置
## 📊 性能优化
### 域名选择优化
- 自动测试 30+ 优质域名
- 选择延迟最低的域名
- 减少连接建立时间
### 网络优化
- 端口跳跃提高稳定性
- 混淆加密绕过检测
- 自动检测最优网络接口
### 系统优化
- 合理的默认配置参数
- 自动设置文件权限
- 优化的服务启动配置
## 🔄 更新和维护
### 在线更新
- 支持从 GitHub 获取最新版本
- 保留用户配置和数据
- 自动备份重要文件
### 配置管理
- 自动配置备份机制
- 支持配置版本控制
- 快速恢复和回滚
### 监控告警
- 服务状态监控
- 日志异常检测
- 性能指标收集
这个 S-Hy2 脚本项目提供了从安装到配置、从管理到监控的完整解决方案,特别是新增的"一键快速配置"功能,让 Hysteria2 的部署变得前所未有的简单!
-243
View File
@@ -1,243 +0,0 @@
# Hysteria2 配置管理脚本项目总览
## 项目简介
这是一个用于简化 Hysteria2 服务器配置和管理的交互式脚本工具。通过友好的菜单界面,用户可以轻松完成 Hysteria2 的安装、配置、管理等操作,无需记忆复杂的命令行参数。
## 项目特色
### 🚀 一键操作
- 自动安装/卸载 Hysteria2
- 智能检测系统环境
- 自动处理依赖关系
### ⚙️ 智能配置
- 交互式配置生成器
- 支持 ACME 和自签名两种证书模式
- 自动生成安全密码
- 配置文件语法验证
### 🌐 域名优化
- 自动测试多个优质域名
- 按延迟排序选择最优伪装域名
- 支持自定义域名测试
- 实时延迟监控
### 🔧 进阶功能
- 端口修改和冲突检测
- 混淆配置管理
- 端口跳跃设置
- iptables 规则自动化
### 📊 服务管理
- 实时服务状态监控
- 详细的日志查看功能
- 配置文件备份和恢复
- 性能监控
## 技术架构
### 模块化设计
```
hy2-manager/
├── hy2-manager.sh # 主控制脚本
├── scripts/ # 功能模块
│ ├── install.sh # 安装模块
│ ├── config.sh # 配置生成模块
│ ├── service.sh # 服务管理模块
│ ├── domain-test.sh # 域名测试模块
│ └── advanced.sh # 进阶配置模块
├── templates/ # 配置模板
│ ├── acme-config.yaml # ACME 配置模板
│ ├── self-cert-config.yaml # 自签名配置模板
│ ├── advanced-config.yaml # 高级配置模板
│ └── client-config.yaml # 客户端配置示例
└── docs/ # 文档目录
├── README.md # 项目说明
├── USAGE.md # 使用说明
└── PROJECT_OVERVIEW.md # 项目总览
```
### 核心功能模块
#### 1. 安装模块 (install.sh)
- 系统环境检测
- 依赖包安装
- Hysteria2 下载和安装
- 预安装检查
- 端口占用检测
#### 2. 配置生成模块 (config.sh)
- ACME 自动证书配置
- 自签名证书生成
- 密码生成和验证
- 域名和邮箱验证
- 配置文件生成
#### 3. 域名测试模块 (domain-test.sh)
- 批量域名延迟测试
- 结果排序和展示
- 交互式域名选择
- 自定义域名测试
- 配置文件更新
#### 4. 服务管理模块 (service.sh)
- 服务状态监控
- 启动/停止/重启操作
- 开机自启管理
- 实时和历史日志查看
- 配置文件操作
#### 5. 进阶配置模块 (advanced.sh)
- 端口修改
- 混淆配置管理
- 端口跳跃设置
- iptables 规则管理
- 配置状态查看
## 安全特性
### 密码安全
- 自动生成强密码
- 支持自定义密码
- 密码强度验证
### 证书管理
- ACME 自动续期
- 自签名证书生成
- 证书权限管理
### 配置安全
- 配置文件权限控制
- 自动备份机制
- 语法验证
### 网络安全
- 防火墙配置提醒
- 端口占用检测
- iptables 规则管理
## 兼容性
### 支持的操作系统
- Ubuntu 18.04+
- Debian 9+
- CentOS 7+
- RHEL 7+
- Fedora 30+
### 系统要求
- Linux 内核 3.10+
- Root 权限
- 网络连接
- 至少 100MB 可用空间
## 使用场景
### 个人用户
- 快速搭建个人代理服务器
- 学习和测试 Hysteria2
- 家庭网络优化
### 企业用户
- 内网穿透
- 分支机构连接
- 网络加速
### 开发者
- 开发环境搭建
- 网络调试
- 性能测试
## 性能优化
### 域名选择优化
- 自动测试延迟
- 智能选择最优域名
- 减少连接时间
### 配置优化
- 合理的默认参数
- 带宽限制设置
- 混淆配置优化
### 系统优化
- 内核参数调优建议
- 防火墙规则优化
- 日志轮转配置
## 扩展性
### 模块化架构
- 易于添加新功能
- 独立的功能模块
- 清晰的接口定义
### 配置模板
- 支持多种配置模式
- 易于扩展新模板
- 参数化配置
### 插件机制
- 支持自定义脚本
- 钩子函数支持
- 第三方集成
## 维护和支持
### 日志系统
- 详细的操作日志
- 错误信息记录
- 性能监控数据
### 备份机制
- 自动配置备份
- 版本控制
- 快速恢复
### 更新机制
- 在线更新检查
- 增量更新支持
- 回滚机制
## 未来规划
### 功能增强
- Web 管理界面
- 多服务器管理
- 流量统计分析
- 用户管理系统
### 性能优化
- 更智能的域名选择
- 自动性能调优
- 负载均衡支持
### 生态建设
- 客户端配置生成器
- 监控告警系统
- 社区插件市场
## 贡献指南
欢迎社区贡献代码和建议:
1. Fork 项目仓库
2. 创建功能分支
3. 提交代码更改
4. 发起 Pull Request
### 代码规范
- 使用 Bash 最佳实践
- 添加详细注释
- 遵循项目结构
- 编写测试用例
### 文档要求
- 更新相关文档
- 添加使用示例
- 翻译多语言版本
## 许可证
本项目采用 MIT 许可证,详见 LICENSE 文件。
+26 -14
View File
@@ -5,12 +5,12 @@
## 功能特性
- 🚀 **一键安装/卸载** Hysteria2 服务器
- ⚙️ **智能配置生成** 支持 ACME 自动证书和自签名证书,智能域名配置
- ⚙️ **智能配置生成** 支持 ACME 自动证书和自签名证书
- 🌐 **服务器域名管理** 配置和验证服务器域名解析
- 🔧 **智能端口跳跃** 配置后自动检测和管理端口跳跃状态
- 📊 **智能服务管理** 配置后询问是否立即重启服务
- 📱 **多客户端支持** 生成适配不同客户端的订阅链接
- 📝 **配置模板** 预设多种常用配置模板
- 🛠️ **配置管理** 图形化修改配置参数或直接编辑配置文件
## 快速开始
@@ -47,11 +47,10 @@ sudo ./hy2-manager.sh
4. **管理服务** - 启动/停止/重启/查看状态
5. **查看日志** - 查看服务运行日志
6. **测试伪装域名** - 测试并选择最优伪装域名
7. **进阶配置** - 端口跳跃、混淆等高级设置
8. **节点信息** - 显示节点链接、订阅链接和客户端配置
9. **卸载服务** - 提供两种卸载方式:
- 仅卸载程序 (保留配置文件和证书)
- 完全卸载 (删除所有文件)
7. **服务器域名配置** - 设置和验证服务器域名
8. **配置管理** - 修改配置参数或编辑配置文件
9. **节点信息** - 显示节点链接、订阅链接和客户端配置
10. **卸载服务** - 提供多种卸载选项
## 配置模式
@@ -61,7 +60,6 @@ sudo ./hy2-manager.sh
- **伪装域名**: 自动测试选择延迟最低的域名
- **安全特性**: 自动生成认证密码和混淆密码
- **网络优化**: 自动配置端口跳跃 (20000-50000)
- **网卡检测**: 自动识别网络接口
- **适用场景**: 快速部署、测试环境、新手用户
### ACME 自动证书模式
@@ -74,23 +72,34 @@ sudo ./hy2-manager.sh
- 无需域名,快速部署
- 适合测试环境
## 配置管理功能
新增的配置管理功能允许您:
- **查看当前配置** - 显示完整配置文件内容
- **修改认证密码** - 更改或生成新的认证密码
- **修改端口设置** - 更改服务监听端口
- **修改混淆设置** - 启用/禁用/修改混淆配置
- **打开配置文件编辑** - 使用文本编辑器直接修改配置
所有配置修改都会自动备份原配置文件,并可选择立即重启服务应用更改。
## 目录结构
```
s-hy2/
├── hy2-manager.sh # 主脚本
├── quick-install.sh # 一键安装脚本
├── install.sh # 独立安装脚本
├── scripts/ # 功能脚本目录
│ ├── install.sh # 安装脚本
│ ├── config.sh # 配置生成脚本 (含一键快速配置)
│ ├── service.sh # 服务管理脚本
│ ├── domain-test.sh # 域名测试脚本
│ ├── advanced.sh # 进阶配置脚本
│ └── node-info.sh # 节点信息脚本
├── templates/ # 配置模板目录
│ ├── acme-config.yaml # ACME 配置模板
│ ├── self-cert-config.yaml # 自签名配置模板
│ ├── advanced-config.yaml # 高级配置模板
│ └── client-config.yaml # 客户端配置示例
└── README.md # 说明文档
```
@@ -119,7 +128,7 @@ sudo hy2-manager
### 完整部署流程
```bash
# 1. 一键安装
curl -fsSL https://raw.githubusercontent.com/your-repo/s-hy2/main/quick-install.sh | sudo bash
curl -fsSL https://raw.githubusercontent.com/sindricn/s-hy2/main/quick-install.sh | sudo bash
# 2. 启动脚本
sudo s-hy2
@@ -127,7 +136,7 @@ sudo s-hy2
# 3. 按菜单操作
# 选择 1 -> 安装 Hysteria2
# 选择 2 -> 一键快速配置
# 选择 8 -> 查看节点信息
# 选择 9 -> 查看节点信息
```
### 预期输出
@@ -163,17 +172,20 @@ sudo s-hy2
## 常见问题
### Q: 如何修改配置参数?
A: 运行 `sudo s-hy2`,选择菜单 "8. 配置管理",可以图形化修改密码、端口、混淆等设置,或直接编辑配置文件。
### Q: 一键快速配置包含哪些功能?
A: 自动获取服务器IP、测试最优伪装域名、生成随机密码、创建自签名证书、配置混淆和端口跳跃、启动服务。
### Q: 如何获取节点连接信息?
A: 运行 `sudo s-hy2`,选择菜单 "8. 节点信息",可查看节点链接、订阅链接和客户端配置。
A: 运行 `sudo s-hy2`,选择菜单 "9. 节点信息",可查看节点链接、订阅链接和客户端配置。
### Q: 支持哪些操作系统?
A: Ubuntu 18.04+、Debian 9+、CentOS 7+、RHEL 7+、Fedora 30+。
### Q: 如何卸载?
A: 运行脚本选择 "9. 卸载服务",提供"仅卸载程序"和"完全卸载"两种方式
A: 运行脚本选择 "10. 卸载服务",提供多种卸载方式选择
## 许可证
-333
View File
@@ -1,333 +0,0 @@
# Hysteria2 卸载指南
本指南详细说明如何正确卸载 Hysteria2 服务器和配置管理脚本。
## 卸载方式对比
| 卸载方式 | 程序文件 | 配置文件 | 证书文件 | 用户账户 | 管理脚本 | 适用场景 |
|---------|---------|---------|---------|---------|---------|---------|
| 方式1: 仅卸载服务器 | ✅ 删除 | ❌ 保留 | ❌ 保留 | ❌ 保留 | ❌ 保留 | 临时卸载、升级、重装 |
| 方式2: 卸载服务器及配置 | ✅ 删除 | ✅ 删除 | ✅ 删除 | ✅ 删除 | ❌ 保留 | 清理配置,保留脚本 |
| 方式3: 卸载所有内容 | ✅ 删除 | ✅ 删除 | ✅ 删除 | ✅ 删除 | ✅ 删除 | 彻底清理、不再使用 |
## 方式一:仅卸载 Hysteria2 服务器
### 适用场景
- 临时卸载,计划重新安装
- 系统升级或重装前的准备
- 保留配置以备后用
- 测试不同版本
### 操作步骤
1. **运行管理脚本**
```bash
sudo s-hy2
```
2. **选择卸载选项**
- 选择 `9. 卸载服务`
- 选择 `1. 仅卸载 Hysteria2 服务器 (保留配置文件)`
3. **确认卸载**
- 输入 `y` 确认
### 卸载结果
**删除的内容:**
- `/usr/local/bin/hysteria` - 主程序文件
- `/etc/systemd/system/hysteria-server.service` - 系统服务文件
- `/etc/systemd/system/hysteria-server@.service` - 系统服务模板
**保留的内容:**
- `/etc/hysteria/config.yaml` - 配置文件
- `/etc/hysteria/server.crt` - SSL 证书 (如果存在)
- `/etc/hysteria/server.key` - SSL 私钥 (如果存在)
- `/etc/hysteria/*.backup.*` - 配置备份文件
- `hysteria` 用户账户
### 手动清理 (可选)
如果后续不再需要这些文件,可以手动清理:
```bash
# 删除配置目录
sudo rm -rf /etc/hysteria
# 删除用户账户
sudo userdel -r hysteria
# 清理 systemd 服务残留
sudo rm -f /etc/systemd/system/multi-user.target.wants/hysteria-server.service
sudo rm -f /etc/systemd/system/multi-user.target.wants/hysteria-server@*.service
sudo systemctl daemon-reload
```
## 方式二:卸载 Hysteria2 服务器及配置文件
### 适用场景
- 清理所有配置,但保留管理脚本
- 重新开始全新配置
- 清理测试环境
- 保留脚本便于重新部署
### 操作步骤
1. **运行管理脚本**
```bash
sudo s-hy2
```
2. **选择卸载选项**
- 选择 `9. 卸载服务`
- 选择 `2. 卸载 Hysteria2 服务器及配置文件`
3. **确认卸载**
- 输入 `y` 确认
### 卸载结果
**删除的内容:**
- Hysteria2 程序文件
- 所有配置文件和证书
- hysteria 用户账户
- systemd 服务文件
- 端口跳跃 iptables 规则
**保留的内容:**
- 管理脚本 (s-hy2)
## 方式三:卸载脚本及 Hysteria2 服务器和所有文件
### 适用场景
- 不再使用 Hysteria2 和管理脚本
- 彻底清理系统
- 服务器用途完全改变
- 完全移除所有相关文件
### 操作步骤
1. **运行管理脚本**
```bash
sudo s-hy2
```
2. **选择完全卸载**
- 选择 `9. 卸载服务`
- 选择 `3. 卸载脚本及 Hysteria2 服务器和所有文件`
3. **确认卸载**
- 输入 `YES` (必须大写) 确认
### 卸载过程
脚本会按以下步骤执行:
1. **清理端口跳跃配置** - 删除 iptables 规则
2. **卸载程序** - 使用官方卸载脚本
3. **删除配置** - 删除 `/etc/hysteria` 目录
4. **删除用户** - 删除 `hysteria` 用户账户
5. **清理服务** - 清理 systemd 服务残留
6. **清理规则残留** - 删除可能的 iptables 规则残留
7. **删除快捷方式** - 删除 s-hy2 和 hy2-manager 命令
8. **删除脚本目录** - 删除 `/opt/s-hy2` 目录
### 卸载结果
**完全删除的内容:**
- 所有程序文件
- 所有配置文件和备份
- 所有 SSL 证书
- hysteria 用户账户
- systemd 服务文件
- 端口跳跃配置和规则
- 管理脚本和快捷命令
- 桌面快捷方式
## 卸载验证
### 检查程序是否已删除
```bash
# 检查程序文件
which hysteria
# 应该显示: hysteria not found
# 检查命令是否可用
hysteria --version
# 应该显示: command not found
```
### 检查服务状态
```bash
# 检查服务状态
sudo systemctl status hysteria-server
# 应该显示: Unit hysteria-server.service could not be found
# 检查服务文件
ls -la /etc/systemd/system/hysteria-server*
# 应该显示: No such file or directory
```
### 检查配置文件 (仅程序卸载时)
```bash
# 检查配置目录
ls -la /etc/hysteria/
# 仅程序卸载: 显示配置文件
# 完全卸载: No such file or directory
```
### 检查用户账户 (仅程序卸载时)
```bash
# 检查用户是否存在
id hysteria
# 仅程序卸载: 显示用户信息
# 完全卸载: no such user
```
### 检查端口监听
```bash
# 检查端口是否还在监听
sudo netstat -tulnp | grep :443
# 应该没有 hysteria 相关的监听
```
## 重新安装
### 从方式1卸载后重新安装
由于配置文件保留,重新安装后可以直接使用:
```bash
# 重新安装
sudo s-hy2
# 选择 "1. 安装 Hysteria2"
# 启动服务
sudo s-hy2
# 选择 "4. 管理服务" -> "1. 启动服务"
```
### 从方式2卸载后重新安装
需要重新配置:
```bash
# 安装程序
sudo s-hy2
# 选择 "1. 安装 Hysteria2"
# 一键快速配置
sudo s-hy2
# 选择 "2. 一键快速配置"
```
### 从方式3卸载后重新安装
需要重新安装脚本和配置:
```bash
# 重新安装脚本
curl -fsSL https://raw.githubusercontent.com/sindricn/s-hy2/main/quick-install.sh | sudo bash
# 运行脚本
sudo s-hy2
# 安装 Hysteria2
# 选择 "1. 安装 Hysteria2"
# 一键快速配置
# 选择 "2. 一键快速配置"
```
## 卸载管理脚本
如果不再需要配置管理脚本:
```bash
# 方法1: 使用脚本内置卸载功能 (推荐)
sudo s-hy2
# 选择 "9. 卸载服务" -> "3. 卸载脚本及 Hysteria2 服务器和所有文件"
# 方法2: 使用安装脚本卸载
sudo /opt/s-hy2/install.sh --uninstall
# 方法3: 手动删除
sudo rm -rf /opt/s-hy2
sudo rm -f /usr/local/bin/hy2-manager
sudo rm -f /usr/local/bin/s-hy2
sudo rm -f ~/Desktop/S-Hy2-Manager.desktop # 如果创建了桌面快捷方式
```
## 故障排除
### 卸载失败
如果卸载过程中出现错误:
1. **检查网络连接**
```bash
curl -I https://get.hy2.sh/
```
2. **手动停止服务**
```bash
sudo systemctl stop hysteria-server
sudo systemctl disable hysteria-server
```
3. **手动删除文件**
```bash
sudo rm -f /usr/local/bin/hysteria
sudo rm -f /etc/systemd/system/hysteria-server*
sudo systemctl daemon-reload
```
### 残留文件清理
如果发现有残留文件:
```bash
# 查找所有相关文件
sudo find / -name "*hysteria*" 2>/dev/null
# 查找相关进程
ps aux | grep hysteria
# 查找相关端口
sudo netstat -tulnp | grep hysteria
```
### 权限问题
如果遇到权限问题:
```bash
# 确保以 root 权限运行
sudo su -
# 强制删除文件
sudo rm -rf /etc/hysteria
sudo userdel -f hysteria 2>/dev/null
```
## 注意事项
1. **备份重要数据** - 卸载前备份重要的配置文件
2. **确认卸载方式** - 根据实际需求选择合适的卸载方式
3. **检查依赖服务** - 确保没有其他服务依赖 Hysteria2
4. **防火墙规则** - 卸载后可能需要手动清理防火墙规则
5. **客户端配置** - 卸载后记得更新客户端配置
## 常见问题
**Q: 卸载后还能恢复配置吗?**
A: 如果选择"仅卸载程序",配置文件会保留,重新安装后可以直接使用。
**Q: 完全卸载后如何恢复?**
A: 完全卸载后无法自动恢复,需要重新配置。建议卸载前备份配置文件。
**Q: 卸载会影响其他服务吗?**
A: 正常情况下不会,但如果有自定义的 iptables 规则可能需要手动清理。
**Q: 如何确认卸载是否成功?**
A: 按照"卸载验证"部分的步骤检查各项内容是否已删除。
-307
View File
@@ -1,307 +0,0 @@
# Hysteria2 配置管理脚本使用说明
## 快速开始
### 方法一:一键安装(推荐)
```bash
# 一键安装到服务器
curl -fsSL https://raw.githubusercontent.com/sindricn/s-hy2/main/quick-install.sh | sudo bash
# 运行脚本
sudo s-hy2
```
### 方法二:手动安装
```bash
# 下载脚本
wget https://raw.githubusercontent.com/sindricn/s-hy2/main/hy2-manager.sh
# 添加执行权限
chmod +x hy2-manager.sh
# 运行脚本
sudo ./hy2-manager.sh
```
## 使用流程
### 新手推荐流程 (一键快速配置)
1. **运行管理脚本**
```bash
sudo s-hy2
```
2. **安装 Hysteria2**
- 选择菜单选项 `1. 安装 Hysteria2`
- 脚本会自动检测系统环境并安装
3. **一键快速配置**
- 选择菜单选项 `2. 一键快速配置`
- 脚本会自动执行以下步骤:
- 获取服务器公网IP和网络接口
- 测试并选择最优伪装域名
- 生成随机认证密码和混淆密码
- 生成自签名证书
- 配置端口跳跃 (20000-50000)
- 启动服务并设置开机自启
4. **查看节点信息**
- 选择菜单选项 `8. 节点信息`
- 获取节点链接、订阅链接和客户端配置
### 高级用户流程 (手动配置)
1. **安装 Hysteria2** - 选择菜单选项 `1. 安装 Hysteria2`
2. **手动配置** - 选择菜单选项 `3. 手动配置`
3. **管理服务** - 选择菜单选项 `4. 管理服务`
## 详细功能说明
### 安装功能
脚本会自动:
- 检查系统环境
- 更新系统包
- 安装必要依赖
- 下载并安装 Hysteria2
- 创建配置目录
### 配置生成
支持两种配置模式:
#### ACME 自动证书模式 (推荐)
- **优点**: 自动申请和续期证书,安全性高
- **要求**: 需要有效域名,域名需解析到服务器
- **适用**: 生产环境
配置步骤:
1. 输入域名 (如: example.com)
2. 输入邮箱地址
3. 设置认证密码
4. 选择伪装网站
#### 自签名证书模式
- **优点**: 无需域名,快速部署
- **缺点**: 证书不被信任,需要客户端忽略证书错误
- **适用**: 测试环境
配置步骤:
1. 选择伪装域名
2. 设置认证密码
3. 自动生成自签名证书
### 伪装域名优化
脚本提供智能域名选择功能:
1. **自动测试**: 测试预设的优质域名列表
2. **延迟排序**: 按延迟从低到高排序
3. **交互选择**: 可手动选择最优域名
4. **自定义测试**: 支持测试自定义域名
预设域名包括:
- Cloudflare CDN
- Google 服务
- Microsoft 服务
- Apple 服务
- AWS 服务
- 其他知名 CDN
### 服务管理
提供完整的服务管理功能:
#### 服务操作
- **启动服务**: `systemctl start hysteria-server`
- **停止服务**: `systemctl stop hysteria-server`
- **重启服务**: `systemctl restart hysteria-server`
- **开机自启**: `systemctl enable hysteria-server`
#### 状态查看
- 服务运行状态
- 端口监听状态
- 进程信息
- 配置文件状态
#### 日志管理
- 实时日志查看
- 历史日志查询
- 按时间筛选
- 按行数限制
### 进阶配置
#### 端口修改
- 修改默认 443 端口
- 检查端口占用
- 自动更新配置
- 防火墙提醒
#### 混淆配置
- 添加 Salamander 混淆
- 自动生成混淆密码
- 移除混淆配置
- 客户端配置提醒
#### 端口跳跃
- 自动检测网卡
- 配置端口范围
- 生成 iptables 规则
- 规则持久化
## 配置文件说明
### 基本配置项
```yaml
# 监听端口
listen: :443
# 认证配置
auth:
type: password
password: your_password
# 伪装配置
masquerade:
type: proxy
proxy:
url: https://example.com/
rewriteHost: true
```
### 高级配置项
```yaml
# 混淆配置
obfs:
type: salamander
salamander:
password: obfs_password
# 带宽限制
bandwidth:
up: 1 gbps
down: 1 gbps
# ACL 访问控制
acl: /etc/hysteria/acl.txt
```
## 卸载说明
脚本提供两种卸载方式:
### 方式一:仅卸载程序 (推荐)
这种方式只删除 Hysteria2 程序文件,保留配置文件和证书:
1. 选择菜单选项 `7. 卸载服务`
2. 选择 `1. 仅卸载程序 (保留配置文件和证书)`
3. 确认卸载
**保留的文件:**
- 配置文件:`/etc/hysteria/config.yaml`
- SSL 证书:`/etc/hysteria/server.crt` 和 `/etc/hysteria/server.key`
- 用户账户:`hysteria`
**如需完全清理,可手动执行:**
```bash
# 删除配置文件和证书
sudo rm -rf /etc/hysteria
# 删除用户账户
sudo userdel -r hysteria
# 清理 systemd 服务残留
sudo rm -f /etc/systemd/system/multi-user.target.wants/hysteria-server.service
sudo rm -f /etc/systemd/system/multi-user.target.wants/hysteria-server@*.service
sudo systemctl daemon-reload
```
### 方式二:完全卸载
这种方式删除所有 Hysteria2 相关文件:
1. 选择菜单选项 `7. 卸载服务`
2. 选择 `2. 完全卸载 (删除所有文件)`
3. 输入 `YES` 确认
**删除的内容:**
- Hysteria2 程序文件
- 所有配置文件和证书
- hysteria 用户账户
- systemd 服务文件
- 端口跳跃 iptables 规则
## 故障排除
### 常见问题
1. **服务启动失败**
- 检查配置文件语法
- 查看服务日志
- 确认端口未被占用
2. **证书申请失败**
- 确认域名解析正确
- 检查防火墙设置
- 验证邮箱地址
3. **连接失败**
- 检查防火墙规则
- 确认端口开放
- 验证客户端配置
### 日志查看
```bash
# 查看服务状态
systemctl status hysteria-server
# 查看实时日志
journalctl -f -u hysteria-server
# 查看历史日志
journalctl -u hysteria-server --since "1 hour ago"
```
### 配置验证
```bash
# 验证配置文件语法
hysteria server --config /etc/hysteria/config.yaml --check
# 测试配置文件
hysteria server --config /etc/hysteria/config.yaml --test
```
## 安全建议
1. **使用强密码**: 认证密码和混淆密码都应使用强密码
2. **定期更新**: 定期更新 Hysteria2 到最新版本
3. **监控日志**: 定期检查服务日志,发现异常及时处理
4. **防火墙配置**: 只开放必要的端口
5. **证书管理**: ACME 证书会自动续期,自签名证书需要定期更新
## 性能优化
1. **选择最优伪装域名**: 使用脚本的域名测试功能
2. **合理设置带宽**: 根据服务器带宽设置合理限制
3. **启用混淆**: 在网络环境较差时启用混淆
4. **端口跳跃**: 在需要时配置端口跳跃提高稳定性
## 客户端配置
服务器配置完成后,需要在客户端配置相应参数:
- 服务器地址和端口
- 认证密码
- 混淆密码 (如果启用)
- 忽略证书错误 (自签名证书模式)
具体客户端配置请参考 Hysteria2 官方文档。
-529
View File
@@ -1,529 +0,0 @@
#!/bin/bash
# Hysteria2 配置管理脚本演示程序
# 此脚本用于演示项目功能,不会实际安装或修改系统
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
PURPLE='\033[0;35m'
CYAN='\033[0;36m'
NC='\033[0m'
# 演示标题
print_demo_header() {
clear
echo -e "${CYAN}================================================${NC}"
echo -e "${CYAN} Hysteria2 配置管理脚本 - 功能演示${NC}"
echo -e "${CYAN}================================================${NC}"
echo ""
echo -e "${YELLOW}注意: 这是演示模式,不会实际修改系统${NC}"
echo ""
}
# 演示菜单
show_demo_menu() {
echo -e "${BLUE}演示功能列表:${NC}"
echo ""
echo -e "${GREEN}1.${NC} 项目结构展示"
echo -e "${GREEN}2.${NC} 配置模板预览"
echo -e "${GREEN}3.${NC} 域名测试演示"
echo -e "${GREEN}4.${NC} 一键快速配置演示"
echo -e "${GREEN}5.${NC} 脚本功能介绍"
echo -e "${GREEN}6.${NC} 安装流程演示"
echo -e "${GREEN}7.${NC} 卸载方式说明"
echo -e "${GREEN}8.${NC} 使用场景说明"
echo -e "${RED}0.${NC} 退出演示"
echo ""
echo -n -e "${BLUE}请选择演示内容 [0-8]: ${NC}"
}
# 项目结构展示
demo_project_structure() {
echo -e "${BLUE}项目结构展示${NC}"
echo ""
echo -e "${CYAN}hy2-manager/${NC}"
echo -e "├── ${GREEN}hy2-manager.sh${NC} # 主控制脚本"
echo -e "├── ${GREEN}install.sh${NC} # 一键安装脚本"
echo -e "├── ${BLUE}scripts/${NC} # 功能模块目录"
echo -e "│ ├── ${YELLOW}install.sh${NC} # 安装模块"
echo -e "│ ├── ${YELLOW}config.sh${NC} # 配置生成模块"
echo -e "│ ├── ${YELLOW}service.sh${NC} # 服务管理模块"
echo -e "│ ├── ${YELLOW}domain-test.sh${NC} # 域名测试模块"
echo -e "│ └── ${YELLOW}advanced.sh${NC} # 进阶配置模块"
echo -e "├── ${BLUE}templates/${NC} # 配置模板目录"
echo -e "│ ├── ${PURPLE}acme-config.yaml${NC} # ACME 配置模板"
echo -e "│ ├── ${PURPLE}self-cert-config.yaml${NC} # 自签名配置模板"
echo -e "│ ├── ${PURPLE}advanced-config.yaml${NC} # 高级配置模板"
echo -e "│ └── ${PURPLE}client-config.yaml${NC} # 客户端配置示例"
echo -e "├── ${GREEN}README.md${NC} # 项目说明"
echo -e "├── ${GREEN}USAGE.md${NC} # 使用说明"
echo -e "└── ${GREEN}PROJECT_OVERVIEW.md${NC} # 项目总览"
echo ""
echo -e "${YELLOW}核心特性:${NC}"
echo "✓ 模块化设计,易于维护和扩展"
echo "✓ 丰富的配置模板,适应不同场景"
echo "✓ 完整的文档体系,便于学习使用"
echo ""
}
# 配置模板预览
demo_config_templates() {
echo -e "${BLUE}配置模板预览${NC}"
echo ""
echo -e "${CYAN}1. ACME 自动证书模式${NC}"
echo -e "${YELLOW}特点: 自动申请和续期证书,适合生产环境${NC}"
echo "listen: :443"
echo "acme:"
echo " domains: [your.domain.net]"
echo " email: your@email.com"
echo "auth:"
echo " type: password"
echo " password: ********"
echo ""
echo -e "${CYAN}2. 自签名证书模式${NC}"
echo -e "${YELLOW}特点: 无需域名,快速部署,适合测试环境${NC}"
echo "listen: :443"
echo "tls:"
echo " cert: /etc/hysteria/server.crt"
echo " key: /etc/hysteria/server.key"
echo "auth:"
echo " type: password"
echo " password: ********"
echo ""
echo -e "${CYAN}3. 进阶配置选项${NC}"
echo -e "${YELLOW}包含: 混淆、带宽限制、ACL 等高级功能${NC}"
echo "obfs:"
echo " type: salamander"
echo " salamander:"
echo " password: ********"
echo "bandwidth:"
echo " up: 1 gbps"
echo " down: 1 gbps"
echo ""
}
# 域名测试演示
demo_domain_test() {
echo -e "${BLUE}域名测试功能演示${NC}"
echo ""
echo -e "${YELLOW}预设优质域名列表:${NC}"
local domains=(
"www.cloudflare.com"
"www.apple.com"
"www.microsoft.com"
"cdn.jsdelivr.net"
"fonts.googleapis.com"
)
echo -e "${CYAN}正在模拟测试域名延迟...${NC}"
echo ""
printf "%-5s %-30s %s\n" "排名" "域名" "延迟(ms)"
echo "----------------------------------------"
for i in "${!domains[@]}"; do
local latency=$((RANDOM % 200 + 50))
printf "%-5d %-30s %d ms\n" "$((i+1))" "${domains[$i]}" "$latency"
sleep 0.5
done
echo ""
echo -e "${GREEN}✓ 推荐使用: ${domains[0]} (延迟最低)${NC}"
echo ""
echo -e "${YELLOW}功能特点:${NC}"
echo "• 自动测试多个优质域名"
echo "• 按延迟排序选择最优"
echo "• 支持自定义域名测试"
echo "• 一键更新配置文件"
echo ""
}
# 一键快速配置演示
demo_quick_setup() {
echo -e "${BLUE}一键快速配置功能演示${NC}"
echo ""
echo -e "${CYAN}🚀 一键快速配置特性${NC}"
echo ""
echo -e "${YELLOW}完全自动化:${NC}"
echo "• 无需手动输入任何参数"
echo "• 自动检测服务器环境"
echo "• 智能选择最优配置"
echo ""
echo -e "${YELLOW}配置内容:${NC}"
echo "• 证书方案: 自签名证书 (无需域名)"
echo "• 伪装域名: 自动测试选择延迟最低"
echo "• 认证密码: 随机生成 16 位强密码"
echo "• 混淆密码: 随机生成 16 位强密码"
echo "• 端口跳跃: 20000-50000 -> 443"
echo "• 网卡检测: 自动识别默认网络接口"
echo ""
echo -e "${CYAN}🔄 配置流程模拟${NC}"
echo ""
# 模拟配置过程
echo -e "${BLUE}步骤 1/7: 获取服务器信息...${NC}"
sleep 1
echo "服务器IP: 192.168.1.100"
echo "网络接口: eth0"
echo ""
echo -e "${BLUE}步骤 2/7: 测试最优伪装域名...${NC}"
sleep 1
local domains=("www.cloudflare.com" "cdn.jsdelivr.net" "www.apple.com")
for domain in "${domains[@]}"; do
local latency=$((RANDOM % 100 + 50))
echo "测试 $domain ... ${latency}ms"
sleep 0.3
done
echo -e "${GREEN}最优伪装域名: cdn.jsdelivr.net (52ms)${NC}"
echo ""
echo -e "${BLUE}步骤 3/7: 生成随机密码...${NC}"
sleep 1
echo "认证密码: Kx9mP2nQ8vR5wE7t"
echo "混淆密码: Hy6bN4jM1sL3xC9z"
echo ""
echo -e "${BLUE}步骤 4/7: 生成自签名证书...${NC}"
sleep 1
echo "证书生成完成"
echo ""
echo -e "${BLUE}步骤 5/7: 生成配置文件...${NC}"
sleep 1
echo "配置文件生成完成"
echo ""
echo -e "${BLUE}步骤 6/7: 配置端口跳跃...${NC}"
sleep 1
echo "端口跳跃配置成功 (20000-50000 -> 443)"
echo ""
echo -e "${BLUE}步骤 7/7: 启动服务...${NC}"
sleep 1
echo -e "${GREEN}服务启动成功!${NC}"
echo ""
echo -e "${CYAN}📋 配置完成信息${NC}"
echo ""
echo -e "${YELLOW}服务器信息:${NC}"
echo "服务器地址: 192.168.1.100:443"
echo "认证密码: Kx9mP2nQ8vR5wE7t"
echo "混淆密码: Hy6bN4jM1sL3xC9z"
echo "伪装域名: cdn.jsdelivr.net"
echo "端口跳跃: 20000-50000"
echo ""
echo -e "${YELLOW}节点链接:${NC}"
echo "hysteria2://Kx9mP2nQ8vR5wE7t@192.168.1.100:443?sni=cdn.jsdelivr.net&insecure=1&obfs=salamander&obfs-password=Hy6bN4jM1sL3xC9z#Hysteria2-QuickSetup"
echo ""
echo -e "${YELLOW}客户端配置:${NC}"
cat << EOF
server: 192.168.1.100:443
auth: Kx9mP2nQ8vR5wE7t
tls:
sni: cdn.jsdelivr.net
insecure: true
obfs:
type: salamander
salamander:
password: Hy6bN4jM1sL3xC9z
socks5:
listen: 127.0.0.1:1080
http:
listen: 127.0.0.1:8080
EOF
echo ""
echo -e "${GREEN}✅ 一键快速配置演示完成!${NC}"
echo ""
echo -e "${YELLOW}优势总结:${NC}"
echo "• 零配置: 无需任何手动输入"
echo "• 高安全: 随机密码 + 混淆 + 端口跳跃"
echo "• 智能化: 自动选择最优伪装域名"
echo "• 快速部署: 3分钟内完成全部配置"
echo "• 新手友好: 适合没有技术背景的用户"
echo ""
}
# 脚本功能介绍
demo_script_features() {
echo -e "${BLUE}脚本功能详细介绍${NC}"
echo ""
echo -e "${CYAN}🚀 安装管理${NC}"
echo "• 一键安装 Hysteria2 服务器"
echo "• 自动检测系统环境和依赖"
echo "• 预安装检查和端口冲突检测"
echo "• 完整卸载功能"
echo ""
echo -e "${CYAN}⚙️ 配置生成${NC}"
echo "• 交互式配置向导"
echo "• ACME 和自签名两种证书模式"
echo "• 自动生成安全密码"
echo "• 智能伪装域名选择"
echo ""
echo -e "${CYAN}📊 服务管理${NC}"
echo "• 实时服务状态监控"
echo "• 启动/停止/重启操作"
echo "• 开机自启管理"
echo "• 详细日志查看"
echo ""
echo -e "${CYAN}🔧 进阶配置${NC}"
echo "• 端口修改和冲突检测"
echo "• 混淆配置管理"
echo "• 端口跳跃设置"
echo "• iptables 规则自动化"
echo ""
echo -e "${CYAN}🌐 域名优化${NC}"
echo "• 批量域名延迟测试"
echo "• 智能选择最优伪装域名"
echo "• 自定义域名测试"
echo "• 配置文件自动更新"
echo ""
}
# 安装流程演示
demo_installation_flow() {
echo -e "${BLUE}安装流程演示${NC}"
echo ""
echo -e "${CYAN}步骤 1: 下载安装脚本${NC}"
echo "wget https://raw.githubusercontent.com/your-repo/hy2-manager/main/install.sh"
echo "chmod +x install.sh"
echo ""
echo -e "${CYAN}步骤 2: 运行安装脚本${NC}"
echo "sudo ./install.sh"
echo ""
echo -e "${YELLOW}安装过程:${NC}"
echo "✓ 检测系统环境"
echo "✓ 安装必要依赖"
echo "✓ 下载脚本文件"
echo "✓ 创建命令快捷方式"
echo "✓ 设置执行权限"
echo ""
echo -e "${CYAN}步骤 3: 运行管理脚本${NC}"
echo "sudo hy2-manager"
echo ""
echo -e "${YELLOW}使用流程:${NC}"
echo "1. 选择 '安装 Hysteria2'"
echo "2. 选择 '生成配置文件'"
echo "3. 选择 '管理服务' -> '启动服务'"
echo "4. 配置客户端连接"
echo ""
}
# 卸载方式说明
demo_uninstall_options() {
echo -e "${BLUE}卸载方式详细说明${NC}"
echo ""
echo -e "${CYAN}📋 卸载方式对比${NC}"
echo ""
printf "%-20s %-8s %-8s %-8s %-8s %-8s %-15s\n" "卸载方式" "程序" "配置" "证书" "用户" "脚本" "适用场景"
echo "----------------------------------------------------------------------------------------"
printf "%-20s %-8s %-8s %-8s %-8s %-8s %-15s\n" "1.仅卸载服务器" "✅删除" "❌保留" "❌保留" "❌保留" "❌保留" "临时卸载、升级"
printf "%-20s %-8s %-8s %-8s %-8s %-8s %-15s\n" "2.卸载服务器及配置" "✅删除" "✅删除" "✅删除" "✅删除" "❌保留" "清理配置"
printf "%-20s %-8s %-8s %-8s %-8s %-8s %-15s\n" "3.卸载所有内容" "✅删除" "✅删除" "✅删除" "✅删除" "✅删除" "彻底清理"
echo ""
echo -e "${CYAN}🔧 方式一:仅卸载 Hysteria2 服务器${NC}"
echo ""
echo -e "${YELLOW}适用场景:${NC}"
echo "• 临时卸载,计划重新安装"
echo "• 系统升级或重装前的准备"
echo "• 保留配置以备后用"
echo "• 测试不同版本"
echo ""
echo -e "${YELLOW}操作步骤:${NC}"
echo "1. sudo s-hy2"
echo "2. 选择 '9. 卸载服务'"
echo "3. 选择 '1. 仅卸载 Hysteria2 服务器'"
echo "4. 确认卸载"
echo ""
echo -e "${YELLOW}保留内容:${NC}"
echo "• /etc/hysteria/ - 配置文件和证书"
echo "• hysteria 用户账户"
echo "• s-hy2 管理脚本"
echo ""
echo -e "${CYAN}🗑️ 方式二:卸载 Hysteria2 服务器及配置文件${NC}"
echo ""
echo -e "${YELLOW}适用场景:${NC}"
echo "• 清理所有配置,但保留管理脚本"
echo "• 重新开始全新配置"
echo "• 清理测试环境"
echo ""
echo -e "${YELLOW}操作步骤:${NC}"
echo "1. sudo s-hy2"
echo "2. 选择 '9. 卸载服务'"
echo "3. 选择 '2. 卸载 Hysteria2 服务器及配置文件'"
echo "4. 确认卸载"
echo ""
echo -e "${YELLOW}保留内容:${NC}"
echo "• s-hy2 管理脚本"
echo ""
echo -e "${CYAN}💥 方式三:卸载脚本及 Hysteria2 服务器和所有文件${NC}"
echo ""
echo -e "${YELLOW}适用场景:${NC}"
echo "• 不再使用 Hysteria2 和管理脚本"
echo "• 彻底清理系统"
echo "• 服务器用途完全改变"
echo ""
echo -e "${YELLOW}操作步骤:${NC}"
echo "1. sudo s-hy2"
echo "2. 选择 '9. 卸载服务'"
echo "3. 选择 '3. 卸载脚本及 Hysteria2 服务器和所有文件'"
echo "4. 输入 'YES' 确认"
echo ""
echo -e "${YELLOW}删除内容:${NC}"
echo "• 所有程序文件和配置"
echo "• hysteria 用户账户"
echo "• s-hy2 管理脚本"
echo "• 所有快捷命令"
echo ""
echo -e "${CYAN}🔍 卸载验证${NC}"
echo ""
echo -e "${YELLOW}检查命令:${NC}"
echo "# 检查程序是否删除"
echo "which hysteria"
echo ""
echo "# 检查服务状态"
echo "sudo systemctl status hysteria-server"
echo ""
echo "# 检查配置文件 (方式1可能存在)"
echo "ls -la /etc/hysteria/"
echo ""
echo "# 检查用户账户 (方式1可能存在)"
echo "id hysteria"
echo ""
echo "# 检查管理脚本 (方式1和2存在)"
echo "which s-hy2"
echo ""
echo -e "${YELLOW}重新安装:${NC}"
echo "curl -fsSL https://raw.githubusercontent.com/sindricn/s-hy2/main/quick-install.sh | sudo bash"
echo ""
}
# 使用场景说明
demo_use_cases() {
echo -e "${BLUE}使用场景说明${NC}"
echo ""
echo -e "${CYAN}🏠 个人用户${NC}"
echo "• 搭建个人代理服务器"
echo "• 学习网络技术"
echo "• 家庭网络优化"
echo "• 游戏加速"
echo ""
echo -e "${CYAN}🏢 企业用户${NC}"
echo "• 分支机构网络连接"
echo "• 内网穿透"
echo "• 远程办公支持"
echo "• 网络安全加固"
echo ""
echo -e "${CYAN}👨‍💻 开发者${NC}"
echo "• 开发环境搭建"
echo "• 网络调试工具"
echo "• 性能测试"
echo "• API 接口测试"
echo ""
echo -e "${CYAN}🎓 教育机构${NC}"
echo "• 网络技术教学"
echo "• 实验环境搭建"
echo "• 学生项目支持"
echo "• 研究用途"
echo ""
}
# 主演示循环
main_demo() {
while true; do
print_demo_header
show_demo_menu
read -r choice
case $choice in
1)
echo ""
demo_project_structure
read -p "按回车键继续..."
;;
2)
echo ""
demo_config_templates
read -p "按回车键继续..."
;;
3)
echo ""
demo_domain_test
read -p "按回车键继续..."
;;
4)
echo ""
demo_quick_setup
read -p "按回车键继续..."
;;
5)
echo ""
demo_script_features
read -p "按回车键继续..."
;;
6)
echo ""
demo_installation_flow
read -p "按回车键继续..."
;;
7)
echo ""
demo_uninstall_options
read -p "按回车键继续..."
;;
8)
echo ""
demo_use_cases
read -p "按回车键继续..."
;;
0)
echo ""
echo -e "${GREEN}感谢观看 Hysteria2 配置管理脚本演示!${NC}"
echo ""
echo -e "${YELLOW}如需实际使用,请运行:${NC}"
echo "sudo ./hy2-manager.sh"
echo ""
exit 0
;;
*)
echo -e "${RED}无效选项,请重新选择${NC}"
sleep 2
;;
esac
done
}
# 运行演示
main_demo
+306 -26
View File
@@ -123,14 +123,13 @@ print_menu() {
echo -e "${GREEN} 5.${NC} 查看日志"
echo -e "${GREEN} 6.${NC} 测试伪装域名"
echo -e "${GREEN} 7.${NC} 服务器域名配置"
echo -e "${GREEN} 8.${NC} 进阶配置"
echo -e "${GREEN} 8.${NC} 配置管理"
echo -e "${GREEN} 9.${NC} 节点信息"
echo -e "${GREEN}10.${NC} 故障排除"
echo -e "${GREEN}11.${NC} 卸载服务"
echo -e "${GREEN}12.${NC} 关于脚本"
echo -e "${GREEN}10.${NC} 卸载服务"
echo -e "${GREEN}11.${NC} 关于脚本"
echo -e "${RED} 0.${NC} 退出"
echo ""
echo -n -e "${BLUE}请输入选项 [0-12]: ${NC}"
echo -n -e "${BLUE}请输入选项 [0-11]: ${NC}"
}
# 检查 Hysteria2 是否已安装
@@ -563,19 +562,46 @@ get_server_domain() {
fi
}
# 进阶配置
advanced_config() {
log_info "准备进入进阶配置..."
# 配置管理
config_management() {
while true; do
clear
echo -e "${CYAN}=== 配置管理 ===${NC}"
echo ""
if ! check_hysteria_installed; then
log_error "Hysteria2 未安装,请先安装"
wait_for_user
return
if [[ ! -f "$CONFIG_PATH" ]]; then
echo -e "${YELLOW}未找到配置文件${NC}"
echo ""
echo -e "${GREEN}1.${NC} 返回主菜单"
echo -n -e "${BLUE}请选择: ${NC}"
read -r choice
break
fi
if safe_source_script "$SCRIPTS_DIR/advanced.sh" "进阶配置脚本"; then
advanced_configuration
fi
echo -e "${YELLOW}配置管理选项:${NC}"
echo -e "${GREEN}1.${NC} 查看当前配置"
echo -e "${GREEN}2.${NC} 修改认证密码"
echo -e "${GREEN}3.${NC} 修改端口设置"
echo -e "${GREEN}4.${NC} 修改混淆设置"
echo -e "${GREEN}5.${NC} 打开配置文件编辑"
echo -e "${RED}0.${NC} 返回主菜单"
echo ""
echo -n -e "${BLUE}请选择操作 [0-5]: ${NC}"
read -r choice
case $choice in
1) view_current_config ;;
2) modify_auth_password ;;
3) modify_port_settings ;;
4) modify_obfs_settings ;;
5) edit_config_file ;;
0) break ;;
*)
log_error "无效选项"
sleep 1
;;
esac
done
}
# 节点信息
@@ -593,13 +619,268 @@ show_node_info() {
fi
}
# 故障排除
troubleshoot() {
log_info "准备进入故障排除..."
# 查看当前配置
view_current_config() {
echo ""
echo -e "${BLUE}当前配置文件内容:${NC}"
echo -e "${CYAN}================================${NC}"
cat "$CONFIG_PATH"
echo -e "${CYAN}================================${NC}"
wait_for_user
}
if safe_source_script "$SCRIPTS_DIR/troubleshoot.sh" "故障排除脚本"; then
run_diagnostics
# 修改认证密码
modify_auth_password() {
echo ""
echo -e "${BLUE}修改认证密码${NC}"
# 获取当前密码
local current_password
current_password=$(grep -E "^\s*password:" "$CONFIG_PATH" | awk '{print $2}' | tr -d '"' || echo "未设置")
echo "当前密码: $current_password"
echo ""
echo -n -e "${YELLOW}输入新密码 (回车生成随机密码): ${NC}"
read -r new_password
if [[ -z "$new_password" ]]; then
new_password=$(openssl rand -base64 12 | tr -d "=+/")
echo "生成的随机密码: $new_password"
fi
# 备份配置文件
cp "$CONFIG_PATH" "$CONFIG_PATH.bak"
# 修改密码
sed -i "s/password:.*/password: \"$new_password\"/" "$CONFIG_PATH"
log_success "认证密码已更新"
echo ""
echo -n -e "${YELLOW}是否重启服务以应用更改? [Y/n]: ${NC}"
read -r restart
if [[ ! $restart =~ ^[Nn]$ ]]; then
systemctl restart "$SERVICE_NAME"
log_success "服务已重启"
fi
wait_for_user
}
# 修改端口设置
modify_port_settings() {
echo ""
echo -e "${BLUE}修改端口设置${NC}"
# 获取当前端口
local current_port
current_port=$(grep -E "^\s*listen:" "$CONFIG_PATH" | awk -F':' '{print $3}' | tr -d ' ' || echo "443")
echo "当前端口: $current_port"
echo ""
echo -n -e "${YELLOW}输入新端口 [1-65535]: ${NC}"
read -r new_port
if [[ ! "$new_port" =~ ^[0-9]+$ ]] || [[ "$new_port" -lt 1 ]] || [[ "$new_port" -gt 65535 ]]; then
log_error "端口必须是 1-65535 之间的数字"
wait_for_user
return
fi
# 检查端口是否被占用
if ss -tuln | grep -q ":$new_port "; then
log_warn "端口 $new_port 似乎已被占用,请确认"
echo -n -e "${YELLOW}是否继续? [y/N]: ${NC}"
read -r continue
if [[ ! $continue =~ ^[Yy]$ ]]; then
return
fi
fi
# 备份配置文件
cp "$CONFIG_PATH" "$CONFIG_PATH.bak"
# 修改端口
sed -i "s/:$current_port/:$new_port/g" "$CONFIG_PATH"
log_success "端口已更新为: $new_port"
echo ""
echo -n -e "${YELLOW}是否重启服务以应用更改? [Y/n]: ${NC}"
read -r restart
if [[ ! $restart =~ ^[Nn]$ ]]; then
systemctl restart "$SERVICE_NAME"
log_success "服务已重启"
fi
wait_for_user
}
# 修改混淆设置
modify_obfs_settings() {
echo ""
echo -e "${BLUE}修改混淆设置${NC}"
# 检查当前混淆配置
local current_obfs
current_obfs=$(grep -E "^\s*type: salamander" "$CONFIG_PATH" && echo "启用" || echo "禁用")
echo "当前混淆状态: $current_obfs"
if [[ "$current_obfs" == "启用" ]]; then
local current_obfs_password
current_obfs_password=$(grep -A1 "type: salamander" "$CONFIG_PATH" | grep "password:" | awk '{print $2}' | tr -d '"')
echo "当前混淆密码: $current_obfs_password"
fi
echo ""
echo -e "${YELLOW}混淆选项:${NC}"
echo "1. 启用混淆"
echo "2. 禁用混淆"
echo "3. 修改混淆密码"
echo "0. 返回"
echo ""
echo -n -e "${BLUE}请选择: ${NC}"
read -r obfs_choice
case $obfs_choice in
1|2|3)
# 备份配置文件
cp "$CONFIG_PATH" "$CONFIG_PATH.bak"
case $obfs_choice in
1)
echo -n -e "${YELLOW}输入混淆密码 (回车生成随机密码): ${NC}"
read -r obfs_password
if [[ -z "$obfs_password" ]]; then
obfs_password=$(openssl rand -base64 12 | tr -d "=+/")
echo "生成的随机密码: $obfs_password"
fi
# 添加混淆配置
if ! grep -q "obfs:" "$CONFIG_PATH"; then
sed -i "/listen:/a\\
obfs:\\
type: salamander\\
password: \"$obfs_password\"" "$CONFIG_PATH"
else
sed -i "/obfs:/,+2c\\
obfs:\\
type: salamander\\
password: \"$obfs_password\"" "$CONFIG_PATH"
fi
log_success "混淆已启用"
;;
2)
# 删除混淆配置
sed -i '/obfs:/,+2d' "$CONFIG_PATH"
log_success "混淆已禁用"
;;
3)
if [[ "$current_obfs" == "禁用" ]]; then
log_error "当前未启用混淆"
wait_for_user
return
fi
echo -n -e "${YELLOW}输入新的混淆密码: ${NC}"
read -r new_obfs_password
if [[ -z "$new_obfs_password" ]]; then
log_error "混淆密码不能为空"
wait_for_user
return
fi
# 修改混淆密码
sed -i "/obfs:/,+2s/password:.*/password: \"$new_obfs_password\"/" "$CONFIG_PATH"
log_success "混淆密码已更新"
;;
esac
echo ""
echo -n -e "${YELLOW}是否重启服务以应用更改? [Y/n]: ${NC}"
read -r restart
if [[ ! $restart =~ ^[Nn]$ ]]; then
systemctl restart "$SERVICE_NAME"
log_success "服务已重启"
fi
;;
0)
return
;;
*)
log_error "无效选择"
;;
esac
wait_for_user
}
# 编辑配置文件
edit_config_file() {
echo ""
echo -e "${BLUE}打开配置文件编辑${NC}"
echo "配置文件路径: $CONFIG_PATH"
echo ""
echo -e "${YELLOW}编辑器选项:${NC}"
echo "1. 使用 nano (推荐新手)"
echo "2. 使用 vim"
echo "3. 使用系统默认编辑器"
echo "0. 返回"
echo ""
echo -n -e "${BLUE}请选择编辑器: ${NC}"
read -r editor_choice
# 备份配置文件
cp "$CONFIG_PATH" "$CONFIG_PATH.bak"
log_info "已备份配置文件"
case $editor_choice in
1)
if command -v nano &> /dev/null; then
nano "$CONFIG_PATH"
else
log_error "nano 未安装,使用系统默认编辑器"
${EDITOR:-vi} "$CONFIG_PATH"
fi
;;
2)
if command -v vim &> /dev/null; then
vim "$CONFIG_PATH"
else
log_error "vim 未安装,使用系统默认编辑器"
${EDITOR:-vi} "$CONFIG_PATH"
fi
;;
3)
${EDITOR:-vi} "$CONFIG_PATH"
;;
0)
return
;;
*)
log_error "无效选择,使用系统默认编辑器"
${EDITOR:-vi} "$CONFIG_PATH"
;;
esac
echo ""
echo -n -e "${YELLOW}配置已修改,是否重启服务以应用更改? [Y/n]: ${NC}"
read -r restart
if [[ ! $restart =~ ^[Nn]$ ]]; then
if systemctl restart "$SERVICE_NAME"; then
log_success "服务已重启"
else
log_error "服务重启失败,请检查配置文件语法"
echo -n -e "${YELLOW}是否恢复备份配置? [Y/n]: ${NC}"
read -r restore
if [[ ! $restore =~ ^[Nn]$ ]]; then
cp "$CONFIG_PATH.bak" "$CONFIG_PATH"
systemctl restart "$SERVICE_NAME"
log_info "已恢复备份配置"
fi
fi
fi
wait_for_user
}
# 卸载服务 - 改进版本,增加更多选项和安全确认
@@ -973,8 +1254,8 @@ main() {
read -r choice
# 输入验证
if ! validate_input "$choice" 0 12; then
log_error "请输入 0-12 之间的数字"
if ! validate_input "$choice" 0 11; then
log_error "请输入 0-11 之间的数字"
sleep 2
continue
fi
@@ -987,11 +1268,10 @@ main() {
5) view_logs ;;
6) test_domains ;;
7) server_domain_config ;;
8) advanced_config ;;
8) config_management ;;
9) show_node_info ;;
10) troubleshoot ;;
11) uninstall_hysteria ;;
12) about_script ;;
10) uninstall_hysteria ;;
11) about_script ;;
0)
echo -e "${GREEN}感谢使用 Hysteria2 配置管理脚本!${NC}"
exit 0
-626
View File
@@ -1,626 +0,0 @@
#!/bin/bash
# Hysteria2 进阶配置脚本 - 修复版本
# 修复配置文件路径和变量定义问题
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color
# 全局变量定义
CONFIG_PATH="/etc/hysteria/hysteria.yaml"
SERVICE_NAME="hysteria-server"
CONFIG_DIR="/etc/hysteria"
# 初始化函数 - 检查和设置基本环境
init_environment() {
# 检查 root 权限
if [[ $EUID -ne 0 ]]; then
echo -e "${RED}错误: 此脚本需要 root 权限运行${NC}"
exit 1
fi
# 检查配置目录
if [[ ! -d "$CONFIG_DIR" ]]; then
echo -e "${BLUE}创建配置目录: $CONFIG_DIR${NC}"
mkdir -p "$CONFIG_DIR"
fi
# 自动检测配置文件路径
detect_config_file
# 检查 Hysteria 是否已安装
if ! command -v hysteria >/dev/null 2>&1; then
echo -e "${YELLOW}警告: 未检测到 Hysteria 命令${NC}"
echo "请确保 Hysteria 已正确安装"
fi
}
# 自动检测配置文件
detect_config_file() {
local possible_paths=(
"/etc/hysteria/hysteria.yaml"
"/etc/hysteria/config.yaml"
"/etc/hysteria/server.yaml"
"/opt/hysteria/hysteria.yaml"
"/usr/local/etc/hysteria/hysteria.yaml"
)
echo -e "${BLUE}检测配置文件...${NC}"
for path in "${possible_paths[@]}"; do
if [[ -f "$path" ]]; then
CONFIG_PATH="$path"
echo -e "${GREEN}找到配置文件: $CONFIG_PATH${NC}"
return 0
fi
done
echo -e "${YELLOW}未找到配置文件,使用默认路径: $CONFIG_PATH${NC}"
return 1
}
# 创建默认配置文件
create_default_config() {
echo -e "${BLUE}创建默认配置文件${NC}"
cat > "$CONFIG_PATH" << EOF
# Hysteria2 服务器配置文件
# 生成时间: $(date)
listen: :443
# ACME 自动证书配置(推荐)
acme:
domains:
- your-domain.com
email: your-email@example.com
# 认证配置
auth:
type: password
password: $(openssl rand -base64 32)
# 带宽限制(可选)
bandwidth:
up: 1 gbps
down: 1 gbps
# 忽略客户端带宽(可选)
ignoreClientBandwidth: false
EOF
chmod 600 "$CONFIG_PATH"
echo -e "${GREEN}默认配置文件已创建: $CONFIG_PATH${NC}"
echo -e "${YELLOW}请编辑配置文件并设置正确的域名和邮箱${NC}"
}
# 安全检查函数
security_check() {
if [[ $EUID -ne 0 ]]; then
echo -e "${RED}错误: 此脚本需要 root 权限运行${NC}"
return 1
fi
if [[ ! -f "$CONFIG_PATH" ]]; then
echo -e "${RED}配置文件不存在: $CONFIG_PATH${NC}"
echo -n -e "${BLUE}是否创建默认配置文件? [y/N]: ${NC}"
read -r create_config
if [[ $create_config =~ ^[Yy]$ ]]; then
create_default_config
return 0
else
return 1
fi
fi
# 监听端口
local port=$(grep -E "^listen:" "$CONFIG_PATH" | awk '{print $2}' | sed 's/://')
if [[ -z "$port" ]]; then
echo -e "${BLUE}监听端口:${NC} 443 (默认)"
else
echo -e "${BLUE}监听端口:${NC} $port"
# 检查端口状态
if netstat -tuln 2>/dev/null | grep -q ":$port "; then
echo -e " 状态: ${GREEN}正在监听${NC}"
else
echo -e " 状态: ${RED}未监听${NC}"
fi
fi
# 混淆配置
if grep -q "^obfs:" "$CONFIG_PATH"; then
echo -e "${BLUE}混淆配置:${NC} ${GREEN}已启用${NC}"
local obfs_type=$(grep -A 3 "^obfs:" "$CONFIG_PATH" | grep "type:" | awk '{print $2}')
local obfs_password=$(grep -A 5 "^obfs:" "$CONFIG_PATH" | grep "password:" | awk '{print $2}')
if [[ -n "$obfs_type" ]]; then
echo -e " 算法: $obfs_type"
fi
if [[ -n "$obfs_password" ]]; then
echo -e " 密码: $obfs_password"
fi
# 检查混淆信息文件
if [[ -f "$CONFIG_DIR/obfs-info.conf" ]]; then
echo -e " 配置文件: ${GREEN}存在${NC}"
fi
else
echo -e "${BLUE}混淆配置:${NC} ${RED}未启用${NC}"
fi
# 端口跳跃
if [[ -f "$CONFIG_DIR/port-hopping.conf" ]]; then
echo -e "${BLUE}端口跳跃:${NC} ${GREEN}已配置${NC}"
source "$CONFIG_DIR/port-hopping.conf"
echo -e " 跳跃范围: $START_PORT-$END_PORT"
echo -e " 网络接口: $INTERFACE"
echo -e " 端口数量: $((END_PORT - START_PORT + 1))"
# 检查 iptables 规则是否存在
if iptables -t nat -L PREROUTING -n 2>/dev/null | grep -q "$START_PORT:$END_PORT"; then
echo -e " 规则状态: ${GREEN}已生效${NC}"
else
echo -e " 规则状态: ${RED}未生效${NC}"
fi
else
echo -e "${BLUE}端口跳跃:${NC} ${RED}未配置${NC}"
fi
# 配置文件信息
echo ""
echo -e "${BLUE}配置文件信息:${NC}"
echo " 路径: $CONFIG_PATH"
echo " 大小: $(du -h "$CONFIG_PATH" | cut -f1)"
echo " 权限: $(stat -c %a "$CONFIG_PATH" 2>/dev/null || stat -f %Lp "$CONFIG_PATH" 2>/dev/null)"
echo " 修改: $(stat -c %y "$CONFIG_PATH" 2>/dev/null | cut -d. -f1 || stat -f %Sm "$CONFIG_PATH" 2>/dev/null)"
# 备份文件统计
local backup_count=$(ls "$CONFIG_PATH".backup.* 2>/dev/null | wc -l)
if [[ $backup_count -gt 0 ]]; then
echo -e " 备份: ${GREEN}$backup_count 个备份文件${NC}"
# 显示最新备份
local latest_backup=$(ls -t "$CONFIG_PATH".backup.* 2>/dev/null | head -1)
if [[ -n "$latest_backup" ]]; then
echo " 最新备份: $(basename "$latest_backup")"
fi
else
echo -e " 备份: ${YELLOW}无备份文件${NC}"
fi
echo ""
return 0
}
# 配置健康检查
health_check() {
echo -e "${BLUE}配置健康检查${NC}"
echo ""
local issues=0
local warnings=0
# 检查配置文件存在性
if [[ ! -f "$CONFIG_PATH" ]]; then
echo -e "${RED}✗ 配置文件不存在${NC}"
((issues++))
return
else
echo -e "${GREEN}✓ 配置文件存在${NC}"
fi
# 检查配置文件权限
local perms=$(stat -c %a "$CONFIG_PATH" 2>/dev/null)
if [[ "$perms" == "600" ]]; then
echo -e "${GREEN}✓ 配置文件权限正确 ($perms)${NC}"
else
echo -e "${YELLOW}⚠ 配置文件权限: $perms (建议: 600)${NC}"
((warnings++))
fi
# 检查配置语法
if command -v hysteria >/dev/null && hysteria server --config "$CONFIG_PATH" --check 2>/dev/null; then
echo -e "${GREEN}✓ 配置文件语法正确${NC}"
else
echo -e "${RED}✗ 配置文件语法错误${NC}"
((issues++))
fi
# 检查端口配置
local port=$(grep -E "^listen:" "$CONFIG_PATH" | awk '{print $2}' | sed 's/://')
if [[ -n "$port" ]]; then
if validate_port "$port" >/dev/null 2>&1; then
echo -e "${GREEN}✓ 端口配置有效: $port${NC}"
# 检查端口占用
if netstat -tuln 2>/dev/null | grep -q ":$port "; then
if pgrep -f hysteria >/dev/null; then
echo -e "${GREEN}✓ 端口 $port 被 Hysteria 占用${NC}"
else
echo -e "${YELLOW}⚠ 端口 $port 被其他程序占用${NC}"
((warnings++))
fi
else
echo -e "${YELLOW}⚠ 端口 $port 未被占用${NC}"
((warnings++))
fi
else
echo -e "${RED}✗ 端口配置无效: $port${NC}"
((issues++))
fi
else
echo -e "${YELLOW}⚠ 使用默认端口 443${NC}"
((warnings++))
fi
# 检查证书配置
if grep -q "^acme:" "$CONFIG_PATH"; then
echo -e "${GREEN}✓ ACME 证书配置已启用${NC}"
local domain=$(grep -A 5 "^acme:" "$CONFIG_PATH" | grep -E "^\s*-" | head -1 | awk '{print $2}')
if [[ -n "$domain" ]]; then
echo -e " 域名: $domain"
fi
elif grep -q "^tls:" "$CONFIG_PATH"; then
echo -e "${GREEN}✓ TLS 证书配置已启用${NC}"
local cert_path=$(grep -A 3 "^tls:" "$CONFIG_PATH" | grep "cert:" | awk '{print $2}')
local key_path=$(grep -A 3 "^tls:" "$CONFIG_PATH" | grep "key:" | awk '{print $2}')
if [[ -f "$cert_path" ]]; then
echo -e "${GREEN}✓ 证书文件存在${NC}"
else
echo -e "${RED}✗ 证书文件不存在: $cert_path${NC}"
((issues++))
fi
if [[ -f "$key_path" ]]; then
echo -e "${GREEN}✓ 私钥文件存在${NC}"
else
echo -e "${RED}✗ 私钥文件不存在: $key_path${NC}"
((issues++))
fi
else
echo -e "${YELLOW}⚠ 未配置证书${NC}"
((warnings++))
fi
# 检查认证配置
if grep -q "^auth:" "$CONFIG_PATH"; then
echo -e "${GREEN}✓ 认证配置已启用${NC}"
local auth_type=$(grep -A 2 "^auth:" "$CONFIG_PATH" | grep "type:" | awk '{print $2}')
echo -e " 认证类型: ${auth_type:-未知}"
else
echo -e "${RED}✗ 未配置认证${NC}"
((issues++))
fi
# 检查混淆配置
if grep -q "^obfs:" "$CONFIG_PATH"; then
echo -e "${GREEN}✓ 混淆配置已启用${NC}"
else
echo -e "${BLUE} 混淆配置未启用 (可选)${NC}"
fi
# 检查端口跳跃
if [[ -f "$CONFIG_DIR/port-hopping.conf" ]]; then
echo -e "${GREEN}✓ 端口跳跃配置存在${NC}"
source "$CONFIG_DIR/port-hopping.conf"
if iptables -t nat -L PREROUTING -n 2>/dev/null | grep -q "$START_PORT:$END_PORT"; then
echo -e "${GREEN}✓ 端口跳跃规则已生效${NC}"
else
echo -e "${YELLOW}⚠ 端口跳跃规则未生效${NC}"
((warnings++))
fi
else
echo -e "${BLUE} 端口跳跃未配置 (可选)${NC}"
fi
# 总结
echo ""
echo -e "${CYAN}健康检查总结:${NC}"
if [[ $issues -eq 0 ]]; then
echo -e "${GREEN}✓ 配置健康,发现 $warnings 个警告${NC}"
else
echo -e "${RED}✗ 发现 $issues 个问题和 $warnings 个警告${NC}"
echo -e "${YELLOW}建议修复问题后重新检查${NC}"
fi
return $issues
}
# 端口验证函数
validate_port() {
local port=$1
# 检查端口范围
if [[ ! "$port" =~ ^[0-9]+$ ]] || [[ $port -lt 1 ]] || [[ $port -gt 65535 ]]; then
echo -e "${RED}端口必须在 1-65535 范围内${NC}"
return 1
fi
# 检查特权端口警告
if [[ $port -lt 1024 ]] && [[ $port -ne 443 ]] && [[ $port -ne 80 ]]; then
echo -e "${YELLOW}警告: 端口 $port 是特权端口,确保以 root 权限运行${NC}"
fi
return 0
}
# 配置备份函数
backup_config_with_checksum() {
local config_file=$1
local backup_suffix=${2:-$(date +%Y%m%d_%H%M%S)}
local backup_file="${config_file}.backup.${backup_suffix}"
if [[ ! -f "$config_file" ]]; then
echo -e "${RED}配置文件不存在: $config_file${NC}"
return 1
fi
# 创建备份
if cp "$config_file" "$backup_file"; then
# 生成校验和
if command -v sha256sum >/dev/null 2>&1; then
sha256sum "$config_file" > "${backup_file}.checksum"
elif command -v shasum >/dev/null 2>&1; then
shasum -a 256 "$config_file" > "${backup_file}.checksum"
fi
echo -e "${GREEN}配置已备份: $backup_file${NC}"
echo "$backup_file"
return 0
else
echo -e "${RED}配置备份失败${NC}"
return 1
fi
}
# 配置回滚函数
rollback_config() {
local backup_file=$1
local checksum_file="${backup_file}.checksum"
if [[ ! -f "$backup_file" ]]; then
echo -e "${RED}备份文件不存在: $backup_file${NC}"
return 1
fi
# 验证备份文件完整性
if [[ -f "$checksum_file" ]]; then
echo -e "${BLUE}验证备份文件完整性...${NC}"
if command -v sha256sum >/dev/null 2>&1; then
if ! sha256sum -c "$checksum_file" >/dev/null 2>&1; then
echo -e "${RED}警告: 备份文件可能已损坏${NC}"
echo -n -e "${BLUE}是否继续回滚? [y/N]: ${NC}"
read -r continue_rollback
[[ ! $continue_rollback =~ ^[Yy]$ ]] && return 1
fi
fi
fi
# 执行回滚
if cp "$backup_file" "$CONFIG_PATH"; then
echo -e "${GREEN}配置已回滚${NC}"
return 0
else
echo -e "${RED}配置回滚失败${NC}"
return 1
fi
}
# 修改监听端口
modify_listen_port() {
echo -e "${BLUE}修改监听端口${NC}"
echo ""
if ! security_check; then
return 1
fi
# 显示当前端口
local current_port=$(grep -E "^listen:" "$CONFIG_PATH" | awk '{print $2}' | sed 's/://')
if [[ -z "$current_port" ]]; then
current_port="443"
echo -e "${YELLOW}当前端口: 443 (默认)${NC}"
else
echo -e "${YELLOW}当前端口: $current_port${NC}"
fi
# 输入新端口
while true; do
echo -n -e "${BLUE}请输入新端口 (1-65535, 回车取消): ${NC}"
read -r new_port
[[ -z "$new_port" ]] && { echo -e "${BLUE}取消端口修改${NC}"; return; }
if validate_port "$new_port"; then
break
fi
done
# 检查端口占用
if netstat -tuln | grep -q ":$new_port "; then
echo -e "${YELLOW}警告: 端口 $new_port 已被占用${NC}"
netstat -tulnp | grep ":$new_port "
echo ""
echo -n -e "${BLUE}是否继续使用此端口? [y/N]: ${NC}"
read -r continue_change
if [[ ! $continue_change =~ ^[Yy]$ ]]; then
echo -e "${BLUE}取消端口修改${NC}"
return
fi
fi
# 备份配置文件
local backup_file
if ! backup_file=$(backup_config_with_checksum "$CONFIG_PATH"); then
echo -e "${RED}配置备份失败,取消操作${NC}"
return 1
fi
# 修改配置文件
local update_success=false
if grep -q "^listen:" "$CONFIG_PATH"; then
if sed -i.tmp "s/^listen:.*/listen: :$new_port/" "$CONFIG_PATH"; then
update_success=true
fi
else
if sed -i.tmp "1i listen: :$new_port" "$CONFIG_PATH"; then
update_success=true
fi
fi
# 清理临时文件
rm -f "${CONFIG_PATH}.tmp"
if [[ "$update_success" == "true" ]]; then
echo -e "${GREEN}端口已修改为: $new_port${NC}"
# 验证配置文件语法
if command -v hysteria >/dev/null && ! hysteria server --config "$CONFIG_PATH" --check 2>/dev/null; then
echo -e "${RED}配置文件语法错误,正在回滚...${NC}"
rollback_config "$backup_file"
return 1
fi
# 询问是否重启服务
if systemctl is-active --quiet $SERVICE_NAME; then
echo -n -e "${BLUE}是否重启服务以应用新端口? [Y/n]: ${NC}"
read -r restart_service
if [[ ! $restart_service =~ ^[Nn]$ ]]; then
if systemctl restart $SERVICE_NAME; then
echo -e "${GREEN}服务已重启${NC}"
else
echo -e "${RED}服务重启失败,正在回滚配置...${NC}"
rollback_config "$backup_file"
return 1
fi
fi
fi
# 防火墙提醒
echo ""
echo -e "${YELLOW}重要提醒:${NC}"
echo "1. 请确保防火墙允许端口 $new_port 通信"
echo "2. 如果使用云服务器,请检查安全组设置"
echo "3. 客户端配置也需要更新端口号"
else
echo -e "${RED}配置文件修改失败${NC}"
return 1
fi
}
# 查看当前进阶配置
view_advanced_config() {
echo -e "${CYAN}当前进阶配置状态:${NC}"
echo ""
if [[ ! -f "$CONFIG_PATH" ]]; then
echo -e "${RED}配置文件不存在: $CONFIG_PATH${NC}"
return 1
fi
security_check
}
# 主进阶配置函数
advanced_configuration() {
# 初始化环境
init_environment
while true; do
clear
echo -e "${BLUE}Hysteria2 进阶配置 - 修复版本${NC}"
echo ""
# 显示系统状态
if systemctl is-active --quiet $SERVICE_NAME; then
echo -e "服务状态: ${GREEN}运行中${NC}"
else
echo -e "服务状态: ${RED}已停止${NC}"
fi
if [[ -f "$CONFIG_PATH" ]]; then
local config_size=$(du -h "$CONFIG_PATH" | cut -f1)
echo -e "配置文件: ${GREEN}存在${NC} ($config_size) - $CONFIG_PATH"
else
echo -e "配置文件: ${RED}不存在${NC} - $CONFIG_PATH"
fi
echo ""
echo -e "${YELLOW}配置选项:${NC}"
echo -e "${GREEN}1.${NC} 修改监听端口"
echo -e "${GREEN}2.${NC} 查看配置状态"
echo -e "${GREEN}3.${NC} 配置健康检查"
echo -e "${GREEN}4.${NC} 重新检测配置文件"
echo -e "${GREEN}5.${NC} 创建默认配置文件"
echo ""
echo -e "${RED}0.${NC} 返回主菜单"
echo ""
echo -n -e "${BLUE}请选择操作 [0-5]: ${NC}"
read -r choice
case $choice in
1)
clear
modify_listen_port
echo ""
read -p "按回车键继续..."
;;
2)
clear
view_advanced_config
echo ""
read -p "按回车键继续..."
;;
3)
clear
health_check
echo ""
read -p "按回车键继续..."
;;
4)
clear
echo -e "${BLUE}重新检测配置文件...${NC}"
detect_config_file
echo ""
read -p "按回车键继续..."
;;
5)
clear
if [[ -f "$CONFIG_PATH" ]]; then
echo -e "${YELLOW}配置文件已存在: $CONFIG_PATH${NC}"
echo -n -e "${BLUE}是否覆盖现有配置? [y/N]: ${NC}"
read -r overwrite
if [[ $overwrite =~ ^[Yy]$ ]]; then
create_default_config
else
echo -e "${BLUE}取消创建${NC}"
fi
else
create_default_config
fi
echo ""
read -p "按回车键继续..."
;;
0)
break
;;
*)
echo -e "${RED}无效选项${NC}"
sleep 1
;;
esac
done
}
# 如果脚本被直接执行,运行主函数
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
advanced_configuration
fi
File diff suppressed because it is too large Load Diff
-126
View File
@@ -1,126 +0,0 @@
# Hysteria2 高级配置文件模板
# 包含所有可用的配置选项和详细说明
# 监听地址和端口
listen: :443
# TLS 配置 (二选一)
# 选项1: ACME 自动证书
acme:
domains:
- your.domain.net
email: your@email.com
ca: letsencrypt # 可选:zerossl, letsencrypt
altHttpPort: 8080
altTlsAlpnPort: 8443
# 选项2: 手动证书
# tls:
# cert: /path/to/cert.pem
# key: /path/to/key.pem
# 认证配置
auth:
type: password
password: your_password
# 或者使用用户名密码认证
# type: userpass
# userpass:
# user1: pass1
# user2: pass2
# 伪装配置
masquerade:
type: proxy
proxy:
url: https://news.ycombinator.com/
rewriteHost: true
# 或者使用文件伪装
# type: file
# file:
# dir: /var/www/html
# 混淆配置
obfs:
type: salamander
salamander:
password: obfs_password
# 带宽限制
bandwidth:
up: 1 gbps
down: 1 gbps
# 忽略客户端带宽设置
ignoreClientBandwidth: false
# UDP 相关配置
udpIdleTimeout: 60s
disableUDP: false
# ACL 访问控制
acl: /etc/hysteria/acl.txt
# 出站配置
outbounds:
- name: direct
type: direct
- name: block
type: block
- name: socks5
type: socks5
socks5:
addr: 127.0.0.1:1080
username: user
password: pass
# 路由规则
routing:
rules:
# 阻止中国大陆 IP
- outbound: block
geoip:
- cn
# 直连私有 IP
- outbound: direct
ipCIDR:
- 10.0.0.0/8
- 172.16.0.0/12
- 192.168.0.0/16
# 特定域名走代理
- outbound: socks5
domain:
- example.com
- "*.google.com"
# 日志配置
log:
level: info # debug, info, warn, error
output: /var/log/hysteria.log
# 性能调优
resolver:
type: udp
tcp:
addr: 8.8.8.8:53
timeout: 4s
udp:
addr: 8.8.8.8:53
timeout: 4s
tls:
addr: 8.8.8.8:853
timeout: 10s
sni: dns.google
insecure: false
https:
addr: https://1.1.1.1/dns-query
timeout: 10s
# 流量统计
trafficStats:
listen: :8080
secret: stats_secret
# 其他高级选项
disableMTUDiscovery: false
hopInterval: 30s