更换AWS EC2 Windows实例IP时如何避免远程桌面连接中断?
兄弟,我太懂你这种每次换IP就断RDP的痛苦了!其实核心问题在于RDP是基于当前TCP连接的,一旦实例的公网IP换掉,现有的连接直接就失效了。不过有几个办法能让这个过程更丝滑,甚至几乎感觉不到中断,给你捋一捋:
开启RDP客户端的自动重连功能
不管是Windows自带的RDP还是Mac上的Microsoft Remote Desktop,其实都有自动重连的选项,只是很多人没注意到。以Mac的MRD为例:编辑你的连接配置,找到「会话」或者「连接」标签,把「自动重新连接」的选项勾上。这样当IP更换、连接断开后,客户端会自动尝试重新连接到更新后的域名。
另外记得把noip.com的域名TTL改小(比如设成60秒),这样DNS缓存更新更快,客户端能更快拿到新的IP地址,重连的等待时间就会大大缩短。改用AWS Systems Manager Session Manager连接实例
这个方法直接绕开了公网IP的限制!Session Manager是AWS官方的远程管理工具,不需要给实例绑定弹性IP,只要实例能访问AWS的SSM服务(比如有内网路由到AWS服务端点,或者能连公网),你就能通过AWS控制台或者CLI直接远程连接到Windows实例的桌面(需要在实例上装SSM Agent)。
哪怕你频繁更换弹性IP,只要SSM Agent正常运行,你随时能通过Session Manager快速连接,完全不用依赖RDP的IP连接,自然也就不会有断开的问题了。而且这个方式更安全,不用暴露RDP端口到公网。用多弹性网卡(ENI)实现无缝切换
如果你的业务必须依赖公网IP切换,那可以给EC2实例附加多个弹性网卡。每个ENI绑定一个弹性IP,这样实例同时拥有多个公网IP。切换的时候,先把新的ENI和弹性IP关联好,确保域名解析已经指向新IP,然后再解绑旧的ENI的IP。
这种情况下,你可以先在RDP客户端里测试新IP能连上,再断开旧的连接,或者让RDP自动切换到新IP,就能做到几乎无缝的切换。不过要注意给Windows系统配置好多个网卡的网络参数,确保每个网卡都能正常通信。优化IP更换脚本,减少中断窗口
你用Python脚本自动化的思路是对的,再优化一下脚本的流程:先关联新的弹性IP,然后立刻调用noip的API更新域名记录,尽量让这两个操作的间隔缩到最短。同时配合前面说的RDP自动重连,这样断开后客户端会马上尝试重连,用户几乎感觉不到中断。
备注:内容来源于stack exchange,提问作者SoftTimur

