WireGuard,为NAT设置多个客户端,STUN往哪里去?

目前, 我们正在启动对基于WireGuard服务器的访问,今天,我想告诉您如何配置位于NAT之后的客户端,尽管我们也不会忘记服务器的配置。

首先,关于WireGuard和硬币背面的优点,以及随之而来的困难。 由于UDP使用传输协议,所以WireGuard是两点之间的隧道的一个相当年轻的实现。 这就是为什么,并且因为Linux实现本身是作为内核模块实现的,所以测试显示出与竞争对手相比还不错的速度优势。 尽管端节点称为Peer ,但不能将其视为对等网络。 对等网络的本质不仅在于可以连接两个任意节点。 当然,使用此工具包,您可以构建非常复杂的网络基础结构,但是我没有这个目标。 我们将考虑连接到服务器节点并通过它访问Internet。

显然,如果两个节点(服务器和一个客户端)具有白色 IP,则在这种情况下设置应该没有任何困难。 但是客户端通常位于NAT之后,在这种情况下,设置服务器时,您必须指定在设备上发布/注册的错误IP地址。 在这方面,STUN协议可以提供帮助。 当使用VoIP时,尤其是当两个客户端都位于NAT之后时,通常会使用此协议。 但是对于我们来说,这也会有所帮助。 从Wikipedia上的信息来看,STUN不适用于所有类型的NAT;在四种类型的NAT之一中,(对称)客户端的IP可以不同于使用STUN客户端在外部定义的IP。

STUN客户端存在于iOS以外的所有流行操作系统上。 在此操作系统下,我找不到STUN客户端。 我将以macOS为例。 首先,您需要安装STUN客户端本身。

$ brew install stunman 

互联网上有大量的STUN服务器,为测试找到任何服务器并不难。 我将使用stun.ekiga.net 。 对于测试,您将需要使用本地端口,这是我们将用于配置的端口:

 $ stunclient --localport 51820 stun.ekiga.net 

通过成功的测试,我们大致得出以下结论:

 Binding test: success Local address: 192.168.88.23:51820 Mapped address: 82.207.27.3:51820 

映射地址恰好是设置服务器时需要使用的IP。 实际上,在我的情况下,这是IP地址,它将提供用于确定外部IP的任何服务。 因此,您可以使用自己喜欢的服务来确定IP,但是,当然值得考虑的是,此测试将是间接的,并且不能保证一切都会按预期进行。

要在客户端连接服务器,必须提供:IP,端口和公共密钥。 要在客户端进行配置,您需要与服务器端完全相同的列表。 接下来,我将建议配置选项,如果您将其用作示例,建议重新生成密钥。

在Linux上,这可以通过macOS上的命令行通过官方客户端UI从命令行完成。

 $ wg genkey | tee privatekey | wg pubkey > publickey 

在这种情况下,将在调用位置在私钥文件中创建私钥,并在publickey中分别创建public。

首先,请考虑客户端配置:

 #       [Interface] #       PrivateKey = YPuKo2QXndQ2Vc3S/y90oKT7AJ0Swhq/HWKiF7GwS04= #         ListenPort = 51820 #  IP   ,        #    Address = 10.8.0.2/24 # DNS   ,      DNS = 8.8.8.8 #     [Peer] #   ,     PublicKey = nFjDIkgsAh1RMZuaCJ+AKs7JmbMxxthhZ0POjUSTvkc= #     ,       # IP  ,          #     ,      #     WireGuard . IP   , #   . AllowedIPs = 0.0.0.0/0 #  IP    Endpoint = 46.101.122.130:51820 #  2 .  -    ,     , #    AllowedIPs         #   .  -     # ,    -  25 . PersistentKeepalive = 25 

现在是时候进行服务器配置了:

 #       [Interface] # IP      Address = 10.8.0.1/24 #     ListenPort = 51820 #  ,      PrivateKey = MNnxOy79xtXtSQ3UySWtdlOMbG7ff9dXGjeSTPEByn8= #  2 ,      wg0  PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE #     [Peer] #   ,    PublicKey = TdRtYd6XXI+ynPDXU6FF5TT3L5t/YlQVZswr2xsou34= #   IP ,     , #     AllowedIPs = 10.8.0.2/32 #  IP ,   ,     STUN  EndPoint = 82.207.27.3:51820 

以这些配置为例时,建议删除俄语注释,如果不能保证注释,则建议删除服务器和客户端。

我使用以下资源进行配置: 官方站点 ArchWiki本教程

最后,我还要澄清几个可能的问题:

1.是否可以在服务器上创建同一Peer的多个部分,这些部分仅在EndPoint中有所不同?

是的,这是有可能的,如果您在不同的地方(例如,在工作和在家中)使用该服务,它甚至会很有用。 但是,如果此类对等方同时联机,则可能会出现问题,在这种情况下,将存在IP地址冲突。

2. STUN协议将为每个NAT的多个客户端确定哪些外部IP和端口?

对于所有客户来说都是一样的。 这会是个问题吗? 这完全取决于提供商/路由器的设置,但是从根本上讲不会出现问题,因为路由器必须分别通过本地网络掩码在网络内部广播UDP数据包,因此那些能够解密数据包的接收方必须成功接收它们。 我们对设备进行了测试,测试成功。

本文的目的不是编写关于如何配置WireGuard的完整教程,使用官方文档并不难。 我们想展示WireGuard如何为NAT工作。

如果您想在商业中试用WireGuard,可以与我们联系,我们可以进入测试模式。

UPD:
正如aborouhin 居民正确指出的那样,只有一个白色IP足以使数据通道正常工作。 因此,可以从服务器配置中省略EndPoint for Peer ,这使配置更加容易。 如果两个节点都位于NAT之后,则所描述的手册可能会很有用。

Source: https://habr.com/ru/post/zh-CN481838/


All Articles