🧑🏻‍💻 博世

ZZ.AC公益主机玩法

基本玩法

登录之后查看网络信息:

$ ip addr
        1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
            link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
            inet 127.0.0.1/8 scope host lo
               valid_lft forever preferred_lft forever
            inet6 ::1/128 scope host
               valid_lft forever preferred_lft forever
        2: eth0@if23: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
            link/ether 4e:37:c2:a9:f6:66 brd ff:ff:ff:ff:ff:ff link-netnsid 0
            inet6 fe80::2/64 scope link
               valid_lft forever preferred_lft forever
            inet6 fe80::4c37:c2ff:fea9:f666/64 scope link
               valid_lft forever preferred_lft forever
        

这里的 eth0@if23 就是前面说的 veth 链路的用户端设备。注意它已经设置了 fe80::2/64 本地链接地址。登录之后无法直接访问外部网络环境。但你用 curl 访问 github.com 就会发现是通的。这是因为系统会自动设置 HTTP 代理环境变量:

$ export|grep http
        declare -x http_proxy="http://[fe80::1%eth0]:8888"
        declare -x https_proxy="http://[fe80::1%eth0]:8888"
        

非 HTTP 协议无法通信!

如果你做个网站对外提供 web 内容,就需要自己运行 http 服务。我们以 python3 内置的 http.server 包为例演示用法。

先准备 web 内容:

mkdir web
        echo "Hello, World!" > web/index.html
        

然后运行
http.server

cd web
        python3 -m http.server -b :: 8080
        

注意,这里使用-b ::来监听所有 IPv6 地址,包括我们自己的 fe80::2/64。端口只能固定为 8080。

到此,web 服务就准备好了。打开浏览器访问https://lab.example.zz.ac就会看到熟悉的”Hello, World!“。宿主机上的 Caddy 会自动申请 SSL 证书,并将请求转发到对应的用户网络空间。

为了让 web 服务在 ssh 退出后继续运行,你需要使用创建用户态的 systemd 服务。

服务路径为 ~/.config/systemd/user/web.service,内容如下:

[Unit]
        Description=Web Service

        [Service]
        WorkingDirectory=%h/www
        ExecStart=/usr/bin/python3 -m http.server -b :: 8080

        [Install]
        WantedBy=default.target
        

保存之后通过 systemctl 启动服务:

systemctl --user enable --now web.service
        

这样你的服务就能在后台自动运行了。而且宿主机重启之后你的服务也会自动启动。

高级玩法(podman)

以上展示了公益主机的基本玩法。如果觉得不过瘾,还可以自己折腾高级玩法。

虽然申请到的用户没有 root 权限,不能直接在系统层面安装软件。用户还是可以通过 Linux 版的 Homebrew 或者 Nix 包管理器在自己的家目录安装需要的工具,然后通过 systemd 来管理。

宿机上部署了 podman,这是 docker 的平替工具,不需要 root 权限就能运行,命令参数几乎跟 docker 一样,大家可以玩玩。