0%

wsl2内网穿透全套配置

由于本周末直至下周需要出差,所以这两天给出租屋的windows&wsl2配置了一下内网穿透,这样在外面也能倒腾。

(假设wsl2已经安装完成了,相关教程比较多,不再赘述)

首先是整体方案的选型,我这里是选用了frp作为内网穿透的软件,整体方案为windows与远端服务器分别配置为frp的客户端和服务器端,windows充当跳板机连接至wsl2。这一选型主要是能提供较大的冗余,除了能操作wsl2外还能操作windows。

整体的步骤如下:

windows配置openssh

参考官方文档即可进行配置Windows 中的 OpenSSH

由于windows安全很重要,我只允许了密钥登录。配置完成后参考这里进行公钥的配置。如果windows本机只有一个用户(那也会是管理员用户),需要将公钥写到C:\ProgramData\ssh\administrators_authorized_keys中。操作完之后可以使用ssh username@xx.xx.xx.xx检查是否配置成功(本机ip通过ipconfig查询)。注意默认的终端是cmd,可以参考官网的指南配置为powershell。

wsl2配置openssh

也许是莫名的权限问题,我在连接windows的wsl后无法通过wsl命令访问wsl。这里选择开启wsl的ssh端口解决。只要开启相应端口,就可以在本机通过ssh访问wsl了。(某种意义上讲这比wsl命令会更好一些,这提供了ssh命令的相关支持)

安装过程主要参考这里,需要注意的是端口绑定2222以避免潜在的端口冲突。此外需要在windows启动项中进行配置以便wsl能开机启动openssh(听说有更简便的方式,但总之能跑就行了)。配置分为两步:1)在wsl的/etc/init.wsl中写入openssh启动命令;2)在windows的启动文件夹中加入linux-start.vbs文件,写入

1
2
3
Set ws = CreateObject("Wscript.Shell")

ws.run "wsl -d Ubuntu-20.04 -u root /etc/init.wsl start", vbhide

即可。

测试好之后可以重启计算机,并尝试ssh wslusername@localhost -p 2222是否成功。

frp配置

使用frp官方示例即可。我在common中额外加入了128比特的密钥

1
2
3
[common]
bind_port = 7000
token = 0xxxxxxx

运行ssh -oPort=6000 windowsusername@serverip能连接至windows即可。

在服务器端运行无误后参考这里将frp设置为了服务器端的服务。

不过不幸的是,我在windows的powershell中安装了oh-my-posh,因此从mac连接过来的时候会乱码。这一点还得找时间修复一下。大概率是字体问题。连接之后则可以通过命令ssh到wsl中了。

此外,还可以使用ssh的跳板命令来直接连接到wsl

ssh -J windowsusername@serverip:6000 wslusername@localhost -p 2222

为了提高windows连接的可用性,可以参考这里设置frpc的自动启动。之后重启计算机测试上面的命令,通过后一整套配置就完成了。

(对了,出门在外记得暂停windows更新计划)