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

最新博客文章鏈接


大體思路

使用 Docker 容器,在云服務(wù)器上部署 Frps 容器來中轉(zhuǎn)流量,在被控制的 Windows 上部署 Frpc 容器來暴露內(nèi)網(wǎng)的服務(wù),在主控制端的 Windows 上直接運(yùn)行 Frpc,來連接要訪問的服務(wù)到本地。

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

用到的東西

  • 反向代理

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

  • Frp

    frp 采用 C/S 模式,將服務(wù)端部署在具有公網(wǎng) IP 的機(jī)器上,客戶端部署在內(nèi)網(wǎng)或防火墻內(nèi)的機(jī)器上,通過訪問暴露在服務(wù)器上的端口,反向代理到處于內(nèi)網(wǎng)的服務(wù)。 在此基礎(chǔ)上,frp 支持 TCP, UDP, HTTP, HTTPS 等多種協(xié)議,提供了加密、壓縮,身份認(rèn)證,代理限速,負(fù)載均衡等眾多能力。

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

Frp 配置文件

主要是參考官方教程,根據(jù)需要增刪內(nèi)容

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

服務(wù)器端配置文件

記得在云服務(wù)器后臺(tái),放行相應(yīng)的端口

# frps.ini

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

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

# frpc.ini(被控制端)

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

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

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

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

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

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

[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 連接可能會(huì)卡頓,估計(jì)是容易被運(yùn)營(yíng)商 QoS
# [remote_udp_visitor]
# type = sudp
# server_name = remote_udp
# sk = abcdefg
# role = visitor
# bind_port = 3390

其他配置和部署連接

在配置時(shí)可以用 docker logs frpsdocker logs frpc 來查看調(diào)試信息

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

被控制端本地 SSH 設(shè)置

微軟官方 | 通過 SSH 進(jìn)行 PowerShell 遠(yuǎn)程處理

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

  2. 將 SSH 默認(rèn) shell 改為 powershell.exe

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

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

    C:\ProgramData\ssh\sshd_config 中的 PermitEmptyPasswords 選項(xiàng),取消注釋并設(shè)置為 PermitEmptyPasswords yes

  4. 最后再重啟 sshd 服務(wù) Restart-Service sshd

配置 Windows 遠(yuǎn)程桌面

微軟官方 | 如何使用遠(yuǎn)程桌面

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

部署 Frp

在服務(wù)器端部署 frps 容器,服務(wù)器的配置文件我放在了 ~/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

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

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

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

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

可替代方案:Sakura Frp

如果嫌麻煩,以及不太強(qiáng)調(diào)安全的話,可以使用 Sakura Frp

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

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

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

節(jié)點(diǎn) 成都電信
隧道類型 TCP
端口 自動(dòng)生成
本地 IP 192.168.1.7
訪問密碼 xxxxxx
加密傳輸 禁用
壓縮數(shù)據(jù) 啟用
image

被控制端 Docker 的配置

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

  • abcdefghijklmnop :Sakura Frp 賬號(hào)的總訪問密鑰
  • 2680675 :遠(yuǎn)程桌面的隧道 ID
  • 2804403 :SSH 的隧道 ID
  • yyyyyy :設(shè)置在 Sakura Frp 官網(wǎng)網(wǎng)頁上遠(yuǎn)程管理隧道的密碼(不是訪問密碼)

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


本文由 Tsanfer's Blog 發(fā)布!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容