嗨网络工程,
我的网络设计有问题。我的目标是在网关设备后面有两个网络。“Circle1”将包含我面向 Internet 的代理服务器,“Circle2”将包含任意数量的应用服务器。“Cirle1”应该直接连接到“Circle2”。这在大多数情况下效果很好。然而,我遇到了一个问题,即任何源自“Circle2”且目标为“Circle1”上机器的 PUBLIC 接口的数据包似乎在某处脱落。
令人沮丧的是,我对所有点的数据包捕获显示数据包至少离开网关服务器绑定到 172.16.0.100 但没有显示进入该服务器的任何数据包它们在stdout运行时没有显示tcpdump但它们确实显示使用wireshark后查看转储时向上。
问题
这是我的网络架构或配置问题的结果吗?是否不允许数据包进入机器的接口,该机器已经有一个不同的接口在源网络上侦听?
一些快速说明:
- 所有主机都运行 CentOS 7
- 出于故障排除目的禁用 SELinux
- 除了包含 1 个规则 (
iptables -t nat -I POSTROUTING -s 10.0.0.0/8 -o enp0s3 -j MASQUERADE)的网关外,iptables 已被刷新 - 我在 virtualbox 上运行并且没有尝试在物理主机上确认这个配置:-/抱歉没有足够的机器。
注意:在非实验室环境中,红色地址应替换为面向公众的 IP 地址
问题: 未收到从 10.1.0.0/24 到 172.16.0.100 的流量。
调试步骤:
- 设置一个类似于上图中所示的网络。
ping 172.16.0.100从位于 10.1.0.101 的应用服务器执行。- 来自所有网络的流量也是如此,以确保没有路由错误。
预期成绩:
- 应用服务器将通过默认网关 (10.1.0.1) 将 ICMP 数据包发送到 Web 代理服务器 (172.16.0.100)
- 默认网关会将数据包发送到 Web 代理服务器 (172.16.0.100)
- Web 代理服务器将接受 ICMP 数据包 [source-ip 10.1.0.101;目标 IP 172.16.0.100]
- web代理服务器会生成一个ICMP回复包[source-ip 172.16.0.100;目标 IP 10.1.0.101]
- Web 代理服务器将生成的数据包通过 enp0s8 直接发送到应用服务器
实际结果:
- 应用服务器通过默认网关(10.1.0.1)将ICMP数据包发送到Web代理服务器(172.16.0.100)
- 默认网关将数据包发送到 Web 代理服务器 (172.16.0.100)
Web 代理似乎没有收到数据包(tcpdump -i enp0s3没有显示任何进入系统的数据包)- 编辑第 3 步看起来数据包确实进入了代理服务器,但该
tcpdump命令没有在标准输出中显示它,它在使用-w选项时确实显示了它。我很困惑。
调试工具输出:
脚本
ip addr && ip route输出app-server , gateway-server , proxy-serverWireshark 兼容数据包捕获 proxy-enp0s3 , proxy-enp0s8 (empty), gateway-enp0s8 , gateway-enp0s9
感谢那些花时间尝试帮助我的人。我对相当冗长的格式深表歉意。
由于 tcpdump 引起的混乱,需要更多的测试
tcpdump -w cap确实显示了我期望的所有数据包,而tcpdump没有通过标准输出显示任何数据包。然而,它确实显示了内核丢弃的大量数据包。无论运行时或使用-B 4096扩展 tcpdump 缓冲区,都会发生这种情况。操作系统拒绝数据包似乎很明显,但我不确定为什么。(在管道到标准输出后关闭时 tcpdump 会短暂挂起,但我不确定这是否相关)