大量更新

This commit is contained in:
zeaslity
2026-03-18 16:16:47 +08:00
parent 8efefcc230
commit ed945abdf1
136 changed files with 28252 additions and 16 deletions

View File

@@ -0,0 +1,287 @@
完全正确既然主机B可以直接访问主机C同局域网那么**只需要在主机B上配置端口转发**即可无需在主机A和主机C上安装任何软件。 [github](https://github.com/ginuerzh/gost/issues/1027)
## 简化方案仅配置主机B
### 场景重新分析
主机B作为中转枢纽提供三个端口转发服务
1. 内网端口 → 主机A:39000供主机C使用
2. 内网端口 → 主机A:1999供主机C使用
3. 公网端口 → 主机C:1998供主机A使用
### 主机B完整配置Windows Server
#### 1. 下载Gost
```bash
# 从 https://github.com/go-gost/gost/releases 下载Windows版本
# 解压到 C:\gost\
```
#### 2. 创建配置文件
`C:\gost\` 目录创建 `gost.yaml`
```yaml
services:
# 服务1: 主机C访问主机A的39000端口TCP
# 主机C连接 192.168.10.1:39000
- name: forward-c-to-a-39000
addr: 192.168.10.1:39000
handler:
type: tcp
listener:
type: tcp
forwarder:
nodes:
- name: host-a-39000
addr: 144.7.97.70:39000
# 服务2: 主机C访问主机A的1999端口HTTP
# 主机C连接 192.168.10.1:1999 或 http://192.168.10.1:1999
- name: forward-c-to-a-1999
addr: 192.168.10.1:1999
handler:
type: tcp
listener:
type: tcp
forwarder:
nodes:
- name: host-a-1999
addr: 144.7.97.70:1999
# 服务3: 主机A访问主机C的1998端口HTTP
# 主机A连接 144.7.8.50:11998 或 http://144.7.8.50:11998
- name: forward-a-to-c-1998
addr: 144.7.8.50:11998
handler:
type: tcp
listener:
type: tcp
forwarder:
nodes:
- name: host-c-1998
addr: 192.168.10.2:1998
```
#### 3. 测试配置
```bash
# 在PowerShell或CMD中测试运行
cd C:\gost
.\gost.exe -C gost.yaml
# 观察输出,确认没有错误
# 看到类似以下输出表示成功:
# 2026/02/11 11:26:00 forward-c-to-a-39000: listening on 192.168.10.1:39000
# 2026/02/11 11:26:00 forward-c-to-a-1999: listening on 192.168.10.1:1999
# 2026/02/11 11:26:00 forward-a-to-c-1998: listening on 144.7.8.50:11998
```
如果测试正常,按 `Ctrl+C` 停止,继续下一步。
#### 4. 使用NSSM注册为Windows服务
```bash
# 下载NSSM: http://www.nssm.cc/download
# 解压到 C:\nssm\
# 以管理员身份打开CMD或PowerShell
cd C:\nssm\win64
# 安装服务
nssm.exe install GostService
# 在弹出的NSSM窗口中配置
# Application标签页
# Path: C:\gost\gost.exe
# Startup directory: C:\gost
# Arguments: -C gost.yaml
#
# Details标签页
# Display name: Gost Port Forwarding Service
# Description: Gost端口转发服务
#
# 点击 Install service
```
#### 5. 启动服务
```bash
# 启动服务
nssm start GostService
# 查看服务状态
nssm status GostService
# 如果需要,可以查看服务是否在运行
sc query GostService
```
#### 6. 服务管理命令
```bash
# 启动服务
nssm start GostService
# 停止服务
nssm stop GostService
# 重启服务(修改配置后使用)
nssm restart GostService
# 查看服务状态
nssm status GostService
# 编辑服务配置
nssm edit GostService
# 查看服务日志(在服务属性中可配置日志输出路径)
nssm edit GostService
# 在I/O标签页可以设置
# Output (stdout): C:\gost\logs\gost.log
# Error (stderr): C:\gost\logs\gost-error.log
# 删除服务(如果需要重新配置)
nssm stop GostService
nssm remove GostService confirm
```
### 防火墙配置
在主机B的Windows防火墙中添加入站规则
```powershell
# 以管理员身份运行PowerShell
# 允许39000端口内网访问
New-NetFirewallRule -DisplayName "Gost-39000" -Direction Inbound -LocalPort 39000 -Protocol TCP -Action Allow
# 允许1999端口内网访问
New-NetFirewallRule -DisplayName "Gost-1999" -Direction Inbound -LocalPort 1999 -Protocol TCP -Action Allow
# 允许11998端口公网访问
New-NetFirewallRule -DisplayName "Gost-11998" -Direction Inbound -LocalPort 11998 -Protocol TCP -Action Allow
```
或者通过图形界面:
1. 打开 `Windows Defender 防火墙``高级设置`
2. 点击 `入站规则``新建规则`
3. 选择 `端口``TCP` → 输入端口号 `39000,1999,11998`
4. 选择 `允许连接` → 完成
## 使用方式
### 需求1主机C访问主机A的39000端口TCP
在主机C上
```bash
# 连接到主机B的内网IP
telnet 192.168.10.1 39000
# 或使用你的应用程序连接
# 目标地址: 192.168.10.1:39000
```
### 需求2主机C访问主机A的1999端口HTTP
在主机C上
```bash
# 浏览器访问
http://192.168.10.1:1999
# 或使用curl
curl http://192.168.10.1:1999
# 或使用你的应用程序
# 目标地址: 192.168.10.1:1999
```
### 需求3主机A访问主机C的1998端口HTTP
在主机A上
```bash
# 访问主机B的公网IP
curl http://144.7.8.50:11998
# 或使用浏览器
http://144.7.8.50:11998
# 实际流量路径主机A → 144.7.8.50:11998 → 192.168.10.2:1998
```
## 验证配置
### 在主机B上验证服务是否运行
```powershell
# 查看Gost进程
tasklist | findstr gost
# 查看监听端口
netstat -ano | findstr "39000"
netstat -ano | findstr "1999"
netstat -ano | findstr "11998"
# 应该能看到类似输出:
# TCP 192.168.10.1:39000 0.0.0.0:0 LISTENING [PID]
# TCP 192.168.10.1:1999 0.0.0.0:0 LISTENING [PID]
# TCP 144.7.8.50:11998 0.0.0.0:0 LISTENING [PID]
```
### 测试连通性
在主机B上进行本地测试
```powershell
# 测试到主机A的连接需要确保主机A的服务在运行
Test-NetConnection -ComputerName 144.7.97.70 -Port 39000
Test-NetConnection -ComputerName 144.7.97.70 -Port 1999
# 测试到主机C的连接需要确保主机C的1998端口服务在运行
Test-NetConnection -ComputerName 192.168.10.2 -Port 1998
```
## 配置优化建议
如果需要添加日志功能,可以修改配置文件:
```yaml
log:
level: info
format: json
output: C:\gost\logs\gost.log
services:
# ... 其他配置保持不变
```
## 故障排查
如果遇到问题:
1. **检查Gost服务状态**
```bash
nssm status GostService
```
2. **查看Gost日志**(如果配置了日志输出):
```bash
type C:\gost\logs\gost.log
type C:\gost\logs\gost-error.log
```
3. **手动运行查看错误**
```bash
cd C:\gost
.\gost.exe -C gost.yaml -L debug
```
4. **检查端口占用冲突**
```powershell
netstat -ano | findstr "39000"
netstat -ano | findstr "1999"
netstat -ano | findstr "11998"
```
这个简化方案只需要在主机B上操作维护更简单性能也更好 [nephen](https://www.nephen.cn/posts/4669df2a/)

View File

@@ -0,0 +1,45 @@
log:
level: info
format: json
output: C:\gost\logs\gost.log
services:
# 服务1: 主机C访问主机A的39000端口TCP
# 主机C连接 192.168.10.1:39000
- name: forward-c-to-a-39000
addr: 192.168.10.1:39000
handler:
type: tcp
listener:
type: tcp
forwarder:
nodes:
- name: host-a-39000
addr: 144.7.97.70:39000
# 服务2: 主机C访问主机A的1999端口HTTP
# 主机C连接 192.168.10.1:1999 或 http://192.168.10.1:1999
- name: forward-c-to-a-1999
addr: 192.168.10.1:1999
handler:
type: tcp
listener:
type: tcp
forwarder:
nodes:
- name: host-a-1999
addr: 144.7.97.70:1999
# 服务3: 主机A访问主机C的59014端口HTTP
# 主机A连接 144.7.8.50:59014 或 http://144.7.8.50:59014
- name: forward-a-to-c-59014
addr: 144.7.8.50:59014
handler:
type: tcp
listener:
type: tcp
forwarder:
nodes:
- name: host-c-59014
addr: 192.168.10.2:59014