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

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

我想要实现的目标

我想安全地将现有的内部子网扩展到多栋建筑。这意味着我有两个位置的虚拟机需要位于同一子网内。这个想法是虚拟机(具有静态 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 隧道。

好的,现在我们至少有了一些隧道接口,我们可以将其用作传出端口。但是,我有点迷茫了。我找不到这样的说法:“传入的帧必须通过接口发送出去”和“传入的帧必须通过接口发送出去”。

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

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

以防万一,这次尝试是死路一条:我还在“接口”设置中找到了“EoIP”、“IP 隧道”和“GRE 隧道”。但我真的不知道它们能做什么……所以,以防万一,请告诉我其中哪些值得调查……

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

答案1

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

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

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

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

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

MikroTik 官方文档此场景已经记录在案(IPsec 加密除外)。

假设我们想要桥接两个网络:“办公室局域网”和“远程局域网”。通过使用 EoIP 设置,可以使得办公室局域网和远程局域网位于同一个第 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>

... 以及远程路由器

[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>

下一步是在我们的 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>

...和远程路由器:

[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>

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

您还需要设置 IPSec。 更多信息请点击此处

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

如果你的路由器有动态互联网 IP,那么你将需要使用IP > 云功能MikroTik 获得动态 DNS,然后使用这些 DynDNS 和一些脚本在公共 IP 发生变化时自动更新 EoIP 隧道和 IPsec 对等点上的 IP 和策略。

最后,我假设您与互联网的连接的最大 MTU 为 1500 字节。使用隧道和 EoIP 时,您需要将 EoIP 隧道接口 MTU 降低到 1400 字节的范围内(您最好进行一些测试以找出最适合您的设置/流量的值)。
对于我的设置/流量,我使用 1400 字节。不幸的是,由于 IPsec 的性质取决于您的数据包的大小,开销是可变的,因此您无法始终充分利用它。

相关内容