描述
10.223.0.7
我的目标是从机器 A ( 10.101.0.40
) ping 机器 C ( )
我有 2 个网络和 3 台机器
网络A:
10.223.0.0/24
网络B:
10.101.0.0/16
机器 A(“pinger”):(
10.101.0.40
在 eth5 上)机器 B(“路由器”):(
10.101.2.97
在 ens7 上)和10.223.0.1
(在 wg0 上)机器 C(“被 ping 的”):(
10.223.0.7
在 wg0 上)我已在机器 B 上全局启用 IP 转发,并在 ens7 和 wg0 接口上启用
我的防火墙正在接受机器 B 上的转发规则。
我在机器 B 上添加了这条规则:
iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE
以启用伪装我在机器 A 上添加了此规则
ip route add 10.223.0.0/24 via 10.101.2.97 dev eth5
来路由数据包
测试
当我启动 ping 时,我可以看到以下内容tcpdump -nni any icmp
:
机器 A:
18:16:12.976724 eth5 Out IP 10.101.1.40 > 10.223.0.7: ICMP echo request, id 7373, seq 1065, length 64
机器B:
18:16:12.977241 ens7 In IP 10.101.1.40 > 10.223.0.7: ICMP echo request, id 7373, seq 1065, length 64
18:16:12.977287 wg0 Out IP 10.223.0.1 > 10.223.0.7: ICMP echo request, id 7373, seq 1065, length 64
18:16:12.978201 wg0 In IP 10.223.0.7 > 10.223.0.1: ICMP echo reply, id 7373, seq 1065, length 64
18:16:12.978217 ens7 Out IP 10.223.0.7 > 10.101.1.40: ICMP echo reply, id 7373, seq 1065, length 64
机器 C
18:16:12.977754 wg0 In IP 10.223.0.1 > 10.223.0.7: ICMP echo request, id 7373, seq 1065, length 64
18:16:12.977767 wg0 Out IP 10.223.0.7 > 10.223.0.1: ICMP echo reply, id 7373, seq 1065, length 64
并且机器 A 没有收到任何响应。
我认为问题出在机器 B 日志的第 4 行。SRC IP 是,10.223.0.7
但在我看来应该是10.101.2.97
,ens7 网络上机器 B 的 IP。我完全不知道为什么会这样。
我尝试添加这个伪装规则iptables -t nat -A POSTROUTING -o ens7 -j MASQUERADE
但正如预期的那样:它不起作用。
问题
为什么伪装对请求起作用(参见机器 B 的第二行),而对响应不起作用(参见机器 B 的第 4 行)?
找到了。
第四行对我来说看起来很奇怪,但多亏@larsks 的设置,我意识到它很好。
ens7 网络背后的技术是 openstack。私有网络正在阻止数据包。
我已经在我的 OpenStack 堡垒上运行了这些命令:
其中,being
a1a[...]669
为MachineB的ens7对应的端口号并且 ping 很快就恢复正常。