客户端未收到来自网关的响应(OpenStack)

客户端未收到来自网关的响应(OpenStack)

我正在尝试使用 Ubuntu 盒子作为我的 LAN 的网关。这是我的设置:

  • Ubuntu 网关
    • ens3:WAN 10.0.10.163 网络掩码 255.255.255.224
    • ens4:LAN 10.0.10.231 网络掩码 255.255.255.224
  • Ubuntu 客户端
    • ens3:LAN 10.0.10.238 网络掩码 255.255.255.224

net.ipv4.conf.ip_forward已在 Ubuntu 网关上启用。以下是网关上已实施的 iptables 规则:

iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
iptables -A FORWARD -i ens4 -j ACCEPT

网关的路由表:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.10.161     0.0.0.0         UG    0      0        0 ens3
10.0.10.160     0.0.0.0         255.255.255.224 U     0      0        0 ens3
10.0.10.224     0.0.0.0         255.255.255.224 U     0      0        0 ens4
169.254.169.254 10.0.10.161     255.255.255.255 UGH   0      0        0 ens3

客户端的路由表:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.10.231     0.0.0.0         UG    0      0        0 ens3
10.0.10.224     0.0.0.0         255.255.255.224 U     100    0        0 ens3
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 ens3
169.254.169.254 10.0.10.225     255.255.255.255 UGH   100    0        0 ens3

两台机器都可以互相 ping 通,因此它们之间的 LAN 连接没有问题。但是,如果我尝试从客户端 ping 8.8.8.8,它会显示 100% 的数据包丢失,并且 LAN 接口上的 tcpdump 没有显示 ping 响应。但是,如果我在网关上执行 tcpdump,它会显示来自客户端的回显请求和回显响应:

user@snort-id:~$ sudo tcpdump -i ens4 icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens4, link-type EN10MB (Ethernet), capture size 262144 bytes
13:33:08.503943 IP 10.0.10.238 > google-public-dns-a.google.com: ICMP echo request, id 4424, seq 1, length 64
13:33:08.507787 IP google-public-dns-a.google.com > 10.0.10.238: ICMP echo reply, id 4424, seq 1, length 64
13:33:09.526402 IP 10.0.10.238 > google-public-dns-a.google.com: ICMP echo request, id 4424, seq 2, length 64
13:33:09.530203 IP google-public-dns-a.google.com > 10.0.10.238: ICMP echo reply, id 4424, seq 2, length 64
13:33:10.551124 IP 10.0.10.238 > google-public-dns-a.google.com: ICMP echo request, id 4424, seq 3, length 64
13:33:10.554807 IP google-public-dns-a.google.com > 10.0.10.238: ICMP echo reply, id 4424, seq 3, length 64

因此,仅从 tcpdump 来看,转发似乎正在工作。但是,客户端没有收到任何响应。我不确定这是否重要,但网关和客户端都在 OpenStack 上运行。

非常感谢任何对此提供的帮助。

编辑:根据要求:

网关的 Iptables 输出:

user@snort-id:~$ sudo iptables -t nat -vnL
Chain PREROUTING (policy ACCEPT 541 packets, 37916 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain INPUT (policy ACCEPT 9 packets, 840 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 43 packets, 33087 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain POSTROUTING (policy ACCEPT 23 packets, 31668 bytes)
 pkts bytes target     prot opt in     out     source               destination
  493 31309 MASQUERADE  all  --  *      ens3    0.0.0.0/0            0.0.0.0/0


user@snort-id:~$ sudo iptables -vnL
Chain INPUT (policy ACCEPT 1938 packets, 132K bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 1754 packets, 238K bytes)
 pkts bytes target     prot opt in     out     source               destination
 1754  110K ACCEPT     all  --  ens4   *       0.0.0.0/0            0.0.0.0/0

Chain OUTPUT (policy ACCEPT 1250 packets, 168K bytes)
 pkts bytes target     prot opt in     out     source               destination

两者在客户端iptables -t nat -vnL均不显示任何规则。iptables -vnL

答案1

好吧,看来我错了,OpenStack(在我的情况下是 Devstack)不会导致问题。默认情况下,Devstack 使用一些反 IP 和 MAC 欺骗措施。为此,它在 Devstack 主机上创建 iptables 规则,导致从网关到客户端的响应数据包被丢弃。为了解决这个问题,我在 Devstack 中添加了以下几行local.conf

Q_USE_SECGROUP=False

[[post-config|$NOVA_CONF]]
[DEFAULT]
security_group_api=nova
firewall_driver=nova.virt.firewall.NoopFirewallDriver

请注意,这实际上会禁用整个防火墙。

相关内容