引言最近经常外出，偶尔需要使用电脑，虽然iPad和Miix 520已经基本能应付得来，但是总有一些比较吃性能的操作需要做，这时就真的很需要家里的台式了。研究了一番，发现微软的远程桌面还是蛮好用的，搭配DDNS使用很舒服。这里先说一下我用的网络环境：联通宽带，光猫设置为桥接，主路由采用双路由方式，iKuai进行拨号，DHCP，端口映射等网络配置，OpenWRT运行一些众所周知的服务。后面通过交换机和各个无线路由节点还有设备相连，路由节点使用桥接模式通过iKuai的DHCP进行分配。整体网络拓扑如下：我的网络拓扑远程桌面既然是远程桌面，那就需要先把服务机的远程桌面功能打开，Windows 10的家庭版是没有的，Windows 11有没有加进来我也不知道，所以建议大家装电脑的时候还是以专业版和工作站版为主。因为我只有Windows 11的设备，所以这里就只用Windows 11做演示。启动远程桌面首先在设置->系统->远程桌面里启用远程桌面，至于勾不勾选要求使用网络级别身份连接看自身情况，如果只有本地账户或者只希望用本地账户不勾选，如果用微软账户登录就得勾选上。用微软账户的话这个地方有个坑，我们最后再说。在设置中找到远程桌面启动远程桌面检查网络配置然后检查一下网络环境，查看一下当前是否为专用类型，如果不是，需要改成专用，或者打开防火墙，添加一条规则，将远程桌面的端口3389添加到入站出站规则中，需要把TCP和UDP协议都添加进去。检查网络配置使用远程桌面客户端现在，我们就可以使用其他设备在局域网内进行远程使用了。在微软商店、App Store或Google Play下载对应软件，在里面填写服务机的IP地址，登录即可。微软商店的RDS客户端Google Play的RDS客户端App Store的RDS客户端DDNS完成上面的步骤后，我们就可以在局域网内访问了，接下来我们来通过外部网络访问。 VPN通过外部网络访问的方式有很多，比如使用VPN隧道，使用内网穿透，或者我们今天的主角DDNS。其实微软官方推荐使用VPN，因为这样的安全性更高，如果大家希望使用这种方式的话可以直接在OpenWRT中启动相应的服务端，然后在手机或者电脑设置里直接设置。OpenWRT的VPN设置内网穿透除了这种方法，如果家中网络并没有外网IP，大家还可以使用内网穿透，我这里只推荐用Frp和ZeroTier，因为这两个都是开源且免费的，其他的收费的我一概不推荐。不过这种也有自己的缺点，大家自行研究吧。OpenWRT的内网穿透 DDNS最后当然是我们的主角，DDNS。如果希望使用DDNS的话，我们需要保证可以直接访问到公网的IP。最简单的办法我们可以检查一下我们的主路由器是采用的什么方式进行的联网。光猫桥接一般宽带师傅来安装宽带的时候会给你一个光猫，如果你不特别声明的话他就直接用光猫进行PPPoE拨号然后用你的路由器使用DHCP方式进行联网，这样子是获取不到公网IP的，我们需要将光猫改成桥接。我用的是联通的网，联通的光猫有两个管理后台，一个是给用户用的，地址就写在猫的底下，进去了基本上什么也改不了，另一个是给宽带师傅用的，这个基本上所有功能都齐全，但是两个的密码不一样，一般宽带师傅用的这个密码是不会给用户的，有些地区这个密码是固定的，但是我们这是师傅装宽带的时候设置的，用户拿不到。我们这边跟宽带师傅说有NAS之类的设备，师傅会向上级打报告，通过了就会给你改桥接。但是我嫌麻烦，就研究了一下把光猫管理端的密码破解了，这个还是比较简单的，可以使用telnet直接把保存密码的xml文件拿到，具体方式之后单独来讲。当我们改成桥接之后，在主路由上进行了PPPoE拨号，接下来可以百度搜索ip看一下显示的ip是否和PPPoE获取的IP一致，如果一致的话就说明这个已经是外网IP了。但是这个IP有租期，下一次PPPoE重新拨号的时候会发生改变，所以我们就需要对这个IP进行动态解析，也就是DDNS。通过DDNS服务商进行解析DDNS有两种方式，第一种是通过DDNS服务商，另一种是自己买域名然后做动态解析。DDNS服务商有很多，但是对于收费的我不做任何推荐。这里我唯一推荐使用群晖自带的DDNS，十分方便，也很稳定。我们只需要在群晖中控制面板->连接性->外部访问中新增一个DDNS，服务供应商选择Synology，填写一下三级域名的前缀，比如xxx.synology.me，群晖就会自动的把xxx.synology.me解析到你的IP上。至于黑群晖支持不支持我就不知道了。群晖添加DDNS添加后的群晖DDNS通过自己的域名进行DDNS那么接下来讲一下自己买域名的方式，因为我用的是阿里云，所以这里就用ikuai+aliyun的方式演示（OpenWRT也可以代替iKuai），其他服务商基本大差不差。首先，我们需要在阿里云的域名解析中添加一个解析，比如我们的二级域名是xxx.com，可以添加一个xxx.xxx.com的ipv4解析到任意ip，比如1.1.1.1。然后进入iKuai的管理后台，找到高级应用->动态域名服务。我们点击添加，服务商选择aliyun.com，域名填写上面我们新增的解析，这里就是xxx.xxx.com，主域名写我们的二级域名xxx.com。Access Key ID和Secret是我们阿里云的API密钥，可以参考这里进行添加。解析设置为外网线路，解析网卡选择我们的wan网卡，记录类型这里最好用IPv4的A记录，因为目前很多网络环境还不支持IPv6，但是如果没有IPv4的公网ip的话就只能选择AAAA记录，全部填好之后点击保存即可，然后我们可以看一下日志是否解析成功。iKuai添加DDNS配置添加成功的iKuai DDNSiKuai的DDNS日志那么除了iKuai之外，如果大家不是采用的iKuai+OpenWRT双路由而只是采用OpenWRT的话，同样也可以在OpenWRT中进行DDNS，如下图所示，具体流程与iKuai一致。OpenWRT添加DDNSOpenWRT的DDNS配置界面完成了这些操作之后，我们就可以通过上面我们设置好的域名在外网访问我们的局域网了，不过有一点需要注意，将自己的网络环境暴露在公共场合是非常危险的，大家一定要注意保护网络安全，尽量做一下WAF，千万不要向别人透露自己的IP和域名解析。端口映射现在，我们的局域网环境已经暴露在公网环境下了，但是此时还并不能直接通过上面的域名访问局域网内具体的机器，我们还需要再进行一次端口映射转换。当然，大家还可以采用UPnP的方式和DMZ主机，这里就不多拓展了。这里另外提一句，在国内为了众所周知的原因，家宽80端口和443端口是不能访问的，所以大家不要想把自己的网站部署在自己家了，还是老老实实租云服务器吧。我们需要在我们的网关服务器上进行设置，比如使用iKuai进行的拨号就在iKuai上设置，如果是OpenWRT拨号则需要在其上设置，如果大家不嫌弃送的光猫性能不行的话甚至光猫上也可以做映射。这里以iKuai举例，其他系统基本同理，如果不理解可以自行搜索资料，这里不再赘述。我们在iKuai后台找到网络设置->端口映射->端口映射，在这里点击一下添加。下图中我们的内网地址填写我们需要映射的主机的内网ip，比如我们要使用远程桌面的台式机。这块大家最好在路由的DHCP设置里将要映射的设备设置成固定ip，或者直接在该设备上的ipv4网络中选择静态ip联网而不是DHCP。我们拿到了这个ip之后，填到内网地址中，内网端口则是设备上应用运行的端口，比如Windows远程桌面的3389。协议这里按需求进行选择，比如Windows远程桌面，最好选择tcp+udp。映射类型选择外网接口，外网地址选择我们的wan口，外网端口则是从外部网络访问上面机器的端口，除了被运营商ban掉的都可以用，如果只需要映射一台Windows电脑的话直接使用3389端口也可以。允许访问的ip这里我们可以填写公司的ip地址，这样能提高安全性，不过如果想随时随地访问的话就不要设置限制了，全都设置完后点击保存，我们就可以看到已经添加的映射了。iKuai的端口映射配置这里我将iKuai，OpenWRT，群晖，jellyfin和我自己的台式机映射出去了。我自己添加好的iKuai端口映射接下来，我们就可以直接通过我们上面的域名，比如xxx.xxx.com，加上我们的端口连接远程桌面了，这里最好不要用系统自带的那个，有点问题，最好是从商店下载的RDP客户端。然后如果大家使用的是iKuai+OpenWRT的话，这里有一个大坑，会一直报0x904错误，最后会讲一下怎么解决。WoL远程唤醒配置主板及Windows现在，我们可以在外面访问我们的Windows电脑了，但是如果一直开着也挺费电的，所以我们可以使用WoL，即Wake-on-LAN，网络唤醒。首先，我们需要在主板设置里把通过PCI设备唤醒功能打开，具体怎么操作大家可以搜索“如何开启xxx主板的网络唤醒功能”。然后在Windows上设置找到控制面板->网络和Internet->网络连接，在当前使用的网卡上面右键选择属性，点击上方的配置按钮，然后在电源管理中如下图所示进行勾选。找到以太网适配器的属性点击配置勾选允许唤醒和只允许幻数据包通过OpenWRT或iKuai进行网络唤醒然后最简单的办法就是直接在OpenWRT中找到管控->网络唤醒。添加一个条目我们选择一下客户端MAC，这里选择我们要被唤醒的机器的MAC物理地址，网络接口选择提供网关的网络接口，点击保存即可。当我们需要进行远程唤醒的时候，我们可以访问OpenWRT后台，然后点击这里的这个唤醒就完成了启动。当然，以上步骤也可以通过iKuai进行。OpenWRT添加网络唤醒通过端口映射及App进行网络唤醒当然，这么做还是有点麻烦有点绕，大家还可以通过端口映射的方式在将WoL暴露在公网直接访问。这里我们添加一个映射，ip是需要唤醒机器的ip，内网端口设置为9，外网是什么随便设置一个。添加iKuai WoL端口映射然后我们在手机上下载一个可以进行WoL的软件，可以选择Fing，这个网络调试软件颜值和功能还是很在线的，但是很多功能收费。所以这里推荐一个别的，我现在用的这个，Wake On Lan，直接在Google Play下载就可以了，iOS应该也有差不多的软件不过我没有需求就没去找。打开软件之后在右下角点击加号进行添加，这里会有一个扫描到的设备的列表，因为我们要在外网进行WoL所以我们在右上角进行手工输入。其他的都不重要，我们只需要填写目标设备的MAC地址，主机名我们填写我们DDNS的域名，端口填写我们上面做的转发的外网端口，千万不要填成了内网端口。至于在线监测可以使用Windows远程桌面的3389端口，但是不知道是不是因为做的端口映射这个我检测出来的一直是在线。在手机App上设置对应WoL设备接着我们就可以在软件主页上找到我们添加的WoL设备，我们点一下就会进行设备唤醒，也可以点右上角的唤醒按钮。至此就大功告成了。通过手机App进行WoL坑最后再提上面说的两个坑。在线账户登录问题第一个是在线账户的问题，因为我们现在大多数人都采用的是微软账户进行的设备登录，而且设置了Windows Hello的Pin或者指纹或者人脸，所以远程登录的时候大家就不知道用什么密码了。其实用的就是我们的微软账户密码，但是因为我们已经设置过Pin了，电脑中可能并未保存我们微软账户的密码登录凭证，这里就需要进行一些小小的操作。以下步骤参考知乎回答，实测好用，来源会在文章底部贴出。1、在设置>账户>登录选项界面删除人脸/指纹登录选项； 2、点击pin（windows hello），再点击“我忘记了我的pin”； 3、在弹出的微软账号登录窗口上选择“继续”，并用密码登录微软账户； 4、成功后会让你更改pin的内容，这时不要更改，点击取消； 5、然后使用win+L锁屏，由于先前已删除了windows hello所有验证，此时在登录界面会看到”设置你的pin“，点击并按步骤设置，期间会输入一次微软账户密码。 6、设置完毕pin并进入系统后可重新设置windows hello人脸/指纹登录选项 7、在远程桌面app上用微软账户密码登陆，发现已经可以成功登进去了。双路由下报错0x904第二个坑是双路由造成的。一般双路由模式，由iKuai进行拨号，DHCP等网络流控相关的服务，OpenWRT进行一些其他的插件功能。这里一般都是将iKuai的DHCP网关地址导向OpenWRT，也就是说其实我们的Windows电脑的网关并不是iKuai，而是OpenWRT。但是我们设置的端口映射只对iKuai网关进行了映射，而我们的Windows电脑并没有访问iKuai的网关，这里就会出现在局域网内远程桌面能连接，而外网环境下会报错0x904，因为外网环境下并找不到我们的Windows电脑。所以这里我们还需要在OpenWRT中也进行一次端口映射。如下图所示。这样，我们就可以在双路由的情况下访问到我们的Windows电脑了。其实原理很简单，但是一时间并不容易想到，我研究了好久才发现这个坑。OpenWRT添加端口映射此外，还有一些零零散散的小问题，一时间我也想不起来了，如果大家还有什么疑问的话可以在下面进行留言。参考[1] dtcyh1017.微软账号用户如何设置远程桌面？.知乎.https://www.zhihu.com/question/34011808/answer/2430282636 2022-05-07 12:59 UtopiaXC 于大连