感谢一些帮助上一个线程,我已经设法找到一个具体问题,但我不确定如何解决潜在的问题。
总结一下这个问题:我的服务器上的 docker 似乎在某种程度上破坏了 iptables。此错误/功能已记录这里和那里。这表明,对于该服务器上的 Wireguard 实例,当我与服务器位于同一本地网络时,它不起作用。我已经能够缩小范围,因为:
- 我在同一网络上有另外两台具有相同配置(docker 除外)的服务器,没有问题;
- 当我在该服务器上禁用 docker 时,问题就消失了。
这意味着问题归结为/etc/wireguard/wg0.conf
未应用配置的 iptables:
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
/var/lib/docker/
当我将文件夹移动到另一个驱动器后,出现了该问题。为此,我做了:
- 编辑
/usr/lib/systemd/system/docker.service
:更改ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
为ExecStart=/usr/bin/dockerd --data-root [New folder] -H fd:// --containerd=/run/containerd/containerd.sock
- 创建了一个符号链接
ln -s [New folder] /var/lib/docker
凭直觉,我会看到尝试解决我的问题的两个选项:
- 使用上面两个链接中的解决方案之一。坦白说,我不确定我是否完全理解其中的一些解释。此外,我不确定建议的解决方案之一(添加
ExecStartPost=
to/usr/lib/systemd/system/docker.service
)是否有效,因为我不确定是否可以%i
通过这种方式添加变量。 - 尝试找到一种替代方法来解释移动的内容
/var/lib/docker
,而不是将其放入其中/usr/lib/systemd/system/docker.service
。
任何人都会有对此有何建议?我错过了什么吗?
多谢!
答案1
要从操作系统更改现有单元文件,最好使用sudo systemctl edit whatever.service
[1]。编辑原始文件会扰乱您的软件包更新。
但是如果您创建了符号链接,为什么需要更改单元文件?
也许尝试将内容从旧数据目录复制到新目录。万一有东西丢失了。
对于我的服务器,我更喜欢从发行版安装软件(而不是从 docker.io 或其他外部安装),因为它们可能经过修补以更好地与发行版配置的其余部分配合使用。随着我选择的发行版的podman
出现,它对我来说非常有效。它使用兼容的命令行选项运行,如docker
.但如果您的发行版附带docker
,那么也应该没问题。
[1]https://www.2daygeek.com/linux-modifying-existing-systemd-unit-file/