<div dir="ltr"><div dir="ltr">Hi,<div><br></div><div>Thanks for the messages.</div><div><br></div><div>> You should check where exactly Your packets are dropped.</div><div>I am communicating with our Linux systems engineers to learn</div><div>how I can find out which rule is dropping the packets.</div><div>In the meantime, which method would you recommend for this purpose?</div><div><br>> Also, You didn't tell us what is the type of the Neutron network to which<br>> Your VM is plugged and </div><div>The VM is plugged to a provider network.</div><div><br></div><div>> how bridges are done on Your compute node.<br></div></div><div>We are using Linux Bridges.</div><div><br></div><div>Are there any more/other information that I should provide?</div><div><br></div><div>Thanks,</div><div>Hyunwoo</div><div>Application developer at Fermilab.</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Dec 7, 2020 at 3:33 PM Slawek Kaplonski <<a href="mailto:skaplons@redhat.com">skaplons@redhat.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi,<br>
<br>
On Mon, Dec 07, 2020 at 10:11:19AM -0600, Hyunwoo KIM wrote:<br>
> Summary of the problem<br>
> <br>
> This problem is in a compute node, not in a VM.<br>
> <br>
> Once a VM is running in a compute node,<br>
> <br>
> all outbound connections in a compute node (not VM) are blocked.<br>
> <br>
> For example:<br>
> <br>
> # telnet <a href="http://www.google.com" rel="noreferrer" target="_blank">www.google.com</a> 80<br>
> <br>
> Trying 172.217.5.4...<br>
> <br>
> <br>
> <br>
> Technical Details:<br>
> <br>
> We only use provider network.<br>
> <br>
> These 4 services are running  in each compute node:<br>
> <br>
> - neutron-linuxbridge-agent.service<br>
> <br>
> - neutron-dhcp-agent.service<br>
> <br>
> - neutron-metadata-agent.service<br>
> <br>
> - openstack-nova-compute.service<br>
> <br>
> <br>
> <br>
> Detailed description of the problem:<br>
> <br>
> <br>
> In a compute node, the following is the result of iptables -L when no VM is<br>
> running:<br>
> <br>
> <br>
> <begin><br>
> <br>
> Chain INPUT (policy ACCEPT)<br>
> <br>
> target     prot opt source               destination<br>
> <br>
> neutron-linuxbri-INPUT  all  --  anywhere anywhere<br>
> <br>
> And our usual rules<br>
> <br>
> <br>
> Chain FORWARD (policy ACCEPT)<br>
> <br>
> target     prot opt source               destination<br>
> <br>
> neutron-filter-top        all -- anywhere anywhere<br>
> <br>
> neutron-linuxbri-FORWARD  all -- anywhere anywhere<br>
> <br>
> <br>
> Chain OUTPUT (policy ACCEPT)<br>
> <br>
> target     prot opt source               destination<br>
> <br>
> neutron-filter-top       all -- anywhere anywhere<br>
> <br>
> neutron-linuxbri-OUTPUT  all -- anywhere anywhere<br>
> <br>
> <br>
> Chain neutron-filter-top (2 references)<br>
> <br>
> target     prot opt source               destination<br>
> <br>
> neutron-linuxbri-local  all -- anywhere anywhere<br>
> <br>
> <br>
> Chain neutron-linuxbri-FORWARD (1 references)<br>
> <br>
> target prot opt source               destination<br>
> <br>
> ACCEPT all  --  anywhere anywhere PHYSDEV match --physdev-out tapb<br>
> --physdev-is-bridged<br>
> <br>
> ACCEPT all  --  anywhere anywhere PHYSDEV match --physdev-in  tapb<br>
> --physdev-is-bridged<br>
> <br>
> ACCEPT all  --  anywhere anywhere PHYSDEV match --physdev-out tap9<br>
> --physdev-is-bridged<br>
> <br>
> ACCEPT all  --  anywhere anywhere PHYSDEV match --physdev-in  tap9<br>
> --physdev-is-bridged<br>
> <br>
> <br>
> Chain neutron-linuxbri-INPUT (1 references)<br>
> <br>
> target     prot opt source               destination<br>
> <br>
> <br>
> Chain neutron-linuxbri-OUTPUT (1 references)<br>
> <br>
> target     prot opt source               destination<br>
> <br>
> <br>
> Chain neutron-linuxbri-local (1 references)<br>
> <br>
> target     prot opt source               destination<br>
> <br>
> <br>
> Chain neutron-linuxbri-sg-chain (0 references)<br>
> <br>
> target     prot opt source               destination<br>
> <br>
> ACCEPT     all  --  anywhere             anywhere<br>
> <br>
> <br>
> Chain neutron-linuxbri-sg-fallback (0 references)<br>
> <br>
> target     prot opt source               destination<br>
> <br>
> DROP       all  --  anywhere             anywhere<br>
> <br>
> </end><br>
> <br>
> <br>
> <br>
> In the same compute node, when a VM is running,<br>
> <br>
> the following is the result of iptables -L:<br>
> <br>
> <br>
> <br>
> <begin><br>
> <br>
> Chain INPUT (policy ACCEPT)<br>
> <br>
> target     prot opt source               destination<br>
> <br>
> neutron-linuxbri-INPUT  all  --  anywhere anywhere<br>
> <br>
> And our usual rules<br>
> <br>
> <br>
> Chain FORWARD (policy ACCEPT)<br>
> <br>
> target     prot opt source               destination<br>
> <br>
> neutron-filter-top        all -- anywhere anywhere<br>
> <br>
> neutron-linuxbri-FORWARD  all -- anywhere anywhere<br>
> <br>
> <br>
> Chain OUTPUT (policy ACCEPT)<br>
> <br>
> target     prot opt source               destination<br>
> <br>
> neutron-filter-top       all -- anywhere anywhere<br>
> <br>
> neutron-linuxbri-OUTPUT  all -- anywhere anywhere<br>
> <br>
> <br>
> Chain neutron-filter-top (2 references)<br>
> <br>
> target     prot opt source               destination<br>
> <br>
> neutron-linuxbri-local  all  --  anywhere             anywhere<br>
> <br>
> <br>
> Chain neutron-linuxbri-FORWARD (1 references)<br>
> <br>
> target     prot opt source               destination<br>
> <br>
> neutron-linuxbri-sg-chain all -- anywhere anywhere PHYSDEV match<br>
> --physdev-out tap8 --physdev-is-bridged<br>
> <br>
> neutron-linuxbri-sg-chain all -- anywhere anywhere PHYSDEV match<br>
> --physdev-in  tap8 --physdev-is-bridged<br>
> <br>
> ACCEPT all -- anywhere anywhere PHYSDEV match --physdev-out tapb<br>
> --physdev-is-bridged<br>
> <br>
> ACCEPT all -- anywhere anywhere PHYSDEV match --physdev-in  tapb<br>
> --physdev-is-bridged<br>
> <br>
> ACCEPT all -- anywhere anywhere PHYSDEV match --physdev-out tap9<br>
> --physdev-is-bridged<br>
> <br>
> ACCEPT all -- anywhere anywhere PHYSDEV match --physdev-in  tap9<br>
> --physdev-is-bridged<br>
> <br>
> <br>
> Chain neutron-linuxbri-INPUT (1 references)<br>
> <br>
> target     prot opt source               destination<br>
> <br>
> neutron-linuxbri-o8 all -- anywhere anywhere PHYSDEV match --physdev-in<br>
> tap8 --physdev-is-bridged<br>
> <br>
> <br>
> Chain neutron-linuxbri-OUTPUT (1 references)<br>
> <br>
> target     prot opt source               destination<br>
> <br>
> <br>
> Chain neutron-linuxbri-i8 (1 references)<br>
> <br>
> target     prot opt source               destination<br>
> <br>
> RETURN     all  --  anywhere anywhere  state RELATED,ESTABLISHED<br>
> <br>
> RETURN     udp  --  anywhere <a href="http://fermicloud248.fnal.gov" rel="noreferrer" target="_blank">fermicloud248.fnal.gov</a> udp spt:bootps<br>
> dpt:bootpc<br>
> <br>
> RETURN     udp  --  anywhere 255.255.255.255   udp spt:bootps dpt:bootpc<br>
> <br>
> RETURN     icmp --  anywhere anywhere<br>
> <br>
> RETURN     tcp  --  <a href="http://fermilab-net.fnal.gov/16" rel="noreferrer" target="_blank">fermilab-net.fnal.gov/16</a> anywhere  tcp dpt:ssh<br>
> <br>
> RETURN     all  --  anywhere anywhere  match-set<br>
> NIPv41d69ba3c-68e3-414f-8f1b- src<br>
> <br>
> DROP       all  --  anywhere anywhere  state INVALID<br>
> <br>
> neutron-linuxbri-sg-fallback  all -- anywhere anywhere<br>
> <br>
> <br>
> Chain neutron-linuxbri-local (1 references)<br>
> <br>
> target     prot opt source               destination<br>
> <br>
> <br>
> Chain neutron-linuxbri-o8 (2 references)<br>
> <br>
> target     prot opt source               destination<br>
> <br>
> RETURN     udp  --  default              255.255.255.255 udp spt:bootpc<br>
> dpt:bootps<br>
> <br>
> neutron-linuxbri-s8 all -- anywhere anywhere<br>
> <br>
> RETURN     udp  --  anywhere anywhere udp spt:bootpc dpt:bootps<br>
> <br>
> DROP       udp  --  anywhere anywhere udp spt:bootps dpt:bootpc<br>
> <br>
> RETURN     all  --  anywhere anywhere state RELATED,ESTABLISHED<br>
> <br>
> RETURN     tcp  --  anywhere anywhere tcp dpt:https<br>
> <br>
> RETURN     all  --  anywhere anywhere<br>
> <br>
> RETURN     tcp  --  anywhere anywhere tcp dpt:http<br>
> <br>
> DROP       all  --  anywhere anywhere state INVALID<br>
> <br>
> neutron-linuxbri-sg-fallback  all -- anywhere anywhere<br>
> <br>
> <br>
> Chain neutron-linuxbri-s8 (1 references)<br>
> <br>
> target     prot opt source               destination<br>
> <br>
> RETURN     all  --  <a href="http://fermicloud248.fnal.gov" rel="noreferrer" target="_blank">fermicloud248.fnal.gov</a>  anywhere MAC FA:16:<br>
> <br>
> DROP       all  --  anywhere anywhere<br>
> <br>
> <br>
> <br>
> Chain neutron-linuxbri-sg-chain (2 references)<br>
> <br>
> target     prot opt source               destination<br>
> <br>
> neutron-linuxbri-i8 all  --  anywhere anywhere PHYSDEV match --physdev-out<br>
> tap8 --physdev-is-bridged<br>
> <br>
> neutron-linuxbri-o8 all  --  anywhere anywhere PHYSDEV match --physdev-in  tap8<br>
> --physdev-is-bridged<br>
> <br>
> ACCEPT     all  --  anywhere             anywhere<br>
> <br>
> <br>
> Chain neutron-linuxbri-sg-fallback (2 references)<br>
> <br>
> target     prot opt source               destination<br>
> <br>
> DROP       all  --  anywhere             anywhere<br>
> <br>
> </end><br>
> <br>
> <br>
> <br>
> Let me summarize the differences from when no VM running:<br>
> <br>
> <br>
> Chain INPUT  : no change<br>
> <br>
> Chain FORWARD: no change<br>
> <br>
> Chain OUTPUT : no change<br>
> <br>
> Chain neutron-filter-top: no change<br>
> <br>
> <br>
> Chain neutron-linuxbri-FORWARD: Two new rules are added<br>
> <br>
>  neutron-linuxbri-sg-chain<br>
> <br>
>  neutron-linuxbri-sg-chain<br>
> <br>
> <br>
> Chain neutron-linuxbri-INPUT: One new rule is added<br>
> <br>
>  neutron-linuxbri-o8ae816b0-f<br>
> <br>
> <br>
> Chain neutron-linuxbri-sg-chain: Two new rules are added<br>
> <br>
>  neutron-linuxbri-i8<br>
> <br>
>  neutron-linuxbri-o8<br>
<br>
Those are chains which represents rules from Your Security Group used by a VM<br>
<br>
> <br>
> <br>
> Chain neutron-linuxbri-OUTPUT: no change<br>
> <br>
> Chain neutron-linuxbri-local: no change<br>
> <br>
> Chain neutron-linuxbri-sg-fallback: no change<br>
> <br>
> <br>
> Chain neutron-linuxbri-i8: A new chain with multiple rules<br>
> <br>
> Chain neutron-linuxbri-o8: A new chain with multiple rules<br>
<br>
In those 2 chains there are ingress and egress SG rules implemented<br>
<br>
> <br>
> Chain neutron-linuxbri-s8: A new chain with multiple rules<br>
<br>
And in this one there are antispoofing rules for Your port added.<br>
<br>
> <br>
> <br>
> <br>
> But now a problem arises here:<br>
> <br>
> All outbound connections are blocked (remember this is in a compute node,<br>
> not VM):<br>
> <br>
> For example:<br>
> <br>
> # telnet <a href="http://www.google.com" rel="noreferrer" target="_blank">www.google.com</a> 80<br>
> <br>
> Trying 172.217.5.4...<br>
> <br>
> <br>
> When there isn't any VM running, We don't see this problem.<br>
> <br>
> <br>
> I was wondering if I needed to create a new security group rule for the<br>
> port 80 (for example)<br>
> <br>
> but that didn't solve the issue.<br>
> <br>
> <br>
> Any technical advice will be appreciated,<br>
<br>
You should check where exactly Your packets are dropped.<br>
Also, You didn't tell us what is the type of the Neutron network to which<br>
Your VM is plugged and how bridges are done on Your compute node.<br>
<br>
> <br>
> Thanks,<br>
> <br>
> Hyunwoo<br>
<br>
-- <br>
Slawek Kaplonski<br>
Principal Software Engineer<br>
Red Hat<br>
<br>
</blockquote></div></div>