我用Wireguard作为港口集装箱。我正在pi上运行另外几个服务,我只想通过wireguard连接访问这些服务。wireguard服务器创建了一个接口wg0和一个子网10.8.0.0/24。从容器内部,我能够通过172.17.0.1连接到主机,因此我搜索并能够在容器中创建以下配置:
iptables -t nat -A PREROUTING -d 10.8.0.1/32 -j DNAT --to-destination 172.17.0.1这允许我从wireguard客户端连接到wireguard主机ip 10.8.0.1,并通过这种方式连接到运行在这些容器和其他容器上的所有服务。
除了源ip显示来自码头容器的ip外,这很好。
我有三个问题:
10.8.0.2 (有线客户端ip)吗?我知道,我也可以使用对接主机模式,而不是桥模式,但这与它自己的一组挑战。我还知道我可以从虚拟专用网客户端访问172.17.0.1。只有当同时连接到多个vpn时,才不起作用。
在此之前,非常感谢您。
发布于 2022-02-03 05:38:10
您可能还在容器中运行了一个iptables规则,如下所示:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE这就是改变通过WireGuard容器转发的连接的源IP的原因。使用当前的方法,为了避免使用此规则,您必须调整其他每个容器中的路由,以便将WireGuard容器用作远程WireGuard客户端的网关。
远程WireGuard客户端可以访问WireGuard容器本身可以访问的任何网络服务。
最简单的选择是将其他容器启动到WireGuard容器自己的网络命名空间中,如下所示:
首先,启动具有名称的WireGuard容器,如my-wg-container:
sudo docker run \
--cap-add NET_ADMIN \
--name my-wg-container \
--publish 51820:51820/udp \
--rm \
--volume /srv/my-wg-container/conf:/etc/wireguard \
procustodibus/wireguard然后,使用WireGuard选项将其他容器启动到--network container:my-wg-container容器的网络命名空间中:
sudo docker run \
--name my-web-server \
--network container:my-wg-container \
--rm \
nginx如果WireGuard容器使用10.8.0.1作为其WireGuard接口的地址(如您的示例所示),则可以从远程WireGuard客户端访问在http://10.8.0.1/的my-web-server容器中运行的web服务器。有关完整的示例,请参阅此有线护卫容器指南的C27部分。
使用这种方法,您不必对其他容器执行任何特殊操作(除了将它们附加到WireGuard容器),而且远程WireGuard客户端只能访问附加容器中的服务(而不是WireGuard容器可以访问的任何其他网络服务)。
https://serverfault.com/questions/1091564
复制相似问题