这个包怎么办?(路由到本地网络上的机器)

网络工程 路由
2021-08-03 12:38:56

嗨网络工程,

我的网络设计有问题。我的目标是在网关设备后面有两个网络。“Circle1”将包含我面向 Internet 的代理服务器,“Circle2”将包含任意数量的应用服务器。“Cirle1”应该直接连接到“Circle2”。这在大多数情况下效果很好。然而,我遇到了一个问题,即任何源自“Circle2”且目标为“Circle1”上机器的 PUBLIC 接口的数据包似乎在某处脱落。

令人沮丧的是,我对所有点的数据包捕获显示数据包至少离开网关服务器绑定到 172.16.0.100 但没有显示进入该服务器的任何数据包它们在stdout运行时没有显示tcpdump但它们确实显示使用wireshark后查看转储时向上。

问题

这是我的网络架构或配置问题的结果吗?是否不允许数据包进入机器的接口,该机器已经有一个不同的接口在源网络上侦听?

一些快速说明:

  1. 所有主机都运行 CentOS 7
  2. 出于故障排除目的禁用 SELinux
  3. 除了包含 1 个规则 ( iptables -t nat -I POSTROUTING -s 10.0.0.0/8 -o enp0s3 -j MASQUERADE)的网关外,iptables 已被刷新
  4. 我在 virtualbox 上运行并且没有尝试在物理主机上确认这个配置:-/抱歉没有足够的机器。

快速网络图 注意:在非实验室环境中,红色地址应替换为面向公众的 IP 地址

问题: 未收到从 10.1.0.0/24 到 172.16.0.100 的流量。

调试步骤:

  1. 设置一个类似于上图中所示的网络。
  2. ping 172.16.0.100从位于 10.1.0.101 的应用服务器执行
  3. 来自所有网络的流量也是如此,以确保没有路由错误。

预期成绩:

  1. 应用服务器将通过默认网关 (10.1.0.1) 将 ICMP 数据包发送到 Web 代理服务器 (172.16.0.100)
  2. 默认网关会将数据包发送到 Web 代理服务器 (172.16.0.100)
  3. Web 代理服务器将接受 ICMP 数据包 [source-ip 10.1.0.101;目标 IP 172.16.0.100]
  4. web代理服务器会生成一个ICMP回复包[source-ip 172.16.0.100;目标 IP 10.1.0.101]
  5. Web 代理服务器将生成的数据包通过 enp0s8 直接发送到应用服务器

实际结果:

  1. 应用服务器通过默认网关(10.1.0.1)将ICMP数据包发送到Web代理服务器(172.16.0.100)
  2. 默认网关将数据包发送到 Web 代理服务器 (172.16.0.100)
  3. Web 代理似乎没有收到数据包(tcpdump -i enp0s3没有显示任何进入系统的数据包)
  4. 编辑第 3 步看起来数据包确实进入了代理服务器,但该tcpdump命令没有在标准输出中显示它,它在使用-w选项时确实显示了它。我很困惑。

调试工具输出:

  1. 脚本ip addr && ip route输出app-server , gateway-server , proxy-server

  2. Wireshark 兼容数据包捕获 proxy-enp0s3 , proxy-enp0s8 (empty), gateway-enp0s8 , gateway-enp0s9

感谢那些花时间尝试帮助我的人。我对相当冗长的格式深表歉意。

由于 tcpdump 引起的混乱,需要更多的测试

tcpdump -w cap确实显示了我期望的所有数据包,而tcpdump没有通过标准输出显示任何数据包然而,它确实显示了内核丢弃的大量数据包。无论运行时或使用-B 4096扩展 tcpdump 缓冲区,都会发生这种情况操作系统拒绝数据包似乎很明显,但我不确定为什么。(在管道到标准输出后关闭时 tcpdump 会短暂挂起,但我不确定这是否相关)

1个回答

我又花了几个小时在谷歌上搜索,并在 Red Hat 的网站上找到了相应的支持文档:https : //access.redhat.com/solutions/53031

事实证明,默认情况下,Red Hat 6+ 将过滤非对称路由的数据包。

解决方案是要使此行为在重新启动后持续存在,请修改 /etc/sysctl.conf 并在重新启动之前进行以下更改:

net.ipv4.conf.default.rp_filter = 2