【发布时间】:2022-01-23 17:47:25
【问题描述】:
我在 Docker 容器中使用 OpenVPN 服务器进行多个客户端连接。 这个容器位于一个特定的 Docker 网络中,我有一个 Web 服务器作为客户端目标。
我想将我的 Web 服务器的主机名发布给客户端,这样他们就无需知道其 IP 地址即可访问它。 为此,我想向 OpenVPN 客户端打开 Docker 的本地 DNS 服务器,并将 OpenVPN 的 IP 作为 DNS 服务器推送给它们。
但是,Docker DNS 服务器驻留在 OpenVPN 容器中,侦听 127.0.0.11(使用 iptables 内部重定向,但这是另一回事)。
因此,在 OpenVPN 服务器容器中,我需要添加一个 iptables 规则,以便将来自外部 OpenVPN IP 的 DNS 请求转发到内部 127.0.0.11。
但是这样的内部转发需要我执行以下命令:
sysctl -w net.ipv4.conf.tun0.route_localnet=1
在运行 docker run (--cap-add=NET_ADMIN) 时使用唯一的 NET_ADMIN 功能,我收到以下错误消息:
sysctl: error setting key 'net.ipv4.conf.tun0.route_localnet': Read-only file system
但是,使用 --privileged 标志可以完美地工作,但是这个标志太宽松了。
是否有任何 Linux 功能可以做到不使用--privileged 标志?
我在Linux capabilities manual 中找不到答案。
【问题讨论】:
标签: docker networking openvpn sysctl linux-capabilities