docker、iptables 和wireguard:选择什么方法?

docker、iptables 和wireguard:选择什么方法?

感谢一些帮助上一个线程,我已经设法找到一个具体问题,但我不确定如何解决潜在的问题。

总结一下这个问题:我的服务器上的 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.sockExecStart=/usr/bin/dockerd --data-root [New folder] -H fd:// --containerd=/run/containerd/containerd.sock
  • 创建了一个符号链接ln -s [New folder] /var/lib/docker

凭直觉,我会看到尝试解决我的问题的两个选项:

  1. 使用上面两个链接中的解决方案之一。坦白说,我不确定我是否完全理解其中的一些解释。此外,我不确定建议的解决方案之一(添加ExecStartPost=to /usr/lib/systemd/system/docker.service)是否有效,因为我不确定是否可以%i通过这种方式添加变量。
  2. 尝试找到一种替代方法来解释移动的内容/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/

相关内容