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 一样,大家可以玩玩。

Licensed under CC BY-NC-SA 4.0
热爱生活 学无止境
使用 Hugo 构建
主题 StackJimmy 设计