Networking

客戶端未收到來自網關 (OpenStack) 的響應

  • January 26, 2018

我正在嘗試使用 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通,所以它們之間的區域網路連接沒有問題。但是,如果我嘗試從客戶端 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 -vnLiptables -vnL在客戶端上不顯示任何規則。

好吧,似乎我對 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

請注意,這實際上會禁用整個防火牆。

引用自:https://serverfault.com/questions/894246