首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Wireguard转发通信到主机

Wireguard转发通信到主机
EN

Server Fault用户
提问于 2022-01-29 14:41:50
回答 1查看 2.1K关注 0票数 2

我用Wireguard作为港口集装箱。我正在pi上运行另外几个服务,我只想通过wireguard连接访问这些服务。wireguard服务器创建了一个接口wg0和一个子网10.8.0.0/24。从容器内部,我能够通过172.17.0.1连接到主机,因此我搜索并能够在容器中创建以下配置:

代码语言:javascript
复制
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外,这很好。

我有三个问题:

  1. 有任何方法显示源ip为10.8.0.2 (有线客户端ip)吗?
  2. 这会带来任何安全风险吗?
  3. 有更好的方法吗?

我知道,我也可以使用对接主机模式,而不是桥模式,但这与它自己的一组挑战。我还知道我可以从虚拟专用网客户端访问172.17.0.1。只有当同时连接到多个vpn时,才不起作用。

在此之前,非常感谢您。

EN

回答 1

Server Fault用户

发布于 2022-02-03 05:38:10

  1. 有任何方法显示源ip为10.8.0.2 ( wireguard客户端ip)吗?

您可能还在容器中运行了一个iptables规则,如下所示:

代码语言:javascript
复制
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

这就是改变通过WireGuard容器转发的连接的源IP的原因。使用当前的方法,为了避免使用此规则,您必须调整其他每个容器中的路由,以便将WireGuard容器用作远程WireGuard客户端的网关。

  1. 这会带来任何安全风险吗?

远程WireGuard客户端可以访问WireGuard容器本身可以访问的任何网络服务。

  1. 有更好的方法吗?

最简单的选择是将其他容器启动到WireGuard容器自己的网络命名空间中,如下所示:

首先,启动具有名称的WireGuard容器,如my-wg-container

代码语言:javascript
复制
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容器的网络命名空间中:

代码语言:javascript
复制
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容器可以访问的任何其他网络服务)。

票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1091564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档