我有路由问题。
我有 2 个公共子网:172.31.1.0/24 和 172.31.100.0/24
在每一个中,我都有一个 NAT 实例。每个 NAT 实例都是远程位置的 OpenSwan VPN 对等体。这允许以下 VPN 连接:
172.31.1.0/24 -> 192.168.1.0/24
172.31.100.0/24 -> 192.168.100.0/24
我设置了一个与我的两个公共子网关联的路由表。这包括如下路由条目:
192.168.1.0/24 Target = NAT instance 1
192.168.100.0/24 Target = NAT instance 2
前者一切正常,但无论我做什么,后者的路由表条目都不起作用。
我为 NAT 实例 2 设置的路由无效。当我跟踪路由到 192.168.100.0/24 中的任何地址时,数据包被直接发送到 192.168.100.0/24(因此失败),而不是通过 NAT 实例 2 路由。
我以为路由表中并发 NAT 实例的数量可能存在限制,但即使我删除了到 192.168.1.0 的路由,所以唯一存在的路由是通过 NAT 实例 2 的路由,它仍然没有不工作。
我检查了所有常见的东西(Src/Dst 检查等),但似乎没有什么不合适的。所有这些都是使用 CloudFormation 创建的,因此不太可能出现手动错误。
对此的解决方案非常简单,但它引发了一个有趣的观察。使用 traceroute 来调试路由问题。
问题的根源是我没有在除 Nat Instance 1 之外的任何主机上启用 ip 转发。
IE
当我调试时,我一直在使用 traceroute 命令,例如
当 Nat 实例 2 上未启用 ip 转发时,这会产生以下响应:
当我在 Nat 实例 2 上启用 ip 转发时,响应发生了变化:
(172.31.100.102 = 自然实例 2)
这表明虽然 traceroute 可能知道到特定网络的特定路由,但它只会在该路由的默认网关上允许路由时报告尝试遵循该路由。
如果不是,它将尝试遵循默认路由并仅报告默认路由的成功或失败。我确信这与 traceroute 的设计是一致的,但可能表明 traceroute 可能不是调试路由问题的最佳工具(它更像是调试网络问题的工具)。