使用 Frp 和 Docker 通過遠程桌面和 SSH 來遠程控制 Windows(反向代理)


最新博客文章鏈接


大體思路

使用 Docker 容器,在雲服務器上部署 Frps 容器來中轉流量,在被控制的 Windows 上部署 Frpc 容器來暴露內網的服務,在主控制端的 Windows 上直接運行 Frpc,來連接要訪問的服務到本地。

主控制端 中轉服務器 被控制端
Frp 類型 Frpc Frps Frpc
SSH 端口 6000 22
遠程桌面端口 3390 3389
轉發 IP 127.0.0.1(本地 IP) 192.168.1.7(容器外部宿主,局域網 IP)

用到的東西

  • 反向代理

    反向代理在電腦網絡中是代理服務器的一種。服務器根據客戶端的請求,從其關系的一組或多組后端服務器(如Web服務器)上獲取資源,然后再將這些資源返回給客戶端,客戶端只會得知反向代理的IP地址,而不知道在代理服務器后面的服務器集群的存在。

  • Frp

    frp 采用 C/S 模式,將服務端部署在具有公網 IP 的機器上,客戶端部署在內網或防火牆內的機器上,通過訪問暴露在服務器上的端口,反向代理到處於內網的服務。 在此基礎上,frp 支持 TCP, UDP, HTTP, HTTPS 等多種協議,提供了加密、壓縮,身份認證,代理限速,負載均衡等眾多能力。

    https://cdn.tsanfer.com/image/2022119165912.png

Frp 配置文件

主要是參考官方教程,根據需要增刪內容

先是去官方的 Github 倉庫下載相應版本的 Frp 軟件,然后解壓

服務器端配置文件

記得在雲服務器后台,放行相應的端口

# frps.ini

# 固定段落,用於配置通用參數
[common]
# 服務器監聽端口
bind_port = 7000
bind_udp_port = 7000
token = 123456
# 服務器 dashboard
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = admin
# 每個客戶端的連接數量上限
max_pool_count = 5
# kcp 綁定的是 udp 端口,可以和 bind_port 一樣(kcp 可能會連接不上)
# kcp_bind_port = 7000

客戶端(被控制端)配置文件

# frpc.ini(被控制端)

[common]
server_addr = x.x.x.x
server_port = 7000
token = 123456
# 客戶端指定,預創建的連接數量
pool_count = 1
# server_port 指定為 frps 的 kcp_bind_port
# server_port = 7000
# 使用kcp協議(kcp 可能會連接不上)
# protocol = kcp
use_encryption = true
use_compression = true

# 代理名稱(必須唯一)
[secure_ssh]
# 協議類型
# stcp 或 sudp 協議可以不在服務器暴露端口,
# 所以可以省略 remote_port 選項
type = stcp
# 安全角色(用於stcp、sudp)(只能填 server 或 visitor)
role = server
# 安全角色密鑰
sk = abcdefg
# 指定遠程登陸地址為,被控制主機的局域網 IP 地址
#(如果 frpc 沒有部署在 docker 上則可使用 127.0.0.1)
local_ip = 192.168.1.7
local_port = 22

# 遠程桌面 tcp 端口
[remote_tcp]
type = stcp
role = server
sk = abcdefg
local_ip = 192.168.1.7
local_port = 3389

# 遠程桌面 udp 端口
[remote_udp]
type = sudp
role = server
sk = abcdefg
local_ip = 192.168.1.7
local_port = 3389

客戶端(主控制端)配置文件

# frpc.ini(主控制的機器)

[common]
server_addr = x.x.x.x
server_port = 7000
token = 123456
# 本地綁定地址
bind_addr = 127.0.0.1
use_encryption = true
use_compression = true

[secure_ssh_visitor]
type = stcp
# 要訪問的代理名稱
server_name = secure_ssh
sk = abcdefg
role = visitor
# 本地綁定端口
bind_port = 6000

[remote_tcp_visitor]
type = stcp
server_name = remote_tcp
sk = abcdefg
role = visitor
bind_port = 3390

