使用 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 等多种协议,提供了加密、压缩,身份认证,代理限速,负载均衡等众多能力。
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 frps
或 docker logs frpc
来查看调试信息
被控制端本地 SSH 设置
先安装 OpenSSH,最新的 PowerShell 里就内置了 OpenSSH,可以直接去 Windows 商店里下载
将 SSH 默认 shell 改为 powershell.exe
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force
我没有给电脑设置登录密码,所以要开启免密登陆
把
C:\ProgramData\ssh\sshd_config
中的PermitEmptyPasswords
选项,取消注释并设置为PermitEmptyPasswords yes
最后再重启 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
)了
可替代方案: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
:远程桌面的隧道 ID2804403
:SSH 的隧道 IDyyyyyy
:设置在 Sakura Frp 官网网页上远程管理隧道的密码(不是访问密码)
如果被控制端的 Docker 运行正常的话,官网上的隧道颜色,会由灰色变成绿色。之后就可以在官网上对相应的隧道进行授权,一般就授权本地的 IP 地址。完成过后就可以连接 Sakura Frp 官网的代理服务器的域名和相应端口,来进行远程控制了。如果自己有已备案的域名的话,可以用 DNS 的 CNAME 解析,把自己的域名映射到 Sakura Frp 的代理服务器,方便隧道节点的更换。
本文由 Tsanfer's Blog 发布!
使用 Frp 和 Docker 通过远程桌面和 SSH 来远程控制 Windows(反向代理)的更多相关文章
- Ngrok远程桌面及ssh配置
上一篇Ngrok 内网穿透利器 使用教程我们讲到Ngrok的基本使用教程,这篇描述一下Ngrok的远程桌面及ssh配置 Step 1 修改配置文件ngrok.cfg server_addr: &quo ...
- macOS 开启 VNC 远程桌面和 SSH 服务
macOS 开启 VNC 远程桌面和 SSH 服务 准备用 macOS 来做为服务器,既然是服务器,那不可缺少的是远程管理,实际上 macOS 自带 VNC 远程桌面和 SSH 服务,只是默认没有开启 ...
- 利用阿里云搭建frp实现外网远程桌面链接内网电脑
主要应用场景:针对学生放假回家使用外网无法远程操作学校的服务器或者电脑,这里通过阿里云的云服务器搭建一个frp服务,实现内网穿透,从而可以直接通过远程桌面或者其他工具实现对校园网内的服务器或者电脑进行 ...
- frp 内网穿透远程桌面(Windows 10)配置
一.服务端配置 服务端需要公网环境,一般用一台云服务器就行了,我选择的是 Linux 服务器,Windows 服务器也是可以的. 下载 frp: wget https://github.com/fat ...
- windows server 2003 远程桌面最大连接数调整与windows 2008远程桌面后,本地帐号自动锁定
调整windows server 2003 最大远程连接数的步骤如下: 第1步.开始-->控制面板-->添加或删除程序-->添加/删除windows组件-->选择"终 ...
- ubuntu远程桌面连接命令rdesktop连接windows远程桌面详解
sudo apt-get install rdesktoprdesktop 124.42.120.174:1433 呵呵,连接成功了. -f 全屏-a 16位色默认端口是3389(linux 22 s ...
- Docker 快速安装&搭建 Ngnix 环境,并配置反向代理
欢迎关注个人微信公众号: 小哈学Java, 文末分享阿里 P8 高级架构师吐血总结的 <Java 核心知识整理&面试.pdf>资源链接!! 个人网站: https://www.ex ...
- ubuntu + 远程桌面连接命令 + rdesktop + 连接windows或者ubuntu远程桌面
原文 https://www.cnblogs.com/xiaouisme/p/5166469.html sudo apt-get install rdesktop rdesktop 124.42.12 ...
- Win10企业版远程桌面结合frp实现公网远程
Win10企业版远程桌面结合frp实现公网远程 前言 由于经常下班后还要处理问题,但是又没有运维那么频繁,就不想天天背着电脑来回跑,刚开始用的teamviewer,后来被商业劝退了(就是不让用了,让买 ...
随机推荐
- 难搞的偏向锁终于被 Java 移除了
背景 在 JDK1.5 之前,面对 Java 并发问题, synchronized 是一招鲜的解决方案: 普通同步方法,锁上当前实例对象 静态同步方法,锁上当前类 Class 对象 同步块,锁上括号里 ...
- 1.SpringCloud与Dubbo的区别
1.SpringCloud与Dubbo的区别 初始定位不同: SpringCloud定位为微服务架构下的一站式解决方案:Dubbo 是 SOA 时代的产物,它的关注点主要在于服务的调用和治理 生态环境 ...
- 【Java例题】5.4 排序集合的使用
4.排序集合的使用.使用TreeSet模拟一个一维整数数组.其中,一维整数数组元素由Random类随机产生.最后显示排序后的结果. package chapter6; import java.util ...
- 以简御繁介绍IOC
1.IOC的理论背景 大家开发理念,一直都是奔着架构稳定.低耦合性.而IOC初衷,就是为了解决模块依赖问题,理解<六大设计原则(SOLID)> 如图所示,在我们开发中,业务的实现,就是靠着 ...
- 如何在HTML中添加表格标题?(HTML中table添加标题的2种方法)
第一种:通过 fieldset 添加标题框 示例代码: <html> <body> <fieldset> <legend>fieldset添加框标题&l ...
- Java Web程序设计笔记 • 【第4章 JavaBean和JSP标准动作】
全部章节 >>>> 本章目录 4.1 JavaBean 4.1.1 JavaBean 概述 4.1.2 JavaBean的重要性 4.1.3 JavaBean的特点 4.1 ...
- playwright--自动化(二):过滑块验证码 验证码缺口识别
前两天需要自动化登录一个商城的后台 用的是playwright 没有用selenium 中间出了一个滑块验证 现阶段playwright教程不是太多,自己做移动的时候各种找,费劲巴拉的.现在自己整出来 ...
- Linux配置yum源(离线和在线)
配置yum源有2种方法,一种是离线yum源,另外一种是在线yum源. 一.离线yum源,基于安装光盘提供的安装仓库. 建立一个属于仓库文件夹 mkdir /media/zidong cd /media ...
- vue 多级路由嵌套后打开页面是空白
在多层路由嵌套时,一级子目录必须有一个页面并且添加一具<router-view>,否则路由跳转页面为空,没有任何显示 来自为知笔记(Wiz)
- 经典变长指令-RegOpcode
一.回顾Mod/M结构 Intel 64 and IA-32 Architectures Instruction Format ModR/M结构图 Mod与R/M共同描述E的意义(内存或者通用寄存器) ...