Networking
客戶端未收到來自網關 (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通,所以它們之間的區域網路連接沒有問題。但是,如果我嘗試從客戶端 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
在客戶端上不顯示任何規則。
好吧,似乎我對 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
請注意,這實際上會禁用整個防火牆。