在 Selfnet 上为宿舍电脑配置 SSH / RDP 端口转发:从公网访问 Windows 主机的完整过程
Table of Contents
- 一、背景与网络环境
- 1.1 Selfnet 的地址结构
- 1.2 设备与目标
- 二、理解 Selfnet 门户中的“端口转发”
- 2.1 入口在哪里
- 2.2 单个端口 vs 端口范围
- 三、先给 Windows 主机一个固定 IPv4
- 3.1 为什么要“固定 IP”
- 3.2 根据 ipconfig 理解当前状态
- 3.3 在 Windows 中配置静态 IPv4(以 100.78.32.168 为例)
- 四、在 Selfnet 门户添加 SSH / RDP 端口转发
- 4.1 访问端口转发页面
- 4.2 SSH 端口转发示例
- 4.3 RDP 端口转发示例
- 五、在 Windows 上启用 SSH / RDP 服务与防火墙
- 5.1 启用 OpenSSH Server
- 5.2 启用 RDP 并配置防火墙
- 六、从外网进行访问与测试
- 6.1 测试前的基本检查
- 6.2 使用移动网络测试端口连通性
- 七、IPv6:不需要端口转发的另一条路
- 八、双重 NAT 场景的额外说明
- 九、常见错误与排查思路
- 9.1 只配了端口转发,但本机服务没启动
- 9.2 忘记打开 Windows 防火墙规则
- 9.3 没有固定 IPv4 地址导致转发失效
- 9.4 从宿舍网内部测试得出错误结论
- 9.5 Microsoft 账户用户名书写混乱
- 十、总结与反思:从“找端口转发入口”到“看完整链路”
在 Selfnet 上为宿舍电脑配置 SSH / RDP 端口转发
这篇文章延续上一篇关于“在 Selfnet 下把红米 AX6 改成桥接 AP”的实践,重点记录另一件事:如何在 Selfnet 宿舍网里,为一台 Windows 电脑配置端口转发,让自己能从外网通过 SSH 和 RDP 访问宿舍机器。
过程中有几类典型问题:
- 找不到 Selfnet 门户里的“端口转发入口”
- 不理解“外部端口 / 内部端口”的含义,填错了映射关系
- Windows 端口没开放导致看起来“端口转发不生效”
- IPv4 双重 NAT、IPv6 不需要端口转发这类概念混在一起
这篇文章把这些问题拆开梳理,重点是把整个链路讲清楚:从公网客户端到宿舍电脑之间,每一段发生了什么。
一、背景与网络环境
1.1 Selfnet 的地址结构
在 Selfnet 门户里,通常能看到大致这样的信息(文本整理版):
External IP: 141.72.248.133→ 对互联网可见的公网 IPv4IPv4 Address: 100.78.32.168/28→ 分配到你宿舍这台设备的”内侧 IPv4”IPv6 Prefix: 2001:7c7:2158:6c80::/64→ 一个 /64 的 IPv6 前缀(原生公网)
这表示 Selfnet 的模型大致是:
- IPv4: 自己在内部用
100.64.0.0/10(这里是 100.78.32.0/28)这类地址,对外通过一个公网 IPv4(141.72.248.133)做 NAT,并提供端口转发功能。 - IPv6: 直接为你分配了一个公网 /64 前缀,不需要端口转发,每台设备都可以拥有公网 IPv6 地址。
1.2 设备与目标
设备清单(与系列其他文章保持一致):
- 上游网络:Selfnet 宿舍网
- 主路由器:红米 AX6(刷了 AE86Wrt 固件),已设为 Dumb AP / 桥接模式(不再做 NAT / DHCP)
- Windows 电脑:长期位于德国学生宿舍,接在路由器后面(实际上相当于直接接在 Selfnet 上)
- MacBook Air:便携开发设备,用于从外部访问
- Linux 工作站:位于中国大陆(本文不涉及)
想实现的能力:
- 从公网通过 IPv4:
ssh到宿舍的 Windows 电脑 - 从公网通过 IPv4:使用 RDP(远程桌面)连上 Windows 电脑
- 在条件允许时,了解 IPv6 访问的替代方案
注意:如果路由器仍在做 NAT(电脑拿到的是 192.168.x.x),那是”Selfnet NAT + 路由器 NAT”的双重 NAT 场景,端口转发要多做一层,后面会单独说明。
二、理解 Selfnet 门户中的“端口转发”
2.1 入口在哪里
在 Selfnet 的 Web 门户中,一般会有一行 “IPv4” 配置,右侧有类似:
0 Portforwardings- 或
2 Portforwardings
之类的蓝色链接。端口转发的入口就在这里,而不是“Change IP”。
点击 X Portforwardings 之后,会进入一个表单页面,字段大致包括:
- IP(通常是
100.78.32.168/32这类) - Protocol(TCP / UDP)
- First external port
- Last external port
- First internal port
- Last internal port
2.2 单个端口 vs 端口范围
Selfnet 的 UI 用的是“端口范围”形式:
First external portLast external port
但这并不意味着必须 “一批端口一起转”——想转单个端口时,把 First / Last 都填同一个数即可。内部端口同理。
例如,只转发外部 22222 → 内部 22:
- Protocol: TCP
- First external port: 22222
- Last external port: 22222
- First internal port: 22
- Last internal port: 22
三、先给 Windows 主机一个固定 IPv4
3.1 为什么要“固定 IP”
Selfnet 的端口转发规则是指向某个具体的内网 IPv4,例如 100.78.32.168/32。如果你的电脑通过 DHCP 获得地址(例如 .170 或 .169),那么一旦重连或换网卡,IP 变了,端口转发规则就失效。
因此比较稳妥的做法是:
- 选择一个你自己的地址(这里希望用
100.78.32.168) - 在 Windows 里把这张网卡的 IPv4 设为静态
- 在 Selfnet 门户中针对
100.78.32.168/32配端口转发
3.2 根据 ipconfig 理解当前状态
示例 ipconfig 输出(裁剪过):
以太网适配器 以太网:
IPv4 地址 . . . . . . . . . . . . : 100.78.32.170
子网掩码 . . . . . . . . . . . . : 255.255.255.240
默认网关. . . . . . . . . . . . . : 100.78.32.174
...
无线局域网适配器 WLAN:
IPv4 地址 . . . . . . . . . . . . : 100.78.32.169
子网掩码 . . . . . . . . . . . . : 255.255.255.240
默认网关. . . . . . . . . . . . . : 100.78.32.174
可见当前 DHCP 分给有线 .170、无线 .169,网段是 /28(掩码 255.255.255.240),网关是 .174。
3.3 在 Windows 中配置静态 IPv4(以 100.78.32.168 为例)
建议先只启用一张网卡(比如只用以太网),把不用的网卡禁用掉,避免多个 MAC 抢同一个 IP。
步骤:
-
控制面板 → “网络和 Internet” → “网络和共享中心”
-
左侧“更改适配器设置”
-
右键要用的网卡(例如“以太网”)→ 属性
-
选中“Internet 协议版本 4 (TCP/IPv4)” → 属性
-
选择“使用下面的 IP 地址”,填入:
- IP address:
100.78.32.168 - Subnet mask:
255.255.255.240 - Default gateway:
100.78.32.174 - Preferred DNS:可以先用
8.8.8.8,如上网异常再改回自动或换其它 DNS
- IP address:
设置完成后,可以重新打开命令行执行 ipconfig,确认这张网卡已经是 100.78.32.168。
四、在 Selfnet 门户添加 SSH / RDP 端口转发
目标:从外网访问时,用公网 IP 141.72.248.133 和自定义端口,转发到宿舍电脑的 100.78.32.168 上。
4.1 访问端口转发页面
- 登录 Selfnet 门户
- 找到 IPv4 一行,点击右侧的
X Portforwardings - 在“IP”下拉列表中,选择
100.78.32.168/32
之后就可以为这台主机添加多条端口转发规则。
4.2 SSH 端口转发示例
出于安全考虑,不建议直接把外部 22 暴露出去,可以换一个高位端口(比如 22222)。
配置示例:
- Protocol:
TCP - First external port:
22222 - Last external port:
22222 - First internal port:
22 - Last internal port:
22 - Save
含义:从外部访问 141.72.248.133:22222 时,Selfnet 会把流量转发到 100.78.32.168:22。
4.3 RDP 端口转发示例
RDP 默认使用 3389/TCP,新版 Windows 还会使用 3389/UDP 做优化。这里仍然用一个非常用外部端口(比如 53389)。
规则 1(RDP TCP)
- Protocol:
TCP - First external port:
53389 - Last external port:
53389 - First internal port:
3389 - Last internal port:
3389
规则 2(RDP UDP,可选,看 Selfnet 是否支持)
- Protocol:
UDP - First external port:
53389 - Last external port:
53389 - First internal port:
3389 - Last internal port:
3389
之后,在外网使用远程桌面时,目标就写成:
141.72.248.133:53389
五、在 Windows 上启用 SSH / RDP 服务与防火墙
端口转发只是把流量送到宿舍电脑;要真正连得上,本机必须有对应的服务在监听端口,并且 Windows 防火墙允许入站。
5.1 启用 OpenSSH Server
Windows 10/11 自带 OpenSSH Server,但有时默认没安装,需要先确认。
5.1.1 检查是否已安装
以管理员身份打开 PowerShell:
Get-WindowsCapability -Online -Name OpenSSH.Server*
- 如果输出中有
State : Installed,说明已经装好了,可以跳到下一步。 - 如果是
State : NotPresent,需要安装:
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
5.1.2 启动服务并设为自启动
Start-Service sshd
Set-Service sshd -StartupType Automatic
确认端口是否在监听:
netstat -an | findstr ":22"
看到 0.0.0.0:22 或 [::]:22 的 LISTEN 状态即为正常。
5.1.3 打开防火墙 22/TCP
在 PowerShell 中:
New-NetFirewallRule -Name "OpenSSH-Server-In-TCP" `
-DisplayName "OpenSSH Server (TCP-In)" `
-Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
或者在“Windows Defender 防火墙 → 高级设置 → 入站规则”中启用现有的 OpenSSH Server (sshd) 规则。
5.2 启用 RDP 并配置防火墙
5.2.1 打开远程桌面
- 设置 → 系统 → 远程桌面
- 打开“允许远程桌面”
- 建议勾选“要求设备使用网络级别身份验证 (NLA)”
5.2.2 打开防火墙规则
在“Windows Defender 防火墙 → 高级设置 → 入站规则”中,确保以下规则为启用状态:
- Remote Desktop (TCP-In)
- Remote Desktop (UDP-In)(如果你也配置了 UDP 转发)
六、从外网进行访问与测试
6.1 测试前的基本检查
在宿舍电脑本机上,先从“内部”确认服务是否正常:
- SSH:
ssh localhost或在同网段另一台机器上ssh 100.78.32.168 - RDP:本机或局域网内试一下
mstsc到100.78.32.168
如果这一步都不通,问题还在 Windows 本机(服务未启动 / 防火墙未放行),和 Selfnet 无关。
6.2 使用移动网络测试端口连通性
为了避免校园网内 ACL 之类的干扰,建议用手机 4G/5G 做测试。
SSH:
ssh -p 22222 your_user@141.72.248.133
如果是 Microsoft 账户登录的 Windows 用户,用户名通常是:
MicrosoftAccount\your_email@example.com
在 SSH 里可以这样写(Windows 自己连):
ssh -p 22222 -l "MicrosoftAccount\your_email@example.com" 141.72.248.133
在 Linux / macOS 上,反斜杠需要转义或用单引号,示例:
ssh -p 22222 -l 'MicrosoftAccount\\your_email@example.com' 141.72.248.133
RDP:
- 打开
mstsc - 计算机一栏填:
141.72.248.133:53389 - 用户名可以填写
MicrosoftAccount\your_email@example.com或本地账户名
如果 SSH / RDP 在移动网络下可以连上,说明 Selfnet 端口转发、生效的公网 IPv4 这一层没有问题。
七、IPv6:不需要端口转发的另一条路
Selfnet 同时给了一个 IPv6 /64 前缀,例如:
IPv6 地址. . . . . . . . . . . . . : 2001:7c7:2158:6c80:c9f:bfae:2e02:affd
本地链接 IPv6 地址. . . . . . . . : fe80::9e56:5af2:4f77:e2b9%13
默认网关. . . . . . . . . . . . . : fe80::200:ff:fe00:1d%13
对于 IPv6 情况:
-
每个终端本身就拥有一个全球可达的 IPv6 地址(
2001:开头) -
不需要像 IPv4 那样做端口转发
-
要做的反而是:
- 确保系统防火墙允许 IPv6 入站访问目标端口
- 确保上游(Selfnet)没有屏蔽相关 IPv6 端口(通常不会全关)
如果你对 IPv6 比较熟悉,完全可以绕开 IPv4 端口转发,直接用 IPv6 地址做 SSH / RDP。但这会引入额外的问题,比如:
- 客户端是否有 IPv6 连接(运营商 / 公共 Wi-Fi 是否支持)
- DNS 解析与 AAAA 记录的管理
这部分就不在本文展开。
八、双重 NAT 场景的额外说明
虽然现在我的 AX6 已经改成 Dumb AP,不再做 NAT,但很多人仍然是“路由模式”使用路由器,电脑拿到的是 192.168.x.x,这就会产生:
- Selfnet:公网 IPv4 →
100.78.32.168 - 自己路由器:
100.78.32.168(WAN) →192.168.1.100(LAN 内 Windows)
如果保持这种结构,要从公网访问宿舍电脑,需要两层转发:
- Selfnet 门户:
141.72.248.133:外部端口→100.78.32.168:路由器端口 - 自己路由器:
100.78.32.168:路由器端口→192.168.1.100:内部端口
或者把 Windows 电脑设为路由器的 DMZ 主机(风险较高,不推荐在不了解安全影响的情况下使用)。
这也是我后来决定把 AX6 改成 Dumb AP 的原因之一:简化 NAT 层数,让端口转发只在 Selfnet 门户这一层解决。
九、常见错误与排查思路
9.1 只配了端口转发,但本机服务没启动
现象:
- Selfnet 门户规则配置看起来都没问题
- 移动网络上
nc或telnet连接端口超时 - 连在宿舍网内测本机端口也连不上
排查:
- 在宿舍电脑上
netstat -an | findstr 22/findstr 3389看看是否有 LISTEN - 确认 SSH / RDP 服务是否在运行
- 检查 Windows 服务管理器中
sshd/TermService状态
9.2 忘记打开 Windows 防火墙规则
现象:
- 本机本地连接
localhost:22正常 - 同网段其他设备无法连接
100.78.32.168:22/3389 - 外网端口探测显示“被拒绝”或“超时”
排查:
- 检查入站防火墙规则是否允许 22/TCP、3389/TCP(及 3389/UDP)
- 如果有第三方安全软件(安全管家、防火墙套件等),需要在其中单独放行
9.3 没有固定 IPv4 地址导致转发失效
现象:
- 一开始端口转发正常,后来突然从外网连不上
ipconfig发现电脑 IP 已经变成了.169/.170/ 其它
解决:
- 按前文所述,为目标网卡配置静态 IPv4(例如 100.78.32.168)
- 在 Selfnet 门户中确认端口转发规则指向的是
100.78.32.168/32
9.4 从宿舍网内部测试得出错误结论
现象:
- 在宿舍网内访问
141.72.248.133:22222不通,就认为“端口转发失败” - 但用手机 4G/5G 却能访问
原因:
- 某些运营商 / 校园网在内部对“外部 IP 回流”有特殊处理,内部访问外部 IP 未必能走回 NAT
- 这会导致在内部测试时得到与实际对外暴露不同的结果
建议:
- 端口转发最终要服务的是“外部访问”,应该以移动网络或其它外部环境测试为准
- 内部可以直接访问
100.78.32.168做服务测试,不必绕公网 IP
9.5 Microsoft 账户用户名书写混乱
现象:
- RDP 提示“凭据错误”
- SSH 提示“Permission denied”
原因:
- Windows 使用 Microsoft 账户登录时,实际用户名是
MicrosoftAccount\your_email@example.com - 在不同客户端、不同 shell 中,反斜杠和
@容易产生歧义
建议:
- 在 SSH 中优先使用
-l参数指定用户名,并用引号 / 转义处理反斜杠 - 在 RDP 中直接填
MicrosoftAccount\邮箱地址作为用户名,密码就是你 Microsoft 账户的密码(不是 PIN)
十、总结与反思:从“找端口转发入口”到“看完整链路”
从这次折腾 Selfnet 端口转发的过程里,我主要有几条流程层面的收获:
-
先画清楚链路,再找设置入口
一开始我只是“找不到端口转发入口”,但并没有把完整路径画出来: 外网客户端 → 公网 IPv4 → Selfnet NAT/端口转发 → 宿舍 IPv4 → Windows 服务。 把图画清楚后,自然知道问题在哪一层:到底是门户没配置好,还是本机服务没开,还是 NAT 层数太多。
-
IPv4 和 IPv6 需要分别思考,不要混在一起
Selfnet 同时给了 IPv4 和 IPv6,门户又在 IPv4 一栏里提供了端口转发功能,很容易本能地“只在 IPv4 上折腾”。实际上,如果客户端也具备 IPv6 能力,绕过 IPv4 端口转发直接使用 IPv6 反而更简单——只是部署和测试路线不同。以后遇到类似环境,会刻意先问一句:“这个需求是必须 IPv4 吗?还是 IPv6 也可以?”
-
习惯从“本机能否正常服务”开始排查
这次排查里,有几次是门户配置都没问题,但本机服务没启动、防火墙没放行。以后会刻意把检查顺序固定下来: (1)本机 loopback → (2)同网段直连 → (3)NAT 内部地址 → (4)公网 IP。 这样能避免一上来就怀疑“运营商有问题”。
-
在自己路由器上加 NAT 之前,先确认上游已经提供了什么
如果上游已经提供了公网 IPv4 + 端口转发 + 原生 IPv6,再叠加一层本地路由器 NAT,除了增加复杂度,收益并不大。上一篇我最终选择把 AX6 改成 Dumb AP,其实就是这个思路:让 Selfnet 做它擅长的事,本地设备只尽量简单。
-
把易变信息(IP、端口、用户名)集中记录下来
在多次尝试中,我频繁修改端口和 IP,过一阵自己就记不清哪一次是生效配置。后来我开始在笔记里整理“当前生效版本”:
- 宿舍主机 IPv4
- 自定义 SSH / RDP 外部端口
- 实际使用的用户名(尤其是 Microsoft 账户) 这类信息集中记录后,调试就不再依赖记忆。
整体来看,Selfnet 给用户提供的能力其实比较充足:公网 IPv4、端口转发、原生 IPv6 都具备。关键在于我们自己要把链路想清楚,避免在局部反复折腾,却忽略了大方向可以更简单。