搭建远程开发环境@Win11+OpenWrt+Vscode+WSL2+Ubuntu22.04

发布时间 2023-07-17 12:51:20作者: NoNoe

Pre

之前618从pdd上买了配件,第一次尝试自己组装了电脑,本意是作为炼丹炉,不过毕竟是自己的电脑不像服务器可以一天到晚打黑工,还是用来开发就好,测测代码跑跑ai。

没显示器——远程连接(后来还是买了,而且今天才发现买的那款大降价,唉),没键鼠——远程连接,没网络——二手路由刷openwrt去中继,操作系统——win11+wsl2

安装win11

MSDN下载镜像,使用rufus制作启动盘,插入主机,在开机时进入bios更改启动顺序,保存重启进入安装程序,最后用KMS激活即可

摆弄网络

刷openwrt

首先是女生自用7成新不知名校园网破解百兆路由器RP-Link未知型号,10r带电源带网线:

PR-Link

首先SSID“七啊七啊七”,不知道密码,reset无效,直接插网线进入管理页面,改了lan口ip,重启半天,感觉不是很靠谱,没有中继选项。

研究了一下决定刷一个openwrt,所幸原本是用来破解校园网的,发现已经刷好了breed,通过原作者的启动工具成功进入breed页面。本来是想自己编译一个,教程都找好了,但是听说很慢,还是放弃了,毕竟也没有linux环境。
[注]: 刷固件需谨慎,另一个斐讯302c太丐了,感觉是刷不了,空间都不够,还是硬上了nano的老毛子,结果直接成砖了,web页也进不去,ssh不认,连交换机都做不了,悲。

路由中继

二手路由器的硬件

scan+join成功上网

对比cpu、内存闪存条件,从openwrt官网找到了个差不多的华硕路由器固件asus_rt-n14u-squashfs-sysupgrade.bin,一次成功。然后捣鼓了一下,lan口改成其他网段,join了宿舍的路由器,成功上网,但是速度感人。实际上到这里已经可以了,但是要远程控制主机就必须把笔记本也接入这个副路由,两个一起卡(后来发现好像是频段设置的问题,20MHZ两个都正常速度了)

于是想做个dhcp转发之类的,把主机也拉到主路由的网段里,这样笔记本就能接入主路由来控制它,完美。好像没用这方面的教程感觉好少,本想用openwrt的package,包是挺多,但是怎么都没有介绍,找了个看起来像这么回事的 isc dhcrelay,跟着论坛一顿乱来,根本不行。也试过恩山论坛的方法,ssh连上去一通操作,无效。

然后在openwrt luci的一个dhcp relay选项瞎填,无效。后面看到了比较官方的中继教程,relayd+luci-proto-relay方案,照着做成了!现在笔记本是快了,接在主路由,也可以控制主机,但是远程控制异常卡顿,敲个命令行字符都延迟半天,几乎没法用。怀疑是线的问题,然而根本不可能,后面也证实线并非瓶颈。而且该方案下笔记本无法ping主机,反过来可以,延迟却也很高很高,1000ms左右。

捣鼓半天不仅丢了网络,连键盘都失灵了。后面想试试WDS方案,然而主路由是买的破解校园网路由器,不支持ssh,也没有wds模式,直接从副路由开始配置,搞了半天确认好几次就是没网,wireless页面看得到速率,但没有主路由的ip,感觉还是主路由不支持导致的。

最后reset,返璞归真,本来想主机直接接主路由试试到底是什么的问题(有点怀疑win11),然而副路由重新设置重新join后一切正常了,稍慢,但至少能用。

桥接主路由

步骤1 interface-lan配置

步骤2 client配置

步骤3 master配置

步骤(4) interface全貌

步骤(5) 设置dns forwarding

中继步骤

  1. 副路由lan口ip改成跟主路由不同的网段,如192.168.23.1
  2. scan+join,填入主路由密码,channel似乎无所谓,auto也行,width默认20MHZ,network选join时自己创建的接口(这里改了名,默认叫wwan)
  3. 想无线连接副路由add一个无线网络,mode保持默认的access point,network改为lan
  4. interface能看到wan_n已经得到了主路由分配的ip192.168.1.192,连主路由时可以用它进入副路由的luci
  5. 设置dns为主路由ip或dns服务器地址即可上网,(但后来发现好像不填也行?)

尾声

最后笔记本无线接入副路由,主机用网线插着,可用。其实想一想一开始直接买贵一点的路由器,或淘宝二手的,或搞个pcie无线网卡,或那种小巧的usb网卡,也不至于这样折腾,浪费不少时间。

操作系统

wsl安装

这也是非常纠结的一点,由于硬盘小,没音响,没键鼠,跟游戏可以说绝缘,但win11还是比linux香,至少ai画图整合包方便(虽然玩不明白)。决定搞个wsl,直接照官网教程即可,wsl --install默认在c盘安装最新的ubuntu。

