
]]>
]]>在公司访问家里的 Windows 开发机,用来浏览器查阅资料、微信、Typora 笔记、Termius 等。
目前的现状是:
核心诉求是
| 方案 | 访问方式 | 客户端依赖 | 延迟 | 安全性 | 结论 |
|---|---|---|---|---|---|
| 日本服务器 + Guacamole | Web | 无 | 高 | 高 | ⚠️ 可用,但体验一般 |
| FRP + 家庭 Guacamole | Web | 无 | 中 | 高 | ⚠️ 可用,但体验一般 |
| FRP + SSH 隧道 + RDP | RDP | 无 | 低 | 高 | ✅ 最优解 |
| FRP + RDP + multiOTP | RDP | 无 | 低 | 很高 | ⭐ 可叠加 |
| 公益 FRP 内置 TOTP | RDP | 无 | 低 | 高 | ⚠️ 依赖定制 FRP |
公司电脑(自带 SSH 客户端) │ │ ssh -i key -N -L 13389:WIN:3389 ▼ 公益 FRP ( TCP 高位端口) │ ▼ PVE · Debian 跳板机 │ · 仅 SSH key │ · 仅允许访问 Windows:3389 ▼ 家庭 Windows ( RDP ) ❌ Windows 不暴露公网
❌ Debian 不能随意访问内网
❌ 禁止密码登录
❌ 不使用 22 / 3389 等常见端口
✅ Windows 启用 NLA ,使用非管理员账户
✅ 可选叠加 Windows 端 MFA ( multiOTP )
✅ 所有流量必须:FRP → SSH → 指定 RDP
✅ SSH 权限最小化(只做端口转发),通过防火墙锁死出口,只允许访问 Windows 的 3389 ,防止跳板机沦陷后内网被横向渗透。
apt update && apt upgrade -y apt install -y openssh-server ufw fail2ban curl 为了安全,我们将“管理权限”和“隧道权限”分开。
tunnel:只允许端口转发debian:运维备用账号# tunnel 用户:仅用于建立隧道,无 Shell 权限 adduser tunnel usermod -aG sudo tunnel # debian-cc 用户:管理员,用于维护系统 adduser debian usermod -aG sudo debian 在公司电脑生成密钥对,将公钥上传至 Debian 的 /home/tunnel/.ssh/authorized_keys
ssh-keygen -t ed25519 -f id_frp_ssh authorized_keys 中强制限制能力:我们需要配置 SSH ,使得公司电脑连接时,只能做端口转发,不能执行命令,且只能转发到家里的 Windows IP 。
restrict,port-forwarding,permitopen="192.168.31.120:3389" ssh-ed25519 AAAA... 这个 key:
编辑 /etc/ssh/sshd_config,修改 SSH 端口为高位端口(防扫描),并禁用密码登录。
Port 53822 # 高位端口 PermitRootLogin no # 禁止 Root PasswordAuthentication no # 禁止密码 ChallengeResponseAuthentication no PubkeyAuthentication yes # 只认 Key AllowUsers tunnel debian # 白名单用户 # 针对管理员:允许 Shell ,禁止转发 Match User debian PermitTTY yes AllowTcpForwarding no # 针对隧道用户:禁止 Shell ,限制转发目标 Match User tunnel AllowTcpForwarding yes PermitOpen 192.168.31.120:3389 X11Forwarding no AllowAgentForwarding no PermitTTY no 配置完成后重启 SSH 服务:systemctl restart ssh
验证原则只有一条:
跳板机只能访问 Windows ,不能访问任何其他内网。
# 1. 默认策略:拒绝入站,默认允许出站(稍后限制) ufw default deny incoming ufw default allow outgoing # 2. 允许 FRP 流量进出( SSH 端口) ufw allow 53822/tcp # 3. 精细化出站规则 (Output Chain) # 允许 Debian 访问 Windows 的 RDP ufw allow out to 192.168.31.120 port 3389 proto tcp # 允许访问网关 (DNS/路由需要) ufw allow out to 192.168.31.1 # 拒绝访问内网其他所有 IP (防止横向移动) ufw deny out to 192.168.31.0/24 # 启用防火墙 ufw enable 配置 /etc/fail2ban/jail.local 监控 53822 端口,错误尝试 2 次即封禁 24 小时。因为公网暴露 SSH 必然会被扫描,这是最后一道防线。
[sshd] enabled = true port = 53822 maxretry = 2 bantime = 24h 虽然 RDP 不暴露公网,但还是建议对目标 Windows 进行加固:
使用低延迟的国内公益 FRP (如樱花 FRP / Nyat 等),将 Debian 的 SSH 端口暴露出去。
# 切换到 tunnel 用户安装,避免使用 root su - tunnel wget https://github.com/fatedier/frp/releases/download/v0.56.0/frp_0.56.0_linux_amd64.tar.gz # ...解压并移动到 /usr/local/bin/frpc /etc/frpc.toml)我们**不直接穿透 RDP (3389)**,而是穿透 **SSH (53822)**。
serverAddr = "rdp.example.com" # FRP 服务端地址 serverPort = 7000 user = "your_user_id" auth.token = "your_token" [[proxies]] name = "tunnel_ssh" type = "tcp" localIP = "127.0.0.1" localPort = 53822 remotePort = 53389 创建 /etc/systemd/system/frpc.service 并启动,确保断电重启后自动上线。
在公司电脑上,不需要安装任何软件,只需要一个 SSH 私钥文件(id_frp_ssh)。
打开 PowerShell 或 CMD:
ssh -i id_frp_ssh -N \ -L 13389:192.168.31.120:3389 \ -p 53389 tunnel@frp.example.com -N: 不执行远程命令(仅转发)。-L 13389:IP:3389: 将本地的 13389 端口映射到家中 Windows 的 3389 。打开 Windows 自带的“远程桌面连接”
mstsc → 127.0.0.1:13389 .exe 或 VPN 客户端。晚上回家偶尔远程桌面过去。
第二天到公司就会发现,那些网页上都无法输入文字了,按键就卡死一段时间。
看起来是为了 RDP 会话做了什么画蛇添足的优化,很不方便。
]]>在外部(主力 iOS/Windows ,偶尔 Android )连上 Windows 主机。
域名+大端口 访问用的 win10 中文 terminal 在开始菜单中显示的是终端 在英文版系统中,我只需按下 Win 键,然后输入 "T",开始菜单就能立即列出 Terminal 应用。但在中文版中,由于应用名称是中文,这个快速索引方式就失效了。
请问有没有什么方法,比如创建别名或重命名,让我能够通过英文名称在开始菜单中快速访问这个应用?
目前网上查询过一种直接改应用名的,但是可能由于 terminal 的特殊性,并不能直接在开始菜单重命名
]]>最好有拦截日志可以查看
最好只有防火墙功能就 OK 了,其他乱七八糟的用不着
新程序首次联网时必须有弹窗,手动确认是否允许放行
目前试用了:
GlassWire 免费版基本不算有防火墙
ZoneAlarm 只提供一个下载器 没有安装包,感觉下了个操作系统 安装极其困难
TinyWall 算是很不错的防火墙,但新程序不弹框直接被拦了,没有选择余地,官网有写“The no-popup approach”原因,但就是难用
至于 Windows Defender ,不太会用 太难了,允许软件自己加规则 反人类,还得跑到 gpedit.msc 里面的防火墙去阻止😂 鬼知道这里面还会不会被什么地方篡改
]]>真的假的, 这么大问题没人提阿
关键是, 关不掉这种默认虚拟机方式
我反正以前装过两次 win11, 很快受不了都换成 win10 了, 近 3,4 年再没试过
]]>Not a valid password,但 32 位 PowerShell 手动加 Jet OLEDB:Database Password=; 声明空密码,能正常访问 MDB ;Jet OLEDB 4.0 已是 20 多年老组件,实在费解微软为何改动验证逻辑,求大佬解惑!
]]>
A. 至今最新版显卡驱动仍然偶尔复现
a. Chrome 偶尔 freeze ,具体表现为上半屏不再更新,下半屏继续滚动。按一下 Win 键能触发屏幕更新后正常。
b. 由英文输入法切换到中文输入法(均为 Win11 自带)后,Chrome 中无法输入,此时鼠标点击 url 栏无法触发文字选择。只能重启 Chrome 解决。
B. 至今最新版显卡驱动已修复
a. B 站全屏后按 Ctrl+W 直接在全屏关闭页面会让显卡卡死,此时按 CapsLock 会自动熄灭。只能重启系统解决。
C. 未测试现在是否有问题
a. (和 Chrome 无关)某一个 Minecraft 整合包在退出时会产生 B.a 的问题。
A 卡的 Bug 确实多,修复也慢。各位有遇到过相似问题吗?有没有什么解决方法?
]]>
但最近两个月系统开始经常在开机后蓝屏重启,连续三四次都是不一样的错误代码。在远程桌面连过一次之后也容易死机需要强制重启。但是如果正常开机了,不管是连续开机一周还是长时间高负载工作/打游戏都没出过问题。这就非常诡异
再加上系统自带的杀毒软件把 NUC 控制中心当病毒杀了,然后 Windows 自动更新下载回来无限循环(后来手动关了有问题的补丁);以及输入法总是在切窗口后变成中文这些小问题。我就打算趁周末通过重装系统来解决可能的 99%的问题。
更了 25 年 8 月最新的 BIOS 后。刚装完系统还在更新驱动,重启电脑就又蓝屏了……这下可能只有重买能解决问题了。考虑并排查下可能的故障源
先拔掉显卡和一根内存,换用之前的 24H2 镜像重做系统(减小可能故障面,在有更新的情况下开关机时蓝屏会导致更新失败,出更玄学的问题)成功后开始排查硬件问题:
B 站有个 CPU 缩缸的测试办法:7zip 性能测试,跑了一小时正常。Memtest 跑内存也没报错。在做完以上所有事情后整个周末被蒸发了……
今天又装了些软件,重启了几次。遇到了两次开机时蓝屏。这时候想到可以用 AI 来分析错误日志:用 windbg 解析蓝屏的 dmp 文件( C:\Windows\Minidump 下),将结果交给 AI 分析,得到结论是:"系统在尝试停止一个 Hyper-V (虚拟化) 相关的定时器时,CPU 执行了一条当前级别不允许的指令。这通常指向 BIOS/UEFI 固件与 Windows 虚拟化功能之间的兼容性问题,或者底层硬件电源管理( C-State )在虚拟化环境下的 Bug 。"
问题范围被缩小到了驱动/系统 bug/cpu 故障。AI 建议我关掉 C-State ,可是 BIOS 里没找到选项。等下个周末继续折腾吧
之前看到 Win11 各种 bug 的新闻觉得有些危言耸听,这次彻底被恶心到了
附 1:为什么 750W 电源带 14900K+5090……NUC 闲鱼买来的时候就是 14900K ,BIOS 限制了 150W 运行。而 5090 在调了电压后满载功耗不到 450W 。日常使用几乎不可能同时满载 CPU 和显卡,所以 750W 电源勉强能用,就是显卡只能发挥 85%性能。要升级电源只能选海盗船 SF1000 ,还要海淘特殊转接线才能用。(今天淘宝发现有国产转接线了,已下单电源和定制线)
附 2:触发了一个微软账户的 bug:创建本地账户再换微软账户登录后,开机密码还是之前本地账户的,而不是微软账户密码;并且微软设备页也找不到新设备。Windows 安全中心提示未登录微软账户,但是登录页面报错。登录了账户但没完全登录。我因为这个问题尝试了多个版本系统。

附 3:这次重装系统后 OneDrive 稳定性非常差,动不动就闪退。遗留的快捷方式文件和个人保险库冲突还自动改名了。去官网重新下载了 OneDrive 后有所改善
]]>谢谢
]]>只需要基本功能的话,选择太多了,看花老眼
哪一款体验比较好,插件生态好
]]>
尝试过修改 BIOS 设置,没用。
也调整过电源计划中的“最小处理器状态”,结果发现 CPU 功耗虚高。
后来才意识到,罪魁祸首是微软的那套 CPU Core Parking 机制。
在 Win11 的图形界面中根本找不到相关选项,必须手动修改注册表,或者借助第三方工具才能禁用。
https://coderbag.com/programming-c/disable-cpu-core-parking-utility
如果我已经启用了 C-State ,那么你系统层面的 CPU Core Parking ,到底还能额外帮我省多少电量(我的是台式机!)?说是延迟是毫秒级别的,结果开个 chrome 都要卡个 10 几秒! Fuck!
]]>在看到这个新闻之前,我的开始菜单搜索功能已经罢工很久了。在一个月前,我偶尔还能通过重启来恢复使用,现在是无论怎么重启都不行了。
其次是一些第三方的软件,例如 clash verge 这种利用了 tauri 开发的软件,打开也是白屏的。
直到我看到这个新闻,我才惊奇的发现,这可能就是 KB5062553 的 BUG 。
周一开始,我就已经在考虑重装系统了。真的服了这群印度阿三了
]]>
]]>事件查看器中会有Kernel-Power 41 ( 63 )错误。 这是我遇到的情况,你们有遇到吗?有点想安装 Fedora ,试试 Steam 的兼容性了。
]]>
#include <windows.h> #include <shlobj.h> #include <vector> #include <string> #include <iostream> #include <chrono> #include <thread> HHOOK g_mouseHook; bool g_isDragging = false; POINT g_dragStartPos = { 0, 0 }; const int DRAG_THRESHOLD = 3; // 拖动阈值(像素) void ExtractFileInfoFromDropClipboard(); void CheckOtherDataFormats(IDataObject* pDataObject); void ExtractFileTypeInfo(const std::wstring& filePath); LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam) { if (nCode == HC_ACTION) { MSLLHOOKSTRUCT* pMouse = (MSLLHOOKSTRUCT*)lParam; if (wParam == WM_LBUTTONDOWN) { //std::cout << "Mouse Button Down at (" << pMouse->pt.x << ", " << pMouse->pt.y << ")\n"; // 你可以在这里检测是否是拖拽开始的条件 // 记录拖动起始位置 g_dragStartPos = pMouse->pt; g_isDragging = false; } if (wParam == WM_MOUSEMOVE) { // 检测鼠标是否有拖拽操作 if (GetAsyncKeyState(VK_LBUTTON) & 0x8000) { // 检查是否超过拖动阈值 int deltaX = abs(pMouse->pt.x - g_dragStartPos.x); int deltaY = abs(pMouse->pt.y - g_dragStartPos.y); if (!g_isDragging && (deltaX > DRAG_THRESHOLD || deltaY > DRAG_THRESHOLD)) { g_isDragging = true; std::cout << "move begin..." << std::endl; // 尝试从拖放剪贴板获取文件信息 ExtractFileInfoFromDropClipboard(); } } } if (wParam == WM_LBUTTONUP) { if (g_isDragging) { std::cout << "move end" << std::endl; g_isDragging = false; } } } return CallNextHookEx(g_mouseHook, nCode, wParam, lParam); } // 从拖放剪贴板提取文件信息 void ExtractFileInfoFromDropClipboard() { HRESULT hr = OleInitialize(nullptr); if (FAILED(hr)) { std::cerr << "OleInitialize failed: " << hr << std::endl; return; } IDataObject* pDataObject = nullptr; // 获取拖放剪贴板数据 hr = OleGetClipboard(&pDataObject); if (SUCCEEDED(hr) && pDataObject) { FORMATETC fmtetc = { CF_HDROP, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL }; if (SUCCEEDED(pDataObject->QueryGetData(&fmtetc))) { STGMEDIUM stgmed; // 查询 HDROP 数据 hr = pDataObject->GetData(&fmtetc, &stgmed); if (SUCCEEDED(hr)) { HDROP hDrop = static_cast<HDROP>(GlobalLock(stgmed.hGlobal)); if (hDrop) { // 获取文件数量 UINT fileCount = DragQueryFile(hDrop, 0xFFFFFFFF, nullptr, 0); std::cout << "drag file count: " << fileCount << std::endl; // 遍历所有文件 for (UINT i = 0; i < fileCount; i++) { // 获取文件路径长度 UINT pathLength = DragQueryFile(hDrop, i, nullptr, 0); if (pathLength > 0) { std::vector<TCHAR> buffer(pathLength + 1); DragQueryFile(hDrop, i, buffer.data(), pathLength + 1); std::wstring filePath(buffer.data()); std::wcout << L"file " << (i + 1) << L": " << filePath << std::endl; // 获取文件属性信息 ExtractFileTypeInfo(filePath); } } GlobalUnlock(stgmed.hGlobal); } ReleaseStgMedium(&stgmed); } } else { std::wcout << L"CF_HDROP format not supported" << std::endl; // 尝试其他数据格式 //CheckOtherDataFormats(pDataObject); } pDataObject->Release(); } else { std::wcerr << L"can not get clipboard data" << std::endl; } OleUninitialize(); } // 检查其他数据格式 void CheckOtherDataFormats(IDataObject* pDataObject) { // 查询支持的数据格式 IEnumFORMATETC* pEnumFormat = nullptr; HRESULT hr = pDataObject->EnumFormatEtc(DATADIR_GET, &pEnumFormat); if (SUCCEEDED(hr) && pEnumFormat) { FORMATETC fmtetc; ULONG fetched = 0; std::cout << "data format in clipboard:" << std::endl; while (pEnumFormat->Next(1, &fmtetc, &fetched) == S_OK && fetched == 1) { TCHAR formatName[256]; if (GetClipboardFormatName(fmtetc.cfFormat, formatName, 256) > 0) { std::wcout << L"format1: " << formatName << L" (ID: " << fmtetc.cfFormat << L")" << std::endl; } else { // 标准格式 std::string stdFormatName; switch (fmtetc.cfFormat) { case CF_TEXT: stdFormatName = "CF_TEXT"; break; case CF_UNICODETEXT: stdFormatName = "CF_UNICODETEXT"; break; case CF_BITMAP: stdFormatName = "CF_BITMAP"; break; case CF_DIB: stdFormatName = "CF_DIB"; break; case CF_HDROP: stdFormatName = "CF_HDROP"; break; case CF_LOCALE: stdFormatName = "CF_LOCALE"; break; case CF_OEMTEXT: stdFormatName = "CF_OEMTEXT"; break; default: stdFormatName = "unknown"; break; } std::cout << "format2: " << stdFormatName << " (ID: " << fmtetc.cfFormat << ")" << std::endl; } } pEnumFormat->Release(); } } // 提取文件类型信息 void ExtractFileTypeInfo(const std::wstring& filePath) { // 获取文件属性 DWORD attr = GetFileAttributes(filePath.c_str()); if (attr != INVALID_FILE_ATTRIBUTES) { if (attr & FILE_ATTRIBUTE_DIRECTORY) { std::wcout << L" type: directory" << std::endl; } else { std::wcout << L" type: file" << std::endl; // 获取文件扩展名 size_t dotPos = filePath.find_last_of(L'.'); if (dotPos != std::wstring::npos) { std::wstring extension = filePath.substr(dotPos); std::wcout << L" extension: " << extension << std::endl; } // 获取文件大小 HANDLE hFile = CreateFile(filePath.c_str(), GENERIC_READ, FILE_SHARE_READ, nullptr, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr); if (hFile != INVALID_HANDLE_VALUE) { LARGE_INTEGER fileSize; if (GetFileSizeEx(hFile, &fileSize)) { std::wcout << L" size: " << fileSize.QuadPart << L" bytes" << std::endl; } CloseHandle(hFile); } } // 显示文件属性 std::wcout << L" properties: "; if (attr & FILE_ATTRIBUTE_READONLY) std::wcout << L"[read-only]"; if (attr & FILE_ATTRIBUTE_HIDDEN) std::wcout << L"[hidden]"; if (attr & FILE_ATTRIBUTE_SYSTEM) std::wcout << L"[system]"; if (attr & FILE_ATTRIBUTE_ARCHIVE) std::wcout << L"[archive]"; std::wcout << std::endl; } } void InstallMouseHook() { g_mouseHook = SetWindowsHookEx(WH_MOUSE_LL, MouseProc, NULL, 0); if (g_mouseHook == NULL) { std::cerr << "Failed to install mouse hook!" << std::endl; } } int main() { InstallMouseHook(); // 进入消息循环 MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } // 卸载钩子 UnhookWindowsHookEx(g_mouseHook); return 0; } ]]>勾选允许管理操作系统共享此网络适配器( M )才能让宿主机连接互联网? 系统环境:
Hyper-V 虚拟交换机环境:
问题: 在虚拟交换机管理器 - 虚拟交换机 - Default WAN - 连接类型 - 外部网络 - 允许管理操作系统共享此网络适配器( M ) 这个复选框:
为什么勾选后宿主机才能连接互联网?
]]>针对上述争议,Windows 负责人 Pavan Davuluri 最近在 X 平台回应表示微软已经意识到问题的存在,并将根据反馈调整产品优先级。
Davuluri 表示微软正重新评估 AI 推进的节奏,并注意到用户对 AI 功能过多侵入式整合的不满。虽然 AI 仍会继续融入 Windows ,但团队会将更多资源投入到用户体验、性能优化和专业场景增强功能中。此外,微软计划调整内部工程团队的组织方式,使核心功能开发更紧密协作,以提升问题响应能力与产品质量。
微软后续将加强对稳定性和一致性体验的关注,简化 Windows 11 的操作流程,同时在 AI 方向保持适度创新。通过在功能扩展和系统基础体验之间取得平衡,微软希望改善当前的用户口碑,并增强 Windows 对普通用户与开发者的吸引力。
]]>有没有一款软件可以让中英文切换时,光标显示不同的颜色
吐槽下 window, 按下 Shift 切换输入后,快速输入文字,可能会导致切换不生效;
经常切换后输入一大串字符,又删除重复输入,太难了
]]>