Mikrotik 将 VPN 数据包路由到错误的接口

Mikrotik 将 VPN 数据包路由到错误的接口

我正在尝试使用静态 IP AWS VPN 将我的网络连接到 AWS VPC。我已按照 AWS 的说明正确配置了我的 MikroTik 路由器,并且可以 ping 我在此 VPC 中连接的 Ubuntu 实例。由于我的 MikroTik 中有 2 个 ISP,因此我在 AWS 中配置了另一个 VPN,并决定在我的 Ubuntu AWS 实例上使用不同子网中的两个接口:

$ ifconfig
eth0      Link encap:Ethernet  HWaddr 0A:72:28:AF:C7:CE  
          inet addr:192.168.254.4  Bcast:192.168.254.15  Mask:255.255.255.240
          inet6 addr: fe80::872:28ff:feaf:c7ce/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:9001  Metric:1
          RX packets:24297 errors:0 dropped:0 overruns:0 frame:0
          TX packets:21627 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:7074474 (6.7 MiB)  TX bytes:2362441 (2.2 MiB)

eth1      Link encap:Ethernet  HWaddr 0A:A2:0F:7C:75:FC  
          inet addr:192.168.254.20  Bcast:192.168.254.31  Mask:255.255.255.240
          inet6 addr: fe80::8a2:fff:fe7c:75fc/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:9001  Metric:1
          RX packets:24996 errors:0 dropped:0 overruns:0 frame:0
          TX packets:25227 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:2307467 (2.2 MiB)  TX bytes:5382812 (5.1 MiB)

现在,即使我在启动端正确配置了两个 VPN,一次也只有一个 VPN 有效。例如:假设名为aws-main配置为使用 192.168.254.0/28 子网和 VPNaws-备份配置为与 192.168.254.16/28 子网一起工作,如果我想 ping ip 192.168.254.4,我需要禁用路由 #2,如果我想 ping ip 192.168.254.20,我需要禁用路由 #1

#      DST-ADDRESS        PREF-SRC        GATEWAY            DISTANCE
1 A S  ;;; ISP 1
    0.0.0.0/0                          yyy.yyy.yyy.yyy           1
2   S  ;;; ISP 2
    0.0.0.0/0                          zzz.zzz.zzz.zzz           1
4 ADC  yyy.yyy.yyy.0/24    y.y.y.y        ether3                 0
6 ADC  zzz.zzz.zzz.0/30    z.z.z.z        ether2                 0
9 ADC  192.168.15.0/24    192.168.15.254  ether5                 0

如果我在路由 #1 和 #2 都启用的情况下尝试 ping 192.168.254.20,我可以在日志中看到以下消息:

backup-out srcnat in:(unknown 0) out:ether3, src-mac xxx, proto ICMP(type 8,code 0), 192.168.15.31 ->192.168.254.20, len 84

Mikrotik 将数据包路由到 ether3,而不是 ether2(VPN 的正确网关aws-备份),我认为这是问题所在,但我不知道如何强制它纠正界面。

/ip firewall nat> print
0    chain=srcnat action=accept src-address=192.168.15.0/24 
  dst-address=192.168.254.0/28 log=yes log-prefix="main-out" 

1    chain=srcnat action=accept src-address=192.168.15.0/24 
  dst-address=192.168.254.16/28 log=yes log-prefix="backup-out" 

2    chain=srcnat action=accept src-address=192.168.254.0/28 
  dst-address=192.168.15.0/24 log=yes log-prefix="main-in" 

3    chain=srcnat action=accept src-address=192.168.254.16/28 
  dst-address=192.168.15.0/24 log=yes log-prefix="backup-in" 

4    chain=srcnat action=masquerade log=no log-prefix="masquerade"

这些是政策:

0  A  ;;; AWS Tunnel 2 - BACKUP
   src-address=0.0.0.0/0 src-port=any dst-address=192.168.254.16/28 
   dst-port=any protocol=all action=encrypt level=require 
   ipsec-protocols=esp tunnel=yes sa-src-address=zzz.zzz.zzz.zzz 
   sa-dst-address=x.x.x.x proposal=AWS ph2-count=9 

2  A  ;;; AWS Tunnel 1 - MAIN
   src-address=0.0.0.0/0 src-port=any dst-address=192.168.254.0/28 
   dst-port=any protocol=all action=encrypt level=require 
   ipsec-protocols=esp tunnel=yes sa-src-address=yyy.yyy.yyy.yyy 
   sa-dst-address=K.K.K.K proposal=AWS ph2-count=8

至少对我来说,mikrotik 没有使用正确的子网将 VPN 数据包路由到正确的网关。这是问题吗?我该如何解决这个问题?

答案1

我认为您不需要 BGP,正如评论中所建议的那样,因为子网是独立的。

您需要的是 Mikrotik 中的源路由(又名基于策略的路由):

https://wiki.mikrotik.com/wiki/Policy_Base_Routing

原则上你必须:

  • 在 PREROUTING 链中创建一个 mangle 规则,该规则与发往某个子网的数据包匹配
  • 使用唯一的路由标记
  • 为所有匹配该路由标记的数据包添加一条路由,以使用相应的 VPN 作为网关

对第二个子网+VPN 重复该过程。

相关内容