# UDP 連接可能會卡頓,估計是容易被運營商 QoS
# [remote_udp_visitor]
# type = sudp
# server_name = remote_udp
# sk = abcdefg
# role = visitor
# bind_port = 3390

其他配置和部署連接

在配置時可以用 docker logs frpsdocker logs frpc 來查看調試信息

https://cdn.tsanfer.com/image/2022119192840.png

被控制端本地 SSH 設置

微軟官方 | 通過 SSH 進行 PowerShell 遠程處理

  1. 先安裝 OpenSSH,最新的 PowerShell 里就內置了 OpenSSH,可以直接去 Windows 商店里下載

  2. 將 SSH 默認 shell 改為 powershell.exe

    New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force

  3. 我沒有給電腦設置登錄密碼,所以要開啟免密登陸

    C:\ProgramData\ssh\sshd_config 中的 PermitEmptyPasswords 選項,取消注釋並設置為 PermitEmptyPasswords yes

  4. 最后再重啟 sshd 服務 Restart-Service sshd

配置 Windows 遠程桌面

微軟官方 | 如何使用遠程桌面

在被控制的電腦上開啟遠程桌面,然后在主控制端連接

部署 Frp

在服務器端部署 frps 容器,服務器的配置文件我放在了 ~/frp/frps.ini

docker run --network host --restart=always -d -v ~/frp/frps.ini:/etc/frp/frps.ini --name frps snowdreamtech/frps

在客戶端(被控制端)部署 frpc 容器,被控制端的配置文件我放在了 C:\Stand_alone\frp\frpc.ini

docker run --network host --restart=always -d -v C:\Stand_alone\frp\frpc.ini:/etc/frp/frpc.ini --name frpc snowdreamtech/frpc

連接 Frp

在客戶端(主控制端)運行 frpc,主控制端的配置文件我放在了 C:\Stand_alone\frp\frpc.ini

C:\Stand_alone\frp\frpc.exe -c C:\Stand_alone\frp\frpc.ini

最后就可以直接訪問 SSH(localhost:6000) 和遠程桌面(localhost:3389)了

https://cdn.tsanfer.com/image/2022119192306.png

https://cdn.tsanfer.com/image/2022119192519.png

可替代方案:Sakura Frp

如果嫌麻煩,以及不太強調安全的話,可以使用 Sakura Frp

原理和普通的 Frp 一樣,不過配置起來更方便。你可以在被控制端直接下載一個 Sakura Frp 官方的啟動器,或者用 Frpc 或 Docker 來連接到 Sakura Frp 的服務器。

配置的步驟比較簡單,直接看官方的教程就行了。

我是用的 Docker 方式部署,這里我列一下我自己的配置:

節點 成都電信
隧道類型 TCP
端口 自動生成
本地 IP 192.168.1.7
訪問密碼 xxxxxx
加密傳輸 禁用
壓縮數據 啟用

被控制端 Docker 的配置

docker run -d --restart=always --name=frpc_sakura natfrp/frpc -f abcdefghijklmnop:2680675,2804403 --remote_control yyyyyy

  • abcdefghijklmnop :Sakura Frp 賬號的總訪問密鑰
  • 2680675 :遠程桌面的隧道 ID
  • 2804403 :SSH 的隧道 ID
  • yyyyyy :設置在 Sakura Frp 官網網頁上遠程管理隧道的密碼(不是訪問密碼)

如果被控制端的 Docker 運行正常的話,官網上的隧道顏色,會由灰色變成綠色。之后就可以在官網上對相應的隧道進行授權,一般就授權本地的 IP 地址。完成過后就可以連接 Sakura Frp 官網的代理服務器的域名和相應端口,來進行遠程控制了。如果自己有已備案的域名的話,可以用 DNS 的 CNAME 解析,把自己的域名映射到 Sakura Frp 的代理服務器,方便隧道節點的更換。


本文由 Tsanfer's Blog 發布!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM