如何使用 MikroTik 路由器设置加密的 L2 隧道?

SDw*_*rfs 3 encryption tunneling mikrotik routeros link-layer

我想达到的目标

我想将现有的内部子网安全地分布在多个建筑物上。这意味着我有两个位置的虚拟机需要位于同一子网中。这个想法是虚拟机(具有静态 IP)可以从一个位置迁移到另一个位置。

(物理)主机连接到每个位置的交换机。所以,如果没有任何安全或成本问题,我只需用网线连接两个交换机:

[机器]---[交换机A]<----长电缆--->[交换机B]---[机器]

我想要的是使用两个不需要关心 IP 地址或路由的网关将这条长电缆替换为加密隧道,只需将任何传入数据包加密并通过加密隧道将它们发送到另一个网关。另一个网关然后解密数据包并将它们发送到远程交换机。这在物理上看起来像这样:

[机器]---[交换机A]---[网关A] <-- 互联网--> [网关B]--[交换机B]---[机器]

我想避免网关需要子网内的任何 IP 地址。规则应完全基于端口:

  • 端口 1 的传入数据:通过隧道接口路由
  • 隧道接口处的传入数据:通过端口 1路由

两个网关将有一个静态的、可路由的 IP 地址来建立隧道。加密应该很强大(至少是 AES128、SHA256、DH2048;共享机密很好),这是简单的 PPP 类型隧道不支持的。因此可能需要一个额外的/单独的加密层。

我只有 MikroTik 路由器可用。所以我更愿意使用它们。但是,我主要是在寻找“神奇的词”(协议名称等)以及允许我这样做的正确技术组合。因此,如果您知道如何使用 Cisco 路由器或 HP 路由器执行此操作,如果您解释了如何使用这些路由器执行此操作,它可能也会有所帮助...

问题/尝试

我可以使用什么样的防火墙过滤器和协议来实现这一点?

我的第一个想法是使用 IPsec 来跨越加密隧道。但是,那么我需要定义基于物理端口的 IPsec 策略。但是只有一个选项可以定义来自/到特殊 IP 地址/IP 端口组合的数据。

因此,IPsec 将仅用作另一种隧道类型的加密层(MikroTik RouterOS 目前支持 PPTP、SSTP、L2TP 和 OVPN)。由于 PPP 隧道通常不支持强加密,我会让 IPsec 完成这项工作,并通过加密的 IPsec 隧道跨越未加密的 PPP 隧道。

好的,现在我们至少有一些隧道接口,我们可以像传出端口一样使用它。但是,我有点迷失在这里。我不认为有可能说:“必须通过接口发送具有传入 at 的帧”和“必须通过接口发送传入 at 的帧”。

我不经常在 Layer2 工作......所以我实际上正在寻找正确的“术语”或“类别”。我可以想象在 IP-Firewall (mangle->prerouting) 或类似的地方找到它,但我认为这已经是第 3 层的东西......

我只需要设置一个桥接吗?如果是这样,我如何将隧道接口添加到网桥(最好使用 winbox 接口)?网桥需要MAC地址吗?

以防万一这种尝试是死胡同:我还在“接口”设置中找到了“EoIP”、“IP 隧道”和“GRE 隧道”。但我不知道他们能做什么......所以以防万一,让我知道他们中哪些值得调查......

另外,如果有更简单的解决方案,请不要介意告诉我您的解决方案......如果有更简单的方法,您不必继续我的上述尝试!

Cha*_*a0s 5

您可以通过使用网桥、EoIP 隧道和 IPsec 的组合来完成您的要求。

首先,您在两端创建一个 EoIP 隧道,以便两个路由器可以相互通信。
EoIP是 MikroTik 专有隧道,其工作方式与 GRE proto 47 非常相似。
它可以转发整个以太网帧,而不仅仅是 IP(例如 IPIP 或 TAP 接口),使其成为通过 L3 链路“扩展”L2 广播域的理想选择。

然后设置 IPsec 以加密隧道上的通信。
在最新版本的 Mikrotik 上,这可以通过 EoIP 接口设置自动完成,但我更喜欢手动设置以更好地控制。
您将 IPsec 策略应用于 EoIP 隧道端点 IP(因此加密整个 EoIP 隧道流量),而不是通过隧道的网络。

最后,您在两个路由器上创建一个网桥,并在每一侧连接以太网端口和 EoIP 隧道。

通过这种方式,您可以将 L2 广播域扩展到远程端,网桥将处理哪些数据包应该通过隧道,哪些应该留在本地。
网桥就像软件交换机,因此它们会保存一个表,其中包含哪些 MAC 位于哪些端口,并自动转发发往哪个端口的数据包。当然,所有广播流量都将转发到隧道。 有关桥梁的更多信息

官方 MikroTik 文档中已经记录了这种情况(IPsec 加密除外)。

让我们假设我们要桥接两个网络:“办公室 LAN”和“远程 LAN”。通过使用 EoIP 设置,可以使办公室和远程 LAN 位于同一个第 2 层广播域中。

