一个端口 2 个外部 IP 链接到 MAC,由 LAN 端口分割

一个端口 2 个外部 IP 链接到 MAC,由 LAN 端口分割

提供商在一个端口上发布与设备 MAC 地址关联的 2 个静态地址。是否可以将 Mikrotik 路由器的端口划分为通过每个地址进行流量交换?

例如:

WAN (ether1 port):
192.0.2.11 (gateway 192.0.2.1) MAC 11:11:11:11:11:11
192.0.2.12 (gateway 192.0.2.1) MAC 11:11:11:11:11:12

我希望 ether2、ether3、wlan1、wlan2 位于 192.0.2.11 上,而 ether4、ether5 位于 192.0.2.12 上

答案1

实现此目的最简单、最干净的方法是将本地网络分成两个私有子网。让一个子网中的机器使用块192.168.51.0/24,第二个子网将是192.168.52.0/24

为此,您可以使用指定的接口构建两个网桥:

interface/bridge/add name=bridge1 protocol-mode=none
interface/bridge/port/add bridge=bridge1 interface=ether2 hw=yes
interface/bridge/port/add bridge=bridge1 interface=ether3 hw=yes
interface/bridge/port/add bridge=bridge1 interface=wlan1
interface/bridge/port/add bridge=bridge1 interface=wlan2

interface/bridge/add name=bridge2 protocol-mode=none
interface/bridge/port/add bridge=bridge1 interface=ether4
interface/bridge/port/add bridge=bridge1 interface=ether5

interface/list/add name=LAN
interface/list/member/add list=LAN interface=bridge1
interface/list/member/add list=LAN interface=bridge2

但是请注意,您不能在两个网桥上使用硬件卸载交换,因为它们共享一个交换芯片。

然后分配 IP 地址:两个公用地址都指向 WAN 接口,私有地址指向每个网桥。我会在每个网络中给它们第一个地址:

ip/address/add address=192.0.2.11/24 interface=ether1
ip/address/add address=192.0.2.12/24 interface=ether1
ip/route/add gateway=192.0.2.1
ip/address/add address=192.168.51.1/24 interface=bridge1
ip/address/add address=192.168.52.1/24 interface=bridge1

魔法出现的方式如下:masquerade我们不使用通用规则,而是src-nat为每个私有子网使用单独的规则:

ip/firewall/nat/add chain=srcnat action=src-nat src-address=192.168.51.0/24 to-addresses=192.0.2.11
ip/firewall/nat/add chain=srcnat action=src-nat src-address=192.168.52.0/24 to-addresses=192.0.2.12

确保删除所有其他srcnat规则。

原则上,这是最小可行配置。两个私有子网中的系统将能够相互通信。但是,当它们连接到互联网时,第一个子网中的系统将显示为192.0.2.11,而第二个子网中的系统将使用192.0.2.12

您必须为连接到第一个子网的计算机(端口、、和)分配192.168.51.X子网掩码/24=形式的地址。您可能希望为此使用 DHCP 服务器:255.255.255.0ether2ether3wlan1wlan2

ip/pool/add name=lan-51 ranges=192.168.51.0/24
ip/dhcp-server/add name=dhcp-51 address-pool=lan-51 interface=bridge1
ip/dhcp-server/network/add address=192.168.51.0/24 gateway=192.168.51.1 dns-server=192.168.51.1

为了实现此功能,您的路由器应启用远程请求。如果您想将 DHCP 添加到第二个子网,则需要进行类似的设置。

您可能还想构建防火墙,设置本地 DNS。如果您需要从 Internet 访问本地子网中的任何资源,只需dst-nat照常添加规则即可。


还有另一种方法。它不需要您将网络一分为二。但是,您需要不断更新地址列表,以指定谁映射到哪个公共地址:

ip/address/add address=192.0.2.11/24 interface=ether1
ip/address/add address=192.0.2.12/24 interface=ether1
ip/route/add gateway=192.0.2.1
ip/firewall/nat/add chain=srcnat action=src-nat src-address-list=mapped-to-11 to-addresses=192.0.2.11
ip/firewall/nat/add chain=srcnat action=src-nat src-address-list=mapped-to-12 to-addresses=192.0.2.12
ip/firewall/address-list/add list=mapped-to-11 address=192.168.88.15
ip/firewall/address-list/add list=mapped-to-11 address=192.168.88.16
ip/firewall/address-list/add list=mapped-to-11 address=192.168.88.17
...
ip/firewall/address-list/add list=mapped-to-12 address=192.168.88.25
ip/firewall/address-list/add list=mapped-to-12 address=192.168.88.26
...

这很快就会变得无聊。有一种方法可以根据端口自动执行此操作,但它很复杂,需要高级脚本(脚本必须识别 DHCP 请求来自哪个端口并填写相应地址列表中的条目),我宁愿不这样做。最优雅的方法是拥有两个网络。未映射的地址(不存在于任何列表中)将无法访问互联网。

如果映射到第二个公有 IP 地址的私有 IP 地址列表相对稳定,则可以使用第一个地址作为“默认”条目,而只使用一个列表:

ip/firewall/nat/add chain=srcnat action=src-nat src-address-list=mapped-to-12 to-addresses=192.0.2.12
ip/firewall/nat/add chain=srcnat action=src-nat to-addresses=192.0.2.11
ip/firewall/address-list/add list=mapped-to-12 address=192.168.88.25
ip/firewall/address-list/add list=mapped-to-12 address=192.168.88.26
...

规则的顺序很重要:它将首先检查站点是否在列表中,如果在,它将把它 NAT 到第二个公共 IP 并完成此链处理,但如果站点不在列表中,它将被映射到第一个公共地址。

请注意,任何地方都没有出现 MAC 地址。因为任何地方都不需要它,所以您定义的问题完全在第 3 层。此外,您只需为路由器本身指定一次默认路由;无需为“每个公共地址”指定网关。

相关内容