目录

远程接入家里内网做开发的解决方案


/68d1386d-de3d-4893-91d1-673b88d9e25e/8c2d9a382c8c423c9e048d01607cf452.jpeg

现在忙带娃,时间太少了,文章更新的就慢很多了,最近抽空在家里部署了一套远程开发环境,具体怎么做的还是值得拿出来记录一下的。

这篇文章不谈具体技术,就讲一下思路而已。

目前家里已有设备和网络的情况如下:

  1. 台式机是家里性能最强的机器,系统是Windows,机器放在工作房中,缺点是房间没有有线网络接口,只能接一个AX200的网卡接入wifi

  2. 打电话申请了电信的公网IP,带宽300mbps下行,30mbps上行

  3. 有一台自己买的白牌机装ubuntu server做NAS服务器,低功耗的CPU,长期开机

  4. 有两台树莓派,其中有比较省电但性能低下的老型号

除了工作机外,没有笔记本电脑了,想移动办公就不大可能,因此一直想利用一些设备无关性的瘦客户端来做远程开发

其实这种想法是非常实际而且可行的。

远程办公需要解决的问题

  • 远程开机的问题,如果没有远程开机,工作机长期保持不关是一个非常浪费的行为,一天要好几度的电而且大部分时间在空转。

  • 虽然有电信的公网IP,但是IP是会随机变化的,所以需要DDNS

  • 考虑到私开服务端口,尤其是HTTP,HTTPS,WEBDAV(可能有风险)之类及各种伪装HTTP头的协议,很可能会被探测到并且以滥用网络被停网,这也是要解决的问题

解决方案

  • DDNS这个就比较简单了,比如阿里云良心云上的域名都有API接口,自己实现一个接口调用,周期性的从外网获取到WAN口的IP,再调用API变更域名

  • 远程开机这个稍微有点复杂,前面说明了家庭的网络情况,台式机是放在工作房用wifi连接的,所以想直接用WOL远程开机是不可能的事了,我这里用了一个折中的方案,可以算是一个黑科技了,在树莓派上网口和主机网口直连,用netplan配置好环境,普通上网路由表中走wifi,特定网段走有线网卡。开启SSH,然后只要能连上内网树莓派的SSH,那么就可以通过发送magic packet方便的控制远程开机,具体magic packet怎么实现wol远程开机,如何配置,我以前在少数派上写过一篇文章https://sspai.com/post/52303 有配置的方法

  • 那么如何连上内网的树莓派的SSH,甚至内网的NAS,还有通过RDP来访问windows主机呢,简单来讲,直接在路由器上配置端口映射就完了。但是考虑到电信会探测你对外的网络服务,所以最好还是别这么做。

  • 所以我在NAS上配置了wireguard,VPN接入,路由器只对外开了一个端口,具体wireguard要如何配置请查阅相关文章,有一点要注意的是,AllowedIPs中千万不要跟内网IP冲突了,否则在NAS的路由表项中会由于内网地址转发表冲突在连接wifi时不能被其他设备访问,具体可以在iptables中实现filter表FORWARD nat表postrouting的转发

  • 这样我只要通过wireguard接入到内网,就可以随心所欲的控制内部设备,可以SSH,可以远程开机,可以RDP远程Windows主机,在30mpbs的上行带宽下,访问内网资源网速非常快延时也很小,完全可以满足日常使用。

  • NAS 环境是 ubuntuserver,运行了很多docker,其中一个 docker 容器跑的是 code-server,如果轻量开发就直接网页或者 app 接入 code-sever,这个主要是在平板连接的时候方便使用

  • 另外NAS部署了破解版本 jira,jenkins容器,这个做了反向代理,并用 FRP 穿透到公网使用

最后有些技术实现上没有深入展开来讲,这个我准备再写一篇文章到知乎或者少数派上,等写完了再做补充贴回到这里。