考虑以下设置: 在此处输入图片说明

如您所知,无线站无法桥接,为了克服此限制(不涉及 WDS),我们将在无线链路上创建 EoIP 隧道,并将其与连接到本地网络的接口桥接。

我们不会在这个例子中介绍无线配置,让我们假设已经建立了无线链接

首先,我们在网关上创建 EoIP 隧道......

[admin@Our_GW] interface eoip> add name="eoip-remote" tunnel-id=0 \
\... remote-address=10.0.0.2
[admin@Our_GW] interface eoip> enable eoip-remote
[admin@Our_GW] interface eoip> print
Flags: X - disabled, R - running
  0    name=eoip-remote mtu=1500 arp=enabled remote-address=10.0.0.2 tunnel-id=0
[admin@Our_GW] interface eoip>
Run Code Online (Sandbox Code Playgroud)

...以及在远程路由器上

[admin@Remote] interface eoip> add name="eoip" tunnel-id=0 \
\... remote-address=10.0.0.1
[admin@Remote] interface eoip> enable eoip-main
[admin@Remote] interface eoip> print
Flags: X - disabled, R - running
  0   name=eoip mtu=1500 arp=enabled remote-address=10.0.0.1 tunnel-id=0

[admin@Remote] interface eoip>
Run Code Online (Sandbox Code Playgroud)

下一步是在我们的 GW 上桥接本地接口与 EoIP 隧道......

[admin@Our_GW] interface bridge> add 
[admin@Our_GW] interface bridge> print
Flags: X - disabled, R - running
 0  R name="bridge1" mtu=1500 arp=enabled mac-address=00:00:00:00:00:00 
      protocol-mode=none priority=0x8000 auto-mac=yes 
      admin-mac=00:00:00:00:00:00 max-message-age=20s forward-delay=15s 
      transmit-hold-count=6 ageing-time=5m 
[admin@Our_GW] interface bridge> port add bridge=bridge1 interface=eoip-remote
[admin@Our_GW] interface bridge> port add bridge=bridge1 interface=office-eth
[admin@Our_GW] interface bridge> port print
Flags: X - disabled, I - inactive, D - dynamic
 #    INTERFACE      BRIDGE  PRIORITY PATH-COST
 0    eoip-remote    bridge1 128      10
 1    office-eth     bridge1 128      10
[admin@Our_GW] interface bridge>
Run Code Online (Sandbox Code Playgroud)

...和远程路由器:

[admin@Remote] interface bridge> add 
[admin@Remote] interface bridge> print
Flags: X - disabled, R - running
 0  R name="bridge1" mtu=1500 arp=enabled mac-address=00:00:00:00:00:00 
      protocol-mode=none priority=0x8000 auto-mac=yes 
      admin-mac=00:00:00:00:00:00 max-message-age=20s forward-delay=15s 
      transmit-hold-count=6 ageing-time=5m 
[admin@Remote] interface bridge> port add bridge=bridge1 interface=ether
[admin@Remote] interface bridge> port add bridge=bridge1 interface=eoip-main
[admin@Remote] interface bridge> port print
Flags: X - disabled, I - inactive, D - dynamic
 #    INTERFACE      BRIDGE  PRIORITY PATH-COST
 0    ether          bridge1 128      10
 1    eoip-main      bridge1 128      10     
[admin@Remote] interface bridge>
Run Code Online (Sandbox Code Playgroud)

现在两个站点都在同一个二层广播域中。您可以在两个站点上设置来自同一网络的 IP 地址。

并且您还需要设置IPSec。 更多信息在这里

请记住,IPsec 虽然是目前在 Mikrotik 上进行通信的最安全方式,但除非您的路由器具有硬件加速功能,否则它会占用大量 CPU。因此,如果您使用的是简单的路由器板,则不要期望超过 10-15 兆位的吞吐量。

如果您的路由器具有动态互联网 IP,那么您将需要使用MikroTik的IP > Cloud 功能来获取动态 DNS,然后使用这些 DynDNS 和一些脚本来自动更新 EoIP 隧道和 IPsec 对等点和策略上的 IP公共 IP 更改。

最后,我假设您与 Internet 的连接最多具有 1500 字节的 MTU。使用隧道和 EoIP,您需要将 EoIP 隧道接口 MTU 降低到 1400 字节(您最好进行一些测试以找出设置/流量的最佳值)。
对于我的设置/流量,我使用 1400 字节。不幸的是,由于 IPsec 的性质取决于数据包的大小,开销是可变的,因此您不能总是从中获得最大收益。

  • L2TP 不转发以太网帧,因此它不适用于此用例。Mikrotik 上的 OpenVPN 也很糟糕。它不支持 UDP 和 LZO,所以它在性能方面几乎没有用,这就是为什么我没有建议这个解决方案。在任何情况下,EoIP 对 CPU 的要求都非常低,因为它只是封装了数据包(就像 GRE 那样)。它本身不进行任何加密(例如,这就是在 OpenVPN 中占用 CPU 的原因)。 (2认同)