远程接入家里内网做开发的解决方案
前
现在忙带娃,时间太少了,文章更新的就慢很多了,最近抽空在家里部署了一套远程开发环境,具体怎么做的还是值得拿出来记录一下的。
中
这篇文章不谈具体技术,就讲一下思路而已。
目前家里已有设备和网络的情况如下:
-
台式机是家里性能最强的机器,系统是Windows,机器放在工作房中,缺点是房间没有有线网络接口,只能接一个AX200的网卡接入wifi
-
打电话申请了电信的公网IP,带宽300mbps下行,30mbps上行
-
有一台自己买的白牌机装ubuntu server做NAS服务器,低功耗的CPU,长期开机
-
有两台树莓派,其中有比较省电但性能低下的老型号
除了工作机外,没有笔记本电脑了,想移动办公就不大可能,因此一直想利用一些设备无关性的瘦客户端来做远程开发
其实这种想法是非常实际而且可行的。
远程办公需要解决的问题
-
远程开机的问题,如果没有远程开机,工作机长期保持不关是一个非常浪费的行为,一天要好几度的电而且大部分时间在空转。
-
虽然有电信的公网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 穿透到公网使用
下
最后有些技术实现上没有深入展开来讲,这个我准备再写一篇文章到知乎或者少数派上,等写完了再做补充贴回到这里。