之前在pixelbook 2017上安装了v2ray实现科学上网,现在服务器端已经换xray了,pixelbook上当然也要重新设置,手动配置config文件始终比较麻烦,如果能在pixelbook上运行openwrt,配置起来就方便多了。
pixelbook 2017的LINUX子系统(Crostini)其实是首先通过虚拟机运行termina虚拟机,然后再在termina中用LXC(其实是提供了独立lxc命令的LXD)运行debian容器。既然是完整的LXC,那当然LXC的各种玩法都可以用,也可以安装其他的一些LINUX容器,比如openwrt。
不过如果需要安装自己编译的openwrt镜像,方法稍微有点复杂,有一些坑,在此记录一下。
首先需要准备好LXD可以使用的openwrt镜像,通过lxd-openwrt-simplified把自己编译的openwrt的rootfs.tar.gz文件转换为LXD需要的格式并添加metadata文件:
./build_cust.sh openwrt-x86-64-generic-rootfs.tar.gz lxd

但是这样还不行,后面LXC导入的时候发现会提示压缩包中找不到metadata.yaml文件,具体原因不明。不过公共的镜像源使用的都是xz压缩格式,可能问题就在这里。
把转换好的文件解压:
tar -zxf openwrt-x86-64-generic-x86_64-lxd.tar.gz
然后重新压缩为xz格式:
tar jcf openwrt.tar.xz *
这样之后就可以正常导入了。
其次需要解决的是如何把自己编译的openwrt镜像上传到termina虚拟机中,然后用LXC导入镜像。但是termina虚拟机中的文件系统在pixelbook上无法直接访问,好在LXD的lxc image import命令提供了通过URL(必须https)来导入镜像的方法,所以可以自建服务器,把openwrt镜像放到服务器上。
LXD要求import的URL要返回LXD-Image-URL和LXD-Image-Hash两个HEADER,可以通过修改服务器的nginx配置来添加。
在自己的服务器上新建了一个lxc.****.com的子域名,然后编辑nginx配置,添加SSL证书以支持https,并用add_header添加LXD-Image-URL和LXD-Image-Hash两个HEADER。其中LXD-Image-URL的值就是openwrt镜像的链接(这个可以用http),LXD-Image-Hash则是openwrt镜像的SHA256。

这样用浏览器访问lxc.****.com,就可以看到这两个HEADER:

准备完成,现在开始在pixelbook上操作。使用CTRL+ALT+T打开crosh命令行。然后用vmc start termina命令进入termina虚拟机。使用这个命令导入openwrt镜像:
lxc image import https://lxc.****.com --alias my-openwrt-image --public
这时使用lxc image list命令,就可以看到已经导入了该openwrt镜像:
(termina) [email protected] ~ $ lxc image list +------------------+--------------+--------+----------------------------------+--------+---------+------------------------------+ | ALIAS | FINGERPRINT | PUBLIC | DESCRIPTION | ARCH | SIZE | UPLOAD DATE | +------------------+--------------+--------+----------------------------------+--------+---------+------------------------------+ | my-openwrt-image | 042b0a03b628 | yes | OpenWrt SNAPSHOT r3146-8db35e67f | x86_64 | 65.81MB | Apr 10, 2021 at 7:56am (UTC) | +------------------+--------------+--------+----------------------------------+--------+---------+------------------------------+
然后使用以下命令使用my-openwrt-image镜像创建新容器:
lxc launch my-openwrt-image OpenWrt
这时使用lxc list就可以看到已创建的openwrt容器,以及该镜像的IP:
(termina) [email protected] ~ $ lxc list +---------+---------+-------------------------+-------------------------------------------------+------------+-----------+ | NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS | +---------+---------+-------------------------+-------------------------------------------------+------------+-----------+ | OpenWrt | RUNNING | 100.115.92.200 (br-lan) | 2408:8207:78ba:4950:216:3eff:fe5c:92f6 (br-lan) | PERSISTENT | 0 | +---------+---------+-------------------------+-------------------------------------------------+------------+-----------+ | penguin | RUNNING | 100.115.92.196 (eth0) | fd64:1435:592a:0:216:3eff:fe04:1e94 (eth0) | PERSISTENT | 2 | | | | | 2408:8207:78ba:4950:216:3eff:fe04:1e94 (eth0) | | | +---------+---------+-------------------------+-------------------------------------------------+------------+-----------+
用Pixelbook的浏览器打开100.115.92.200,就可以打开openwrt的luci界面了。但是root账号的密码还需要在命令行中进行修改。使用以下命令进入openwrt容器的命令行:
lxc exec OpenWrt sh
然后用passwd命令修改root账号的密码,修改完成后就可以登录openwrt的后台。
完成一些基本配置后,在SSR+中添加科学上网节点,并在高级设置中打开SOCKS5全局代理服务端。

至此代理服务配置完成!在pixelbook的浏览器的SwitchyOmega插件中设置SOCKS5代理为100.115.92.200:1080,就可以正常科学上网喽!

支持LXC之后,Pixelbook的可玩性真是提升了不少,还可以安装docker,慢慢玩吧。
Comments | NOTHING