我正在运行我自己风格的 Debian(trixie、6.1.0-9-amd64)。我设置了一个自定义 systemd 服务来建立网络命名空间并通过它路由 VPN 流量(该服务已经完美运行了一年多)。最新的系统更新后,创建网络命名空间失败,并显示以下内容:
依赖作业[电子邮件受保护]失败的。有关详细信息,请参阅“journalctl -x e”。
以下是来自journalctl的相关(我希望)行:
Sep 29 23:23:50 [redacted] systemd[1]: /lib/systemd/system/[email protected]:10: Failed to resolve unit specifiers in 'netns@%I.service', ignoring: Invalid slot
Sep 29 23:23:54 [redacted] systemd[1]: Starting [email protected] - Named network namespace ovpn...
Sep 29 23:23:54 [redacted] env[xxxx]: umount: /var/run/netns/ovpn: not mounted.
Sep 29 23:23:54 [redacted] systemd[1]: [email protected]: Main process exited, code=exited, status=32/n/a
░░ Subject: Unit process exited
░░ An ExecStart= process belonging to unit [email protected] has exited.
░░
░░ The process' exit code is 'exited' and its exit status is 32.
Sep 29 23:23:54 [redacted] systemd[1]: Dependency failed for [email protected] - NAT service for netns ovpn.
Sep 29 23:23:54 [redacted] systemd[1]: [email protected]: Job [email protected]/start failed with result 'dependency'.
“无法解析...中的单位说明符”错误向我表明命名空间配置文件中现在存在问题,%I/%i
但我尝试转义它们但无济于事。还有什么可能导致这些错误?
编辑添加
我使用启动命名空间,我相信它会调用并执行文件'systemctl start [email protected]
[电子邮件受保护]':
[Unit]
Description=NAT service for netns %I
Documentation=https://github.com/Jamesits/systemd-named-netns
BindsTo=netns@%i.service
After=netns@%i.service
Before=network.target network-online.target
Conflicts=netns-bridge@%i.service
JoinsNamespaceOf=netns@%I.service
[Install]
WantedBy=network-online.target
WantedBy=multi-user.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/env netnsinit nat %I up outside
ExecStart=/usr/bin/env ip netns exec %I /usr/bin/env netnsinit nat %I up inside
ExecStop=/usr/bin/env ip netns exec %I /usr/bin/env netnsinit nat %I down inside
ExecStop=/usr/bin/env netnsinit nat %I down outside
该脚本netnsinit
可以在以下位置找到:https://github.com/Jamesits/systemd-named-netns/blob/master/scripts/netnsinit
答案1
我不知道上面到底发生了什么,但我怀疑我的 Debian 设置发生了更深层次的问题(其他一些程序开始抛出神秘的段错误)。从头开始重新安装 Debian 并再次设置命名空间后,一切正常。