迁移wsl

ref: Windows10/11 D盘 安装 WSL2

步骤,以下命令都在powershell执行:

  1. 停止正在运行的wsl: wsl --shutdown
  2. 查看已安装的分发版 wsl -l --all -v
  3. 根据NAME一列导出wsl为tar文件到D盘 wsl --export {NAME} D:\{filename}.tar
  4. 注销C盘的分发版 wsl --unregister {NAME}
  5. 重新导入并安装分发版在D盘 wsl --import {NAME} D:\{target dir} D:\{filename}.tar --version 2
  6. 设置默认登陆用户为安装时的用户名 ubuntu2004 config --default-user USERNAME
  7. 删除导出的tar文件 del D:\{filename}.tar

笔记本ssh连接wsl

其实直接在主机上装个vscode,配上官方的远程开发拓展包是最方便舒服的,但考虑到在主机上开发还得装个git,然后每次代码得同步来同步去的,最重要的是没有键鼠!还是得ssh

思路是wsl安装ssh,开启服务然后在外层win11设置端口转发(因为不想用win11的22端口),局域网直接ssh连接win转发的端口。

ref: 如何在Ubuntu 22.04 LTS上安装/开启SSH协议
ref: wsl2 设置端口映射
ref: 从局域网 (LAN) 访问 WSL 2 分发版
ref: 如何用笔记本ssh连接局域网内其他电脑上的wsl2 ubuntu
ref: windows: 防火墙设置规则(给ssh开端口/ip)

步骤3,4,5 ssh状态确认

步骤7 查看wsl的ip地址

步骤9 打开防火墙新建规则

步骤9 打开防火墙新建规则2

步骤9 设置规则作用域

步骤11 查看win11上ip地址。第二个是对接wsl的虚拟以太网

步骤12 ssh连接wsl测试

步骤13 vscode安装 Remote SSH + Remote Explorer并配置

  1. 更新Ubuntu sudo apt update && sudo apt upgrade,更新软件包列表,检查可用的软件包更新 并 安装可用的软件包更新
  2. 安装OpenSSH sudo apt install openssh-server
  3. 使用systemctl启动SSH服务 sudo systemctl enable --now ssh。禁用命令: sudo systemctl disable ssh --now 删除命令:sudo apt autoremove openssh-server 另一个启动 sudo service sshd startsudo /etc/init.d/ssh start & sudo /etc/init.d/ssh stop
  4. 检查SSH服务运行状态,出现active running sudo systemctl status sshservice sshd status 或重启 sudo service ssh restart
  5. 检查防火墙状态,inactive就是没开 sudo ufw status,开了的话据说可以 sudo ufw allow ssh 放行ssh
  6. 测试 ssh localhost 能连说明成功 或 ps -e |grep ssh 看得到sshd即可
  7. 新增转发规则 netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=23333 connectaddress=172.30.249.53 connectport=22 listenaddress是win11监听的地址,全0表示局域网其他机器都可以来连接,listenport指win11监听的端口,connectaddress为wsl的ip地址,在wsl里执行 ip a 查看,connectport是wsl的端口,这里设置ssh的默认端口22。注意在win11用 ipconfig 看的是自己的ip
  8. 查看转发规则 netsh interface portproxy show all,刚才设置的有出现就好。此外 netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=23333 就可以把它删掉
  9. 打开win11防火墙——入站规则——新建规则——端口——TCP——22——默认,下一页——默认,下一页——名字随便
  10. 在规则列表里找到刚才新建的规则 ssh mapping,作用域里面选下列IP地址,填入本局域网的CIDR,应用即可
  11. win11 ipconfig 拿到ip地址,选本局域网网段那个
  12. 在局域网另一台电脑上输入 ssh {username}@{win11 ip} -p 23333,username是wsl的用户名,输入密码,成功!
  13. vscode在侧边栏打开ssh配置,Host填win11用户名,HostName填win11 ip,User是WSL的用户名,Port是win11开放的端口
  14. 方便起见可以在WSL里设置git仓库,后面有source control的提示
  15. 方便起见,有条件还是直接在win11上用vscode的远程开发拓展包最舒服

[注]: 一开始配好一直连接不上,而主机win11、wsl内都是可以的,后面才发现是防火墙的问题

外网远程连接win11

毕竟还得去实验室打卡,有没有一种可能我能在实验室远程连接宿舍的win11? —— 端口转发

步骤1

步骤2

步骤3

  1. 设置副路由端口转发,network-firewall-port forwards-add,这里由于已经加好了因此会有一条规则
  2. 点击add后如图进行设置,要ssh的话大概把internal port改为22即可
  3. 主路由如法炮制,找到端口转发的地方,只是要注意内部IP地址应该填主路由给副路由分配的IP,而不是副路由自己网段的IP

完工,还是比较简单的,实际上比较担心的是宿舍的电费和主机的散热问题