Gost内网穿透远程访问Windows

内网穿透流程

  1. 公网服务器部署Gost并监听端口(Socket A)
    • 内网Windows机器通过此端口连接公网服务器
    • 连接保持持久化
  2. 端口转发请求
    • 内网机器通过Socket A告知要转发的端口(如公网3333→本地8000)
    • 公网服务器开启新监听端口3333(Socket X)
  3. 数据传输流程
    • 用户访问3333端口的请求通过Socket X接收
    • 公网服务器通过Socket A将数据转发给内网机器
    • 内网机器建立到本地8000端口的连接(Socket B)
    • 数据流向:Socket X → Socket A → Socket B → 本地服务
    • 响应数据反向传输:本地服务 → Socket B → Socket A → Socket X → 用户
  4. 完成穿透
    • 通过这种双向转发机制实现内网服务的公网访问
      内网穿透流程

内网穿透配置

公网服务器配置

1
./gost -L socks5://:6666\?bind=true

内网Windows机器配置

1
./gost.exe -L rtcp://:3333/127.0.0.1:8000 -F socks5://公网Ip地址:6666

这样就可以访问公网的ip:3333端口,访问到内网的Windows机器的8000端口了,如果要访问其他端口,只需要修改8000即可,比如我要访问Windows的远程桌面,只需要将8000修改为3389即可,同时注意要将Windows的远程桌面服务开启。
开启远程桌面服务

这里注意:3333和8000端口是可以自定义的,但是要确保公网服务器的防火墙允许这两个端口的流量通过。

更高级的需求,如果想通过配置SwitchyOmega来访问Windows内网的服务,需要在Windows本地再新增一个代理:

1
./gost.exe -L socks5://:7777\?bind=true

同时Windows机器配置改为:

1
./gost.exe -L rtcp://:3333/127.0.0.1:7777 -F socks5://公网Ip地址:6666

这样用户Socks5代理访问公网的ip:3333端口,就会被转发到Windows的7777端口,也就是代理到了本地,用户就可以通过SwitchyOmega来访问Windows内网的服务了。但是这种比较危险,其它人只要知道你的公网ip和3333端口,就可以访问到你的Windows内网服务了,所以可以加一个密码授权访问。
首先是服务器上的配置:

1
./gost.exe -L socks5://user:123456@:6666?bind=true

这样就配置了一个socks5代理,用户访问公网的ip:6666端口,需要用户名密码才能访问。用户名是user,密码是123456。同时本地设备访问公网服务器代理时,也需要用户名密码才能访问。

1
./gost.exe -L rtcp://:3333/127.0.0.1:7777 -F socks5://user:123456@公网Ip地址:6666

另外7777端口也开启用户名密码访问:

1
./gost.exe -L socks5://user:123456@:7777?bind=true

这样配置SwitchyOmega时就需要加上对应的用户名密码才能访问,也就只有自己可以访问到Windows内网的服务了。

Windows服务开机自启动

如果要将Gost服务设置为开机自启动,可以选择使用nssm来管理Gost服务。
nssm是一个Windows服务管理工具,可以将普通的可执行文件注册为Windows服务,并且可以设置服务的启动类型为开机自启动。
nssm的下载地址:nssm下载,也可以使用chocolatey来安装nssm。

1
2
3
4
5
# 安装chocolatey
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iwr https://community.chocolatey.org/install.ps1 -UseBasicParsing | iex

# 安装nssm
choco install nssm

nssm安装
安装完成后,就可以使用nssm来管理Gost服务了。

1
nssm install

打开配置界面,填写Gost的配置信息,比如Gost的可执行文件路径、参数、启动类型等。
nssm配置Gost服务

配置完成后,点击“Install service”按钮,就可以将Gost注册为一个Windows服务了。
再使用命令来启动服务:

1
nssm start "Remote Gost"

启动Gost服务

服务启动后,就可以在Windows服务列表中看到Gost服务了,nssm的常见命令有:

  • nssm start “Remote Gost” 启动服务
  • nssm stop “Remote Gost” 停止服务
  • nssm restart “Remote Gost” 重启服务
  • nssm remove “Remote Gost” 删除服务
  • nssm status “Remote Gost” 查看服务状态
  • nssm edit “Remote Gost” 编辑服务配置

这个服务启动后,它是在后台运行的,不会占用命令行窗口,以及自动守护Gost进程,当Gost进程崩溃时,会自动重启Gost进程。默认是开机自启动的,“Startup type”默认是设置为“Automatic”。
我测试重启机器后,不用登录Windows,Gost服务就会自动启动起来,并且Gost服务会自动连接到公网服务器的6666端口,也就实现了可以远程重启Windows机器后,还可以重新连上的功能。

相关参考文档: