驯服 Windows 网络:双网卡并发、SSH 穿透与 SMB 挂载

网络拓扑概览 (Topology Overview)

Web

1.校园骨干网 (Campus Intranet)

整个学校构成了一个巨大的局域网(MAN),IP 地址段通常为 10.x.x.x

  • 学校的核心网络接入是NWPU-FREE / NWPU-WiFi 包括有线和无线连接
  • 无论是图书馆、宿舍还是食堂,无线终端设备通过 Wi-Fi (XXXX-FREE / XXXX-WIFI),有线终端设备则通过网线,接入这个大局域网。

2. 实验室局域网 (Lab Subnet)

为了满足多设备接入的需求,实验室内部通常会部署二级路由器,形成“网中网”。 在我的实验室中,存在两台路由器,将网络划分为两个独立的子网:

  1. TP-Link 子网 (192.168.1.x)
  2. **Xiaomi 子网 (192.168.31.x)**。

3. 个人核心设备 (Infrastructure)

我的主力生产力工具大多都挂载在 TP-Link 路由器下:

  • Murphy-ITX-Win/Ubt:办公PC(双系统),192.168.1.x
  • NAS:实验室数据存储中心,仅有内网 IP,192.168.1.x
  • OECT:刷了CasaOS的轻NAS,主要用于数据冷备份,192.168.1.x
  • Murphy-TB16p或手机等移动设备,在教研室内会连接内部路由器,出来之后一般连接NWPU-Free。

4. 路由追踪举例

1
2
3
4
5
houjinliang@481-nas:~$ traceroute 10.70.xx.x
traceroute to 10.70.xx.xx (10.70.xx.xx), 30 hops max, 60 byte packets
1 192.168.1.1 (192.168.1.1) 0.835 ms 0.790 ms 0.515 ms
2 10.68.0.1 (10.68.0.1) 10.201 ms 10.301 ms 10.424 ms
3 10.70.xx.xx (10.70.xx.xx) 1.857 ms 2.107 ms 2.078 ms
  • 第 1 跳:192.168.1.1 (TP-Link 路由器)
    • NAS 成功通过网线找到了它的网关(TP-Link)。这证明 NAS 的网络设置没问题,TP-Link 正在正常工作。
    • TP-Link是网关是实验室的内部大门。
  • 第 2 跳:10.68.0.1 (核心汇聚网关)
    • 这是最关键的节点。不管你去 10.6810.69 还是 10.70,都会经过这里。
  • 第 3 跳:目标服务器
    • 直接到达终点。

10.68.0.1 的真实身份:它很可能是学校核心交换机上的一个 **虚接口 (SVI - Switch Virtual Interface)**。

这个核心交换机上划分了多个 VLAN:

  • VLAN 68: 对应 10.68.x.x 网段
  • VLAN 69: 对应 10.69.x.x 网段
  • VLAN 70: 对应 10.70.x.x 网段

实验室墙上的那个有线网口,拥有“VIP 待遇”,它在网络拓扑上比校园网 Wi-Fi 离服务器机房更近!

4.2 连接 Xiaomi 的设备访问GPUServers

1
# TODO

4.3 连接 XXXX-FREE 的设备访问GPUServers

1
2
3
4
5
6
7
8
(base) PS C:\Users\cosmi> tracert 10.70.xx.xx
通过最多 30 个跃点跟踪到 10.70.200.143 的路由
1 3 ms 5 ms 6 ms 10.31.0.1
2 7 ms 5 ms 21 ms 172.20.0.xx
3 3 ms 8 ms 6 ms 172.20.0.xx
4 3 ms 11 ms 65 ms 172.20.0.6
5 5 ms 3 ms 4 ms 10.70.xx.xx
跟踪完成。

WiFi -> [WiFi 网关 10.31.0.1] -> [骨干网 172.20.x.x] -> [核心交换机入口 172.20.0.6] -> 服务器。

  • 10.68.0.1:是实验室有线网络的专属网关。只有从实验室网线出来的流量才会看到它。

  • 172.20.x.x:是学校的公共骨干道路。从 Wi-Fi(或其他教学楼)过来的流量都会走这条路。

4.4 连接XXXX-FREE的设备访问连接XXXX-FREE的设备(同一个10.31子网)

1
2
3
4
5
6
(base) PS C:\Users\cosmi> tracert 10.31.xx.xx
通过最多 30 个跃点跟踪
到 MURPHY-ITX-WIN [10.31.xx.xx] 的路由:
1 63 ms 3 ms 5 ms 10.31.0.1
2 30 ms 21 ms 5 ms MURPHY-ITX-WIN [10.31.xx.xx]
跟踪完成。

明明两台设备都在同一个 WiFi(10.31.x.x)里,为什么不直接“点对点”通话,非要跑去网关(10.31.0.1)绕一圈?

核心原因:AP 隔离 (AP Isolation)

学校网络为了安全,通常开启了 “AP 隔离”“二层隔离” 功能。

  • 不隔离(家用模式):就像在一个嘈杂的聚会。我和你面对面,可以直接说话,不需要经过主人。
  • 隔离(校园模式):就像在一个考场
    • 所有学生(设备)都坐在同一个教室里(同一个 IP 段)。
    • 但是严禁交头接耳(禁止设备间直接通信)。
    • 如果我想传纸条给你,我必须先把纸条交给监考老师(网关 10.31.0.1),老师检查没问题后,再把纸条递给你。

为什么要这么做?

  • 防止病毒扩散:如果一台学生电脑中了勒索病毒,试图扫描局域网里的其他电脑(ARP 攻击或广播风暴),AP 隔离会直接把它的嘴堵住,不让它祸害旁边的同学。
  • 性能优化:防止无用的广播包在无线空口里乱飞,节省宝贵的 WiFi 频宽。

4.5 连接XXXX-FREE的设备访问连接XXXX-FREE的设备(不同的子网,如10.68 与 10.70)

1
2
3
4
(base) houjinliang@3090server:~$ traceroute 10.68.xx.xx
traceroute to 10.68.xx.xx (10.68.xx.xx), 30 hops max, 60 byte packets
1 _gateway (10.68.0.1) 8.217 ms 8.292 ms 8.395 ms
2 10.68.xx.xx (10.68.xx.xx) 0.489 ms 0.460 ms 0.432 ms

这里10.70的服务器连接的网关的’_gateway (10.68.0.1)’, 能与10.68的服务器直连。

1
2
3
4
5
6
7
8
9
10
11
12
13
(base) PS C:\Users\cosmi> tracert 192.168.1.xx

通过最多 30 个跃点跟踪到 192.168.1.39 的路由

1 4 ms 7 ms 4 ms 10.31.0.1
2 81 ms 7 ms 7 ms 172.20.0.xx
3 10 ms 4 ms 7 ms 172.20.0.xx
4 9 ms 8 ms 12 ms 172.20.0.xx
5 9 ms 68 ms 4 ms 172.20.128.xx
6 * * * 请求超时。
7 * * * 请求超时。
8 * * * 请求超时。
9 * * * 请求超时。

这种情况是联不通的,NAT 的“单向玻璃”特性

内 -> 外(允许): 当你坐在实验室(192.168.1.x)访问百度时,TP-Link 路由器会把你的私有 IP 替换成它的 WAN 口 IP(10.x.x.x)发出去。

外 -> 内(禁止): 当你从图书馆(10.31.x.x)试图访问 192.168.1.x 时,TP-Link 会直接拦截。因为它遵循一个原则:“任何我没主动请求过的外部数据,一律视为攻击,直接丢弃。”

即使 TP-Link 愿意放行,校园网的路由器也不知道怎么走。

  • 场景:你在图书馆喊一声:“我要找 192.168.1.x!”
  • 校园网核心路由器:它会一脸懵逼。因为 192.168.1.x 是私有地址,全校可能有 100 个实验室都在用这个网段
  • 结果:核心路由器根本不知道你要找的是“张三实验室的 192.168”还是“李四宿舍的 192.168”,所以它通常配置为不转发此类私有地址,或者直接丢弃。

但是存在例外的情况:唯一的例外:端口映射 (Port Forwarding), 只有一种情况能通,那就是你在 TP-Link 上手动开了“后门”。

  • 比如设置:“凡是访问我 WAN 口 8080 端口的,都转给内网的 NAS。”
  • 即便如此,你也只能访问这一个特定的端口,而且前提是你知道 TP-Link WAN 口那个 10.x.x.x 的 IP 是多少。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
houjinliang@481-nas:~$ tracert 10.31.xx.xx
-bash: tracert: command not found
houjinliang@481-nas:~$ traceroute 10.31.xx.xx
traceroute to 10.31.xx.xx (10.31.xx.xx), 30 hops max, 60 byte packets
1 192.168.1.1 (192.168.1.1) 0.425 ms 0.473 ms 0.540 ms
2 10.68.0.1 (10.68.0.1) 3.686 ms 3.851 ms 3.987 ms
3 172.20.0.xx (172.20.0.xx) 2.640 ms 2.726 ms 2.807 ms
4 172.20.0.xx (172.20.0.xx) 2.670 ms 2.644 ms 2.726 ms
5 172.20.0.xx (172.20.0.xx) 3.102 ms 3.077 ms 3.155 ms
6 * * *
7 * * *
8 * * *
9 * * *
10 * * *

这里虽然是没有连接上的,但是按道理来说应该是可以连上的,192.168.1.x 通过 NAT 伪装成了一个10.68.0.x 的设备,所以跟连接XXXX-FREE的设备是同出相同内网的,按道理来说是能连上的。

用了GPUServer(10.68.x.x / 10.70.x.x)进行连接测试,也是连不上。

1
2
3
4
5
6
7
8
9
10
11
12
(base) houjinliang@3080server:~$ traceroute 10.31.xx.xx
traceroute to 10.31.xx.xx (10.31.xx.xx), 30 hops max, 60 byte packets
1 _gateway (10.68.0.1) 1.897 ms 2.033 ms 2.173 ms
2 172.20.0.5 (172.20.0.xx) 1.889 ms 1.992 ms 2.153 ms
3 172.20.0.22 (172.20.0.xx) 4.518 ms 4.567 ms 4.777 ms
4 172.20.0.38 (172.20.0.xx) 1.396 ms 1.484 ms 1.524 ms
5 * * *
6 * * *
7 * * *
8 * * *
9 * * *
10 * * *

照这样的情况来说,大概率是被XXXX-FREE的设备(Windows系统)的防火墙给拦截了!

用Murphy-ITXWin(10.31.x.x)进行连接测试,可以连接上。

1
2
3
4
5
6
(base) PS C:\Users\cosmi> tracert 10.31.x.x
通过最多 30 个跃点跟踪
到 MURPHY-TB16P [10.31.x.x] 的路由:
1 3 ms 1 ms 2 ms 10.31.0.1
2 8 ms 12 ms 11 ms MURPHY-TB16P [10.31.x.x]
跟踪完成。

你的笔记本连接的是校园网 WiFi。

  • 默认策略:Windows 默认把校园网识别为 **“公用网络” (Public Network)**。
  • 安全规则:在公用网络下,Windows 防火墙会开启 “隐身模式”——它会丢弃所有入站的 ICMP 请求(也就是 Ping 和 Traceroute 包)。
  • 现象:NAS 发出的探针戳到了笔记本,笔记本系统内核收到了,看了一眼防火墙规则:“哦,公用网络不许 Ping”,然后直接把包扔进垃圾桶,不给回执
  • 结果:NAS 以为包丢了,所以显示 * * *

Windows 防火墙的很多规则(尤其是 ICMP 回显/Ping),默认设置的 “作用域 (Scope)” 都是 “仅限本地子网 (LocalSubnet)”

这就是为什么:

  • Murphy-ITXWin PC 能通:因为它在“本地子网”白名单里。
  • 服务器/NAS 不通:因为它们属于外部子网。

要实现个人设备互联可能面临的情况

现在我有一个需求是,我在图书馆使用Murphy-TB16p(10.x.x.x)如何连接教研室电脑Murphy-ITXWin/Ubt,进行资源访问。

笔记本 -> SSH -> 服务器:

  • 。两者都在校园网大池子里,路由可达。

台式机 (192.168) -> SSH -> 服务器 (10.69):

  • 。台式机的流量经过实验室路由器,路由器做一个 NAT(把源IP伪装成路由器的WAN口IP),发给服务器。服务器回包给路由器,路由器再转给台式机。

笔记本 (10.31) -> SSH -> 台式机 (192.168):

  • **不通 (大概率)**。这是最关键的区别。
  • 你的笔记本在“大网”,台式机在“小网”内部。大网的设备不知道 192.168.x.x 在哪里(或者即使知道,也被实验室路由器的防火墙挡住了)。

笔记本 (10.31) -> SSH -> 台式机 (192.168)的连接实现(并未做尝试)

方案一:端口映射 (Port Forwarding) —— 最推荐,速度最快

前提条件:你需要有权限登录实验室那个路由器的管理后台。

原理:告诉路由器:“如果在校园网有人访问你的 WAN口 IP 的 10022端口,请把这个请求直接转交给内部 192.168.x.x 的 22端口。”

操作步骤

  1. 固定台式机IP:在你的台式机上,或者路由器设置里,把台式机的IP固定下来(例如 192.168.1.100),防止重启后变动。
  2. 查看路由器的WAN口IP
    • 登录路由器后台,查看 “运行状态”“上网设置”
    • 找到 WAN口 IP地址。注意:这个IP必须是 10.x.x.x 开头的(校园网IP)。记下它,假设是 10.70.100.5
  3. 设置映射
    • 在路由器后台找到 “虚拟服务器”“端口转发”“NAT设置”
    • 添加一条规则:
      • 外部端口10022 (可以自己定,建议不用默认的22,避免冲突)
      • 内部IP地址192.168.1.100 (你的台式机IP)
      • 内部端口22 (SSH默认端口)
      • 协议TCPALL
  4. 连接方法
    • 在笔记本上(连接校园网时):ssh username@10.70.100.5 -p 10022

优点:直连,速度最快,不依赖第三方软件。

缺点:如果路由器的WAN口IP是动态获取的(DHCP),IP变了你就连不上了(除非学校给这个网口分配了固定IP)。


方案二:虚拟组网 (ZeroTier / Tailscale)

前提条件:台式机和笔记本都能联网即可。不需要动路由器。

原理:这两个软件会在你的台式机和笔记本上装一个“虚拟网卡”,把它们拉进同一个“虚拟聊天室”。无论物理位置在哪里,它们都认为对方就在身边。

**操作步骤 (以 Tailscale 为例,更傻瓜化)**:

  1. 注册:去 Tailscale 官网用邮箱注册个账号。
  2. **安装 (台式机)**:在实验室台式机安装 Tailscale 客户端并登录。它会获得一个类似 100.x.y.z 的虚拟IP。
  3. **安装 (笔记本)**:在笔记本安装 Tailscale 并登录同一个账号。
  4. 连接方法
    • 在笔记本上直接 SSH 台式机的那个 虚拟IP
    • ssh username@100.x.y.z

优点:完全无视路由器和防火墙,配置极其简单,还能跨网(比如你在校外家里也能连)。

缺点:流量经过了一层虚拟封装,速度可能略低于方案一,但在校园网内通常很快。


方案三:SSH 跳板/反向隧道 —— 利用现有的服务器

前提条件:你拥有列表中某台服务器(例如 10.69.xx.xx)的账号权限,且这台服务器在校园网内长期开机。

原理:台式机虽然被藏起来了,但它能主动出击。让台式机主动去连服务器,建立一条“秘密隧道”。笔记本通过服务器钻进这个隧道找到台式机。

操作步骤

  1. 在台式机上 (建立反向隧道):

    执行命令(需要保持运行,可以用 tmux 或 autossh 挂在后台):

1
2
#意思:把服务器的 8888 端口,映射到我(localhost)的 22 端口
ssh -NfR 8888:localhost:22 username@10.69.xx.xx
  1. 在笔记本上 (连接):

    你现在连上那台服务器 10.69.xx.xx,然后在服务器内部跳一跳:

1
ssh username@localhost -p 8888

或者直接在笔记本配置 ProxyJump (更高级用法)。

优点:不需要动路由器,不需要装新软件。

缺点:依赖中间那台服务器的稳定性;配置稍微硬核一点,需要会用命令行保持连接。

情况二:Murphy-ITXWin/Ubt 通过有线/无线的方式连接到XXXX-FREE(分配IP:10.x.x.x)

问题1,子网问题

这样的情况下,Murphy-TB16p 与 Murphy-ITXWin/Ubt 在“有可能”同一个子网下。

为什么是有可能?

10.0.0.010.255.255.255 在确实被定义为 A类私有地址

  • 标准 A 类的定义:前 1 段是网络号,后 3 段是主机号。
  • 标准 A 类掩码255.0.0.0
  • 含义:只要是 10 开头的,大家都是一家人。10.1.1.110.200.200.200 在同一个局域网里。

但现实中几乎没人这么用! 因为如果全校几万台设备都在同一个“A类大网”里,只要一台电脑中毒发广播,几万台设备都会被吵死(广播风暴),网络瞬间瘫痪。

学校网关设置了“子网掩码”!255.255.0.0,这意味着:

你的 IP 对方 IP 掩码 (规则) 关系 防火墙“本地子网”策略
10.31.1.1 10.31.2.2 255.255.0.0 同子网 ✅ 允许
10.31.1.1 10.32.1.1 255.255.0.0 不同子网 ❌ 拦截
10.31.1.1 10.32.1.1 255.0.0.0 (纯A类) 同子网 ✅ 允许 (但学校不这么配)

“子网掩码”!255.255.0.0的这个设置是由学校的网络中心(DHCP 服务器)统一推送到你的设备上的,自己是无法决定的。

当电脑连接校园 Wi-Fi 并选择“自动获得 IP 地址”时,实际上发生了一次对话:

  1. 你的电脑喊:“我是新来的,我要入网!谁来管管我?”(发送 DHCP Discover 广播)
  2. 学校服务器答:“来,给你分配个位子。”
    • 你的 IP10.31.xx.
    • 子网掩码255.255.0.0(这是最关键的规矩)
    • 网关10.31.0.1

虽然有这样的问题,但实际情况还是比较乐观的,首先我们可以看到(4.3 连接 XXXX-FREE 的设备访问GPUServers),在 10.31 连接 10.70 子网的设备是可以的:

1
2
3
4
5
6
7
8
(base) PS C:\Users\cosmi> tracert 10.70.xx.xx
通过最多 30 个跃点跟踪到 10.70.200.143 的路由
1 3 ms 5 ms 6 ms 10.31.0.1
2 7 ms 5 ms 21 ms 172.20.0.xx
3 3 ms 8 ms 6 ms 172.20.0.xx
4 3 ms 11 ms 65 ms 172.20.0.6
5 5 ms 3 ms 4 ms 10.70.xx.xx
跟踪完成。

WiFi -> [WiFi 网关 10.31.0.1] -> [骨干网 172.20.x.x] -> [核心交换机入口 172.20.0.6] -> 服务器。

  • 10.68.0.1:是实验室有线网络的专属网关。只有从实验室网线出来的流量才会看到它。

  • 172.20.x.x:是学校的公共骨干道路。从 Wi-Fi(或其他教学楼)过来的流量都会走这条路。

其中包括了两方的规则放行

  • 学校的骨干网(172.20)运行不同子网之间的设备进行通信,只要是 10.x.x.x 开头的内部网段,路由器默认都会帮忙转发,所以在物理上,路是通的
  • 被访问方(GPUServer/Murphy-ITXWin/Ubt)通过设置好防火墙规则,运行“允许任何 IP”访问,那么问题就解决了!

问题2,内部小局域网问题

Murphy-ITXWin/Ubt 通过有线/无线的方式连接到XXXX-FREE(分配IP:10.x.x.x)之后,访问不了NAS所在的TP-Link所在的192.168.1.x的子网了!

成年人不做选择题,我两个都要

可以通过“双网卡并发(Dual Homing)”的方案来完美解决这个问题:让台式机同时连接有线网卡(连实验室路由)和无线网卡(连校园 Wifi)。

下面讲具体的操作逻辑!

情况二的解决方案

概要:当Murphy-ITXWin/Ubt同时连接这两张网时,Windows 会“精神分裂”,导致Murphy-TB16p无法 SSH 连接Murphy-ITXWin/Ubt,或者Murphy-ITXWin/Ubt无法访问内网 NAS。同时,Windows 繁琐的权限验证(UAC、Microsoft 账号)也让文件共享变得异常困难。本文记录了如何通过双网卡路由管理、SSH 服务配置以及命令行级共享管理,将 Windows 打造成如 Linux 般灵活的”服务器”。

第一部分:解决“双网卡冲突” (Split Routing)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#当有线以太网适配器和无线局域网适配器都连接时,两种方式都可以上网
(base) PS C:\Users\cosmi> ipconfig
Windows IP 配置
以太网适配器 以太网:
连接特定的 DNS 后缀 . . . . . . . :
本地链接 IPv6 地址. . . . . . . . : xxxxxxxxxxxxxxxxxxx
IPv4 地址 . . . . . . . . . . . . : 192.168.1.xx
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . : 192.168.1.1 # (实验室路由器)

无线局域网适配器 WLAN:
连接特定的 DNS 后缀 . . . . . . . :
IPv6 地址 . . . . . . . . . . . . : xxxxxxxxxxxxxxxxxxx
临时 IPv6 地址. . . . . . . . . . : xxxxxxxxxxxxxxxxxxx
本地链接 IPv6 地址. . . . . . . . : xxxxxxxxxxxxxxxxxxx
IPv4 地址 . . . . . . . . . . . . : 10.31.xx.xx
子网掩码 . . . . . . . . . . . . : 255.255.0.0 # 这个子网掩码要求第二位数相同才是同一个子网
默认网关. . . . . . . . . . . . . : xxxxxxxxxxx
10.31.0.1 # (校园网)

这个时候,Windows的状态栏显示的是“WiFi”连接,但事实是这样的?

1
2
3
4
5
6
7
8
9
10
(base) PS C:\Users\cosmi> route print -4
活动路由:
网络目标 网络掩码 网关 接口 跃点数
0.0.0.0 0.0.0.0 192.168.1.1 192.168.1.xx 25
0.0.0.0 0.0.0.0 10.31.0.1 10.31.xx.xx 35

(base) PS C:\Users\cosmi> tracert -d 114.114.114.114
通过最多 30 个跃点跟踪到 114.114.114.114 的路由
1 <1 毫秒 <1 毫秒 <1 毫秒 192.168.1.1
2 7 ms 5 ms 5 ms 10.68.0.1

根据路由表可以看到,192.168.0.1这子网明显跃点数要小,意味着其更容易接入互联网,Windows系统会优先考虑使用192.168.0.1的网关,因此才有有线以太网进行上网。

同时,路由追踪也证实了这一点,第一跳是到的192.168.0.1的网关!

因为,Windows的状态栏显示的并不代表其真实的上网连接方式!

解决方案:手动“切断”内网网关,以实现“有线网卡只负责内网,不要尝试用它上网”。

按照以下步骤操作:

  1. 按下 Win + R,输入 ncpa.cpl,回车(本质上就是控制面板的网络连接)。
  2. 找到那个 “以太网”,右键 -> 属性
  3. 双击 “Internet 协议版本 4 (TCP/IPv4)”
  4. 修改设置为 “使用下面的 IP 地址”(不要选自动获得):
    • IP 地址:填写 192.168.1.XX (就用你现在获取到的这个就行,以防跟别的网络设备冲突了)。
    • 子网掩码:填写 255.255.255.0
    • 默认网关:👉 关键!这一栏必须留空!什么都不要填! 👈
    • 首选 DNS:留空。
  5. 点击 “确定” 保存。

image-20251120200017637

原来是自动获得IP,即通过让路由器的DHCP服务来自动分配IP。使用下面 IP 则是手动确定这个IP且不会被路由器更改

访问 192.168.1.x (NAS) -> 命中本地子网 -> 走有线。

访问互联网 / 响应 SSH -> 没有内网网关 -> 走 Wi-Fi。

在“自动模式”下,实验室的路由器(192.168.1.1)不仅会分配给你 IP 地址(192.168.1.15),还会强制附赠给你一个网关(192.168.1.1)。 只要是自动模式,你就无法拒绝这个网关。只要有了这个网关,你的电脑就会傻乎乎地把 SSH 回复包发给它,导致断连。

第二部分:打通 SSH 连接

Step1, OpenSSH Server

1
2
3
4
5
6
#以管理员打开Windows Terminal
(base) PS C:\Users\cosmi> Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
Name : OpenSSH.Client~~~~0.0.1.0 # 默认已安装
State : Installed
Name : OpenSSH.Server~~~~0.0.1.0 # 可以看到服务端并未安装
State : NotPresent
  • 使用命令进行安装(或者是在Windwos设置中搜索可选功能-查看或编辑可选功能-查看可用功能-搜索OpenSSH, 然后把这个server功能下载下来)
1
2
3
4
5
6
7
8
9
#安装 OpenSSH Server
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

#启动服务并设置开机自启
Start-Service sshd
Set-Service -Name sshd -StartupType 'Automatic'

#更改默认 Shell 为 PowerShell (可选,默认为 CMD)
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force

Step 2, 解决防火墙拦截

这时候之间用ssh 连接会直接“Connection timed out”,因为校园网通常被 Windows 视为**“公用网络” (Public Network)**,出于安全,系统默认会拦截外部发起的连接。

1
2
3
4
#强制放行 22 端口
New-NetFirewallRule -Name "Allow_SSH" -DisplayName "Open SSH Port" -Protocol TCP -LocalPort 22 -Action Allow
#对远程地址放行
Set-NetFirewallRule -Name "Allow_SSH" -RemoteAddress Any
  • 作用域:变成了 **Any (任何)**。
  • 效果
    • 你在 图书馆 (10.31) -> 能连
    • 你在 宿舍 (10.32) -> 能连
    • 你在 食堂 (10.100) -> 能连

只要你还在校园网内,还没出学校大门,你的台式机就会对你敞开大门!

Step 4, 关闭“仅允许 Windows Hello 登录”

如果是微软邮箱登录 Windows,SSH 验证会一直提示密码错误。这是因为“仅允许 Windows Hello 登录”策略导致系统没有存储密码 Hash。

微软真的是太Shit了!微软现在推行“无密码未来”,如果你的台式机开启了“仅允许 Windows Hello 登录”,那么系统里根本就没有存储用于网络验证的密码 Hash。

在Murphy-ITXWin上检查:

  1. 打开 设置 -> 账户 -> 登录选项
  2. 找到 “为了提高安全性,仅允许对这台设备上的 Microsoft 账户使用 Windows Hello 登录”
  3. 关掉它! (设为“关”)。
  4. 重启台式机(这一步很重要,重启后系统才会重新生成密码 Hash)。

Step 3, 启动ssh连接!

  • 我的Windows设备其实是使用的Microsoft账户连接的,登录设备的用户名是C:\Users\cosmi这里这个username,我的就是cosmi,而密码呢?这个太坑了,这个密码是微软账户的密码!而不是PIN。
  • 废了这么大的劲,终于连上了!
  • Step 3,4真的非常坑!其实可用新建一个标准的本地管理员账户,专门用来 SSH 和 SMB 文件传输。这样永远不会有权限问题。
    • 不过我不想建立本地用户,Windows本来就够地狱的了,多用户管理估计又得乱套了!
1
2
3
4
5
6
7
# 以管理员身份运行 PowerShell。

# 1. 创建admin用户
net user admin 123456 /add

# 2. 把他拉进管理员组 (这样才有权限读写C盘)
net localgroup administrators admin /add

Step 4, Filezille 使用SFTP - SSH File Transfer Protocol连接ITX的时候,只能看到C盘,看不到D,E … …

在 FileZilla 的右侧(远程站点)面板上方,有一个 **地址栏 (Remote site)**。

  1. 清空里面的内容。
  2. 手动输入:**/D:/** (或者 /E:/)
  3. 回车

你就发现文件列表瞬间跳到 D 盘了。 (注意:前面的斜杠 / 和后面的冒号 : 最好都带上,这是 OpenSSH for Windows 的标准路径格式)

image-20251120204021199

image-20251120204233422

第三部分,SMB共享

在资源管理器访问ITX的文件\\10.31.xx.xx

Thinkbook_Snipaste_2025-11-20_11-41-31

当使用微软邮箱登录时,远程电脑不知道你是要用“本地账户”验证还是“微软云端账户”验证。你需要显式地告诉它。

在笔记本弹出的输入框中,尝试这种格式:

  • 用户名MicrosoftAccount\你的邮箱地址
    • 例如:MicrosoftAccount\zhangsan@outlook.com
    • 注意:前面那个 MicrosoftAccount\ 很关键,或者直接输完整的邮箱地址试试。
  • 密码:你的微软账户登录密码(必须是邮箱密码,绝对不能是 PIN 码!)。

进来之后,发现是空的!直接在笔记本资源管理器的顶部地址栏里,把地址改写一下:

查看 C 盘所有文件: 输入 \\10.31.xx.xx\c$ (注意后面加了 \c$)

查看 D 盘所有文件: 输入 \\10.31.xx.xx\d$

这是以管理员方式进行查看,结果没有权限。。。我服了,真的无语啊,太反人类了!

  • UAC问题

Windows 的右键共享菜单既慢又容易受 UAC 限制(导致 \IP\d$ 无法访问)。我们可以使用 PowerShell (对应 Linux 的 exportfs) 和 Net 命令 (对应 mount) 来高效管理。

1
2
New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" -Name "LocalAccountTokenFilterPolicy" -Value 1 -PropertyType DWORD -Force
#因为使用了Microsoft云端账号,安全权限设置的非常严格,所以即使更杠UAC也无法使用SMB进行访问!
  • SMB网络问题
1
2
Set-NetFirewallRule -DisplayGroup "文件和打印机共享" -Enabled True -Profile Any
#(注意:如果系统是纯英文版,把引号里的字换成 "File and Printer Sharing")
  • !!!!!!!! 终极解决办法!!!!!!!!

服务端:创建共享 (PowerShell),与其破解隐藏共享 (D$) 的权限,不如直接新建一个标准共享。

1
2
New-SmbShare -Name "SMB-D" -Path "D:\" -FullAccess "Everyone"
#这条命令的意思是:把 D 盘整个共享出来,名字叫 SMB-D,允许任何人读写 —— 放心,进入时依然需要输入你的账号密码,只有你能进

这次终于可用通过SMB在TB上对ITX的文件进行访问了!

  • SMB的基本命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#查看所有共享
(base) PS C:\Users\cosmi> Get-SmbShare

Name ScopeName Path Description
---- --------- ---- -----------
ADMIN$ * C:\WINDOWS 远程管理
C$ * C:\ 默认共享
D$ * D:\ 默认共享
E$ * E:\ 默认共享
IPC$ * 远程 IPC
SMB-D * D:\
SMB-E * E:\

#语法:Remove-SmbShare -Name "共享名"
Remove-SmbShare -Name "SMB-D"
Remove-SmbShare -Name "Data" -Force

#新建共享
New-SmbShare -Name "SMB-D" -Path "D:\" -FullAccess "Everyone"

#创建时指定权限
New-SmbShare -Name "Data" -Path "D:\" -FullAccess "lab"

# 对现有的共享修改权限 如果共享已经存在了,你想把 Everyone 踢出去,换成 lab:
# 1. 给 lab 用户完全控制权
Grant-SmbShareAccess -Name "Data" -AccountName "lab" -AccessRight Full -Force
# 2. 把 Everyone 踢出去 (Revoke)
Revoke-SmbShareAccess -Name "Data" -AccountName "Everyone" -Force
  • 客户端的net命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#查看IXT开放的所有共享资源
net view \\10.31.XX.XX
#把开放的文件夹挂载到TB的资源管理器的Z和Y盘
net use Z: \\10.31.XX.XX\SMB-D /persistent:yes
net use Y: \\10.31.XX.XX\SMB-E /persistent:yes

#查看当前已经连接的网络驱动器
net use
#临时挂载网络盘
net use Z: \\10.31.XX.XX\SMB-D
#永久挂载网络盘
net use Z: \\10.31.XX.XX\SMB-D /persistent:yes
#删除挂载 (卸载)
net use Z: /del
#彻底清除所有连接 (重置)
net use * /del /y
  • 服务器的net命令
1
2
3
4
5
6
7
#查看开放了哪些共享
net share
#创建新共享
#语法:net share 共享名=路径 /grant:用户,权限
net share Movie=E:\Downloads /grant:everyone,full
#删除共享
net share Movie /del
  • net user 用户管理

  • net view 网络侦察

第三部分,防火墙规则查看

在 PowerShell 中查看防火墙规则是最准确的,因为它可以直接显示出刚才我们关心的 “作用域 (RemoteAddress)”

请在台式机的 PowerShell (管理员) 中运行以下命令,分别检查 SSH 和 SMB 的状态。

1. 检查 SSH 规则

看看刚才创建的 Allow_SSH 规则是否生效,以及它的作用域是不是 Any

复制并运行:

PowerShell

1
Get-NetFirewallRule -Name "Allow_SSH" | Select-Object DisplayName, Enabled, @{Name='作用域(Scope)'; Expression={($_ | Get-NetFirewallAddressFilter).RemoteAddress}}
  • 理想结果
    • Enabled: True
    • 作用域: Any (或者显示为空,也代表 Any)

2. 检查 SMB (文件共享) 规则

这个命令会列出所有已启用且监听 445 端口 (SMB) 的规则。这比直接查名字更准。

复制并运行:

PowerShell

1
Get-NetFirewallRule | Where-Object {$_.Enabled -eq 'True' -and ($_ | Get-NetFirewallPortFilter).LocalPort -eq 445} | Select-Object DisplayName, Direction, @{Name='作用域(Scope)'; Expression={($_ | Get-NetFirewallAddressFilter).RemoteAddress}}
  • 理想结果
    • 你应该能看到好几条规则(比如“文件和打印机共享 (SMB-In)”)。
    • 关键看最后一列:如果是 **Any**,说明全校都能连;如果是 **LocalSubnet**,说明只能连同子网。

3. (备选) 图形界面查看法

如果你觉得命令行的输出太乱,也可以用图形界面看,更直观:

  1. Win + R,输入 wf.msc,回车。
  2. 点击左侧 **“入站规则” (Inbound Rules)**。
  3. 查看 SSH
    • 在列表中找到你刚才建的规则名(比如 Open SSH PortAllow_SSH)。
    • 双击它 -> 作用域 (Scope) 选项卡 -> 看 远程 IP 地址 是否为 任何 IP 地址
  4. 查看 SMB
    • 在右侧点击 “按组筛选” -> 选择 “文件和打印机共享”
    • 看中间列表中 “已启用” 的规则。
    • “远程地址” 这一列,是不是显示为 “任何”

只要看到是 Any任何,就说明你的设置成功了,跨子网连接没问题!

后记,Windows的逻辑跟Linux差别太大了!

Windows 的逻辑是“保姆模式”:它假设用户什么都不懂,所以设置了层层安检(UAC、防火墙、网络位置、组策略、注册表),想方设法拦着你,生怕你把系统搞坏了。结果就是想干点正事的时候,得先花两小时跟它“打架”。

Linux 的逻辑是“极客模式”:它假设你知道自己在干什么。Everything is a file,只要你只要有 root 权限,改两行 config 配置文件,重启服务,立马生效。简单、暴力、透明。

远程桌面连接 mstsc

在打通了局域网之后,可用使用Microsoft Remote Desktop/RDP)进行远程连接了!

隐私问题

如果你使用的是 Windows 自带的“远程桌面连接” (Microsoft Remote Desktop/RDP),另一台电脑(被控端)的屏幕会显示“锁屏界面”。

如果你使用的是 Windows 自带的“远程桌面连接” (Microsoft Remote Desktop/RDP),另一台电脑(被控端)的屏幕会显示“锁屏界面”。

坐在那台电脑前面的人,完全看不到你在做什么操作。

  1. 屏幕显示什么?
    当你点击“连接”并成功进入桌面后,实验室那台台式机的物理显示器会发生以下变化:
  • 黑屏或锁屏壁纸:屏幕会退回到登录界面。
  • 提示文字:通常会显示“计算机正在由另一用户使用”或者显示你的用户名,提示已锁定。
  • 操作不可见:你在远程端打开网页、写代码、看视频,实验室显示器上全都不会显示。鼠标也不会动。
  1. 声音会怎样?

默认设置下,台式机播放的声音会被“重定向”到你的笔记本上播放。

  • 台式机音箱:静音(或者根本不响)。
  • 笔记本音箱:播放台式机发出的声音(比如看视频的声音)。
  1. 如果实验室有人动那台电脑怎么办?

如果此时你的同学走过去,晃动鼠标或按下键盘:

  • 他会看到锁屏界面。
  • 如果他不知道密码,他进不去,也干扰不了你。
  • 如果他知道密码(或者是管理员)并强行登录:你的远程连接会被立刻踢掉(断开),他夺回控制权,看到原本的桌面。

⚠️ 重要区别:RDP vs 远程控制软件

大家经常混淆 Windows RDPTeamViewer/向日葵/ToDesk,它们的原理完全不同:

特性 Windows 自带 RDP TeamViewer / 向日葵 / AnyDesk
原理 虚拟会话 (Virtual Session) 屏幕镜像 (Screen Mirroring)
被控端屏幕 锁屏/黑屏 (看不到操作) 同步显示 (你在动,屏幕也在动)
隐私性 极高 (像在用这台电脑的影子分身) (旁边的人能像看电影一样看你操作)
性能 极快 (传输的是绘图指令,极清晰) 一般 (传输的是视频流,可能有画质损耗)
用途 办公、开发 (不想被人窥屏) 远程协助 (演示给对方看怎么操作)

多屏幕问题

这是一个非常经典的误解。Windows 自带的远程桌面 (RDP) 和 TeamViewer/向日葵这类软件在处理多屏幕时的逻辑是截然不同的。

简单来说:RDP 是“适应”你的笔记本,而不是“照搬”台式机。

  1. 核心原因:由“你的笔记本”说了算
  • TeamViewer/向日葵(屏幕镜像逻辑):
    它们是“摄像机”。台式机有两个屏幕,它们就传两个视频流过来。你可以在笔记本上点击按钮切换“查看屏幕1”或“查看屏幕2”,或者把两个屏幕挤在一个画面里。

  • Windows RDP(重绘逻辑):
    它是“重新排版”。
    当你用笔记本(只有 1 个屏幕)去连台式机(有 2 个屏幕)时,RDP 会认为:“哦,现在的操作者只有 1 个显示器,那我就把台式机原本分散在 2 个屏幕上的窗口,全部那挪到一个屏幕上来显示。”

    结果就是:

    台式机的双屏模式被暂时强制变成单屏模式。你只能看到一个桌面,原本在副屏上的窗口会被自动挤到这一个主屏里来(或者你需要把它们拖出来)。


  1. 如果你想在远程时也用双屏,该怎么办?

只有一种情况,你可以开启 RDP 的多屏支持,那就是:你的笔记本同时也外接了一个显示器(即客户端也是双屏)

如果你的笔记本接了外接显示器,你可以这样设置,让远程桌面占满你的两个屏幕:

  1. 打开远程桌面连接 (mstsc)。
  2. 点击左下角的 **“显示选项” (Show Options)**。
  3. 切换到 “显示” (Display) 选项卡。
  4. 勾选中间的 **“将我的所有监视器用于远程会话” (Use all my monitors for the remote session)**。
  5. 点击连接。

效果:你的笔记本屏幕显示台式机的屏幕1,你的外接显示器显示台式机的屏幕2。完美还原双屏体验。


  1. 如果你只有一台笔记本(单屏),但想看双屏画面

如果你没法给笔记本外接显示器,但又想体验“双屏”,你有两个选择:
方案 A:忍受 RDP 的单屏合并(默认)

就像现在这样,RDP 会把台式机变成单屏。你虽然失去了物理双屏,但分辨率会适配你的笔记本,字很清晰,操作很流畅。你需要习惯用 Alt + Tab 切换窗口。

方案 B:改用第三方软件(如果你非要“切换屏幕”)

如果你必须明确区分“屏幕1”和“屏幕2”(比如屏幕1看代码,屏幕2看监控),RDP 做不到在单屏里切换双屏视图。

你需要换回 ToDesk / 向日葵 / TeamViewer

  • 这些软件会在顶部工具栏提供一个“切换显示器”的按钮。
  • 你可以点击按钮,在笔记本上轮流查看台式机的左屏和右屏。

后记 - 遇到了一种奇怪的问题

笔记本带到教研室之后,笔记本和ITX的ping/tracert都不通!ssh可以通!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
(base) PS C:\Users\cosmi> ping 10.31.xx.xx
正在 Ping 10.31.xx.xx 具有 32 字节的数据:
来自 10.31.xx.xx 的回复: 无法访问目标主机。
请求超时。
来自 10.31.xx.xx 的回复: 无法访问目标主机。
请求超时。
10.31.xx.xx 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 2,丢失 = 2 (50% 丢失)


(base) PS C:\Users\cosmi> tracert 10.31.xx.xx
通过最多 30 个跃点跟踪到 10.31.xx.xx 的路由
1 Murphy-TB16p [10.31.xx.xx] 报告: 无法访问目标主机。
跟踪完成。

搜了一下,可能是“同 AP 隔离” (AP Isolation)

请想象一下这个场景:

  • 场景 A:你在图书馆,台式机在实验室
    • 你连的是 **AP-1 (图书馆)**,台式机连的是 **AP-2 (实验室)**。
    • 你的数据流向:笔记本 -> AP-1 -> 核心交换机 -> AP-2 -> 台式机。
    • 结果:核心交换机通常只管转发,不怎么管闲事,所以你们通了
  • 场景 B:你回到了实验室
    • 你连上了 **AP-2 (实验室)**,台式机也连着 AP-2
    • 你们俩现在像两个连体婴儿一样,挂在同一个无线路由器(AP)下面。
    • 结果:企业级 AP 为了防止用户互黑(或者广播风暴),默认有一条铁律——“禁止连接在我身上的客户端直接互访”
    • 所以,你的数据包刚发到 AP,就被 AP 一脚踢回来了,根本没发给台式机。

结论:离得越近(连同一个 AP),反而越被隔离。

这确实非常反直觉,也不怪你疑惑。在我们的常识里:“咱俩都连同一个 Wi-Fi,就在一个房间,应该更亲密才对啊,怎么反而成路人了?”

但这就是企业级/校园级网络家用网络最大的区别。

1. 为什么一开始(异地)通?——“走公家大路”

当你人在图书馆,台式机在实验室时,你们连的是不同的 AP(无线基站)。

  • 路径:你的笔记本 -> 图书馆 AP -> 学校核心交换机 -> 实验室 AP -> 台式机。
  • 原理:虽然你们都在 10.31.x.x,但在物理上你们隔得很远。数据包必须上行到学校的“核心层”。核心交换机(那个 172.20.x.x)只管转发,它看到你要找台式机,就帮你把包转过去了。
  • 结论虽然隔得远,但因为走了上层路由,所以通了。

2. 为什么现在(同屋)不通?——“禁止窃窃私语”

现在你回到了实验室,两台设备连上了同一个 AP。

  • 路径:你的笔记本 -> 实验室 AP -> 台式机。
  • 阻碍:**AP 隔离 (Client Isolation)**。这是学校为了安全强制开启的功能。
    • 规则:连接在同一个 AP 下的无线设备,禁止直接二层通信
    • 比喻:就像在考场里。你(笔记本)和台式机坐同桌。虽然你们离得最近,但监考老师(AP)规定:严禁交头接耳。你想传纸条给同桌?老师(AP)直接把纸条没收了。
  • 为什么要有这个反人类的规定?
    • 防病毒:如果一台学生电脑中了勒索病毒,它会试图扫描同一个 Wi-Fi 下的所有邻居。开了隔离,它谁也染不上。
    • 防黑客:防止你在星巴克/图书馆这种公用 Wi-Fi 下,通过 ARP 欺骗窃取旁边人的账号密码。

这是一个极好的问题!这说明你正在用“家用路由器”的思维去理解“企业级网络”,而这两者有着本质的区别。

简单直接的答案是:因为这些 AP 根本不是路由器,它们只是“无线网线”而已。

1. 家用路由器 vs. 校园网 AP

  • **家用路由器 (All-in-One)**:
    • 你在家买的 TP-Link,它是个“多面手”。它既是天线(发 Wi-Fi),又是路由器(发 IP、做网关),还是交换机
    • 所以,每个家用路由器都有自己的网关 IP(比如 192.168.1.1)。
  • **校园网 AP (Access Point)**:
    • 学校天花板上挂的那些白色方盒子,它们是**“瘦 AP” (Thin AP)**。
    • 它们的功能被极度“阉割”了:它们只负责把无线信号变成有线信号,不负责分配 IP,也不负责做网关。
    • 它们本质上就是一根“无线的延长线”

2. 架构揭秘:AC + AP 模式

学校的网络架构是 “控制器 (AC) + 接入点 (AP)” 模式。

想象一下一栋大楼的供水系统

  • 核心交换机 (网关 10.31.0.1):这是大楼的“总水闸”
  • 网线:这是铺设在墙里的“水管”
  • 图书馆 AP:这是 1 楼的“水龙头”
  • 实验室 AP:这是 2 楼的“水龙头”

请问: 你在 1 楼打开水龙头,和在 2 楼打开水龙头,流出来的水是不是都来自同一个“总水闸”是的!

  • 当你连上图书馆 AP,你其实是接到了核心交换机上。
  • 当你连上实验室 AP,你还是接到了同一台核心交换机上。
  • 这台核心交换机负责管理 10.31.x.x 这个大网段,所以无论你在哪接进来,它都告诉你:“我是你的网关 (10.31.0.1)”。

3. 为什么要这样设计?(为了漫游)

如果每个 AP 都是一个独立的路由器(像家里那样),会有什么灾难性的后果?

  • 你在图书馆,IP 是 192.168.1.5,正在下载电影。
  • 你抱着电脑走到走廊(切换到了走廊 AP),如果走廊 AP 是个新路由器,它会给你发个新 IP 192.168.2.6
  • 后果你的 IP 变了,网络连接瞬间中断,下载失败,游戏掉线,视频卡住。

现在的设计(大二层网络):

  • 因为所有 AP 都共用同一个网关 (10.31.0.1),都属于同一个大局域网。
  • 当你从图书馆走到实验室,你只是换了一个“水龙头”,但你的 IP 地址 (10.31.208.138) 不需要变,网关也不用变。
  • 结果:你可以一边打视频电话一边全校溜达,信号无缝切换,完全感觉不到断网。这就是**无缝漫游 (Roaming)**。

驯服 Windows 网络:双网卡并发、SSH 穿透与 SMB 挂载
https://blog.cosmicdusty.cc/post/Tools/Taming-Windows-Networks/
作者
Murphy
发布于
2025年11月20日
许可协议