[NETVIRT-1568] snat can't work in Openstack rocky + ODL Fluorine SR1 Created: 28/Feb/19 Updated: 06/Mar/19 Resolved: 01/Mar/19 |
|
| Status: | Resolved |
| Project: | netvirt |
| Component/s: | natservice |
| Affects Version/s: | Fluorine-SR1 |
| Fix Version/s: | None |
| Type: | Bug | Priority: | Highest |
| Reporter: | Yi Yang | Assignee: | Chetan Arakere Gowdru |
| Resolution: | Done | Votes: | 0 |
| Labels: | netvirt | ||
| Remaining Estimate: | Not Specified | ||
| Time Spent: | Not Specified | ||
| Original Estimate: | Not Specified | ||
| Environment: |
Openstack rocky + Opendaylight SR1 |
||
| Priority: | Highest |
| Description |
|
after enable snat by "openstack router set --external-gateway extnet --enable-snat extvr, VM can't ping external IP no matter I use simulated external network or real external network. |
| Comments |
| Comment by Yi Yang [ 28/Feb/19 ] |
|
By the way, floating IP can work with simulated external network. |
| Comment by Chetan Arakere Gowdru [ 01/Mar/19 ] |
|
Hi Yang, Can you provide the following details. 1) is Controller-based or contrack Based SNAT been configured ?? 2) Please provide following DS dumps from the set-up where is issue been observed and karaf logs curl --silent -u -X GET http://localhost:8181/restconf/config/odl-nat:external-networks/ |python -m json.tool curl --silent -u -X GET http://localhost:8181/restconf/config/odl-nat:ext-routers/ |python -m json.tool curl --silent -u -X GET [http://localhost:8181/restconf/config/odl-nat:napt-switches/|python -m json.tool|http://localhost:8181/restconf/config/odl-nat:napt-switches/] curl --silent -u -X GET http://localhost:8181/restconf/config/odl-nat:intext-ip-port-map/ |python -m json.tool curl --silent -u -X GET http://localhost:8181/restconf/config/odl-nat:snatint-ip-port-map/ |python -m json.tool curl --silent -u -X GET http://localhost:8181/restconf/config/odl-nat:floating-ip-port-info/ |python -m json.tool curl --silent -u -X GET http://localhost:8181/restconf/config/odl-nat:floating-ip-info/ |python -m json.tool curl --silent -u -X GET http://localhost:8181/restconf/config/odl-nat:router-id-name/ |python -m json.tool curl --silent -u -X GET http://localhost:8181/restconf/operational/odl-nat:intext-ip-map/ |python -m json.tool curl --silent -u -X GET http://localhost:8181/restconf/operational/odl-nat:external-ips-counter/ |python -m json.tool curl --silent -u -X GET http://localhost:8181/restconf/operational/odl-nat:floating-ip-info/ |python -m json.tool |
| Comment by Yi Yang [ 01/Mar/19 ] |
|
I saw the blow error info, maybe it is helpful to you. 2019-02-28T06:06:47,391 | ERROR | org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.natservice.rev160111.napt.switches.RouterToNaptSwitch_AsyncDataTreeChangeListenerBase-DataTreeChangeHandler-0 | SnatCentralizedSwitchChangeListener | 345 - org.opendaylight.netvirt.natservice-impl - 0.7.1 | Future (eventually) failed: Error handling SNAT centralized switch update at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:?] |
| Comment by Yi Yang [ 01/Mar/19 ] |
|
It is controller-based NAT. vagrant@odl:~/opendaylight-0.9.1$ cat etc/opendaylight/datastore/initial/config/netvirt-natservice-config.xml
stack@control:~/devstack$ ./vm_ssh vm1
192.168.100.1 is gateway of my external network, it is simulated as ODL csit setup, floating IP can work. stack@control:~/devstack$ curl --silent -u admin:admin -X GET http://192.168.0.5:8181/restconf/config/odl-nat:external-networks/ |python -m json.tool ] stack@control:~/devstack$ curl --silent -u admin:admin -X GET http://192.168.0.5:8181/restconf/config/odl-nat:ext-routers/ |python -m json.tool ], , , , , { "primary-switch-id": 128449969988000, "router-name": "fdbae3de-7bc7-4a7d-acf5-911bec787487" } ] ], stack@control:~/devstack$ curl --silent -u admin:admin -X GET http://192.168.0.5:8181/restconf/config/odl-nat:snatint-ip-port-map/ |python -m json.tool ], stack@control:~/devstack$ curl --silent -u admin:admin -X GET http://192.168.0.5:8181/restconf/config/odl-nat:floating-ip-port-info/ |python -m json.tool ] stack@control:~/devstack$ curl --silent -u admin:admin -X GET http://192.168.0.5:8181/restconf/config/odl-nat:floating-ip-info/ |python -m json.tool stack@control:~/devstack$ curl --silent -u admin:admin -X GET http://192.168.0.5:8181/restconf/config/odl-nat:router-id-name/ |python -m json.tool , , , , , { "router-id": 103010, "router-name": "6532d936-74bd-4be5-adc7-e029ed1916cd" } ] stack@control:~/devstack$ curl --silent -u admin:admin -X GET http://192.168.0.5:8181/restconf/operational/odl-nat:intext-ip-map/ |python -m json.tool , { "external-ip": "192.168.100.200/32", "internal-ip": "10.15.1.0/24", "label": 103068 } ], stack@control:~/devstack$ curl --silent -u admin:admin -X GET http://192.168.0.5:8181/restconf/operational/odl-nat:external-ips-counter/ |python -m json.tool ], ], ], ], ], stack@control:~/devstack$ curl --silent -u admin:admin -X GET http://192.168.0.5:8181/restconf/operational/odl-nat:floating-ip-info/ |python -m json.tool ], ], |
| Comment by Chetan Arakere Gowdru [ 01/Mar/19 ] |
|
Contoller Based SNAT doesn't support ICMP currently. Only TCP and UDP is supported. Since I see ping to external-gw, ICMP packets will be dropped by the following flow. Ex: TCP:cookie=0x81286c5, duration=914.453s, table=46, n_packets=1, n_bytes=74, priority=5,tcp,metadata=0x30d78/0xfffffe actions=CONTROLLER:65535,learn(table=46,hard_timeout=5,priority=7,cookie=0x81286c5,eth_type=0x800,nw_proto=6,NXM_OF_IP_SRC[],NXM_OF_IP_DST[],NXM_OF_TCP_SRC[],NXM_OF_TCP_DST[],OXM_OF_METADATA[1..23]) ICMP: cookie=0x8000008, duration=914.453s, table=46, n_packets=6, n_bytes=588, priority=0,icmp,metadata=0x30d78/0xfffffe actions=drop UDP: cookie=0x81286c5, duration=914.453s, table=46, n_packets=1, n_bytes=59, priority=5,udp,metadata=0x30d78/0xfffffe actions=CONTROLLER:65535,learn(table=46,hard_timeout=5,priority=7,cookie=0x81286c5,eth_type=0x800,nw_proto=17,NXM_OF_IP_SRC[],NXM_OF_IP_DST[],NXM_OF_UDP_SRC[],NXM_OF_UDP_DST[],OXM_OF_METADATA[1..23])
You can configure SNAT in conntrack mode for ICMP SNAT translation
|
| Comment by Yi Yang [ 01/Mar/19 ] |
|
Got it, http works, thank you so much. I'll check if ping is ok for conntrack-based nat.
$ curl http://192.168.100.1:8888/ |
| Comment by Yi Yang [ 04/Mar/19 ] |
|
Hi, Chetan After I changed to conntrack, snat can't work, ssh, http and ping 192.168.100.1 all don't work, so I propose this bug should be reopened. |
| Comment by Yi Yang [ 04/Mar/19 ] |
|
$ ping 192.168.100.1 |
| Comment by Yi Yang [ 04/Mar/19 ] |
|
After I used conntrack, the below rests are wrong:
stack@control:~/devstack$ curl --silent -u admin:admin -X GET http://192.168.0.5:8181/restconf/operational/odl-nat:intext-ip-map/ |python -m json.tool ] ] ] |
| Comment by Yi Yang [ 06/Mar/19 ] |
|
I saw the below error karaf log, are they really errors?
2019-03-06T03:42:32,784 | ERROR | DataTreeEventCallbackRegistrar-Timeouter-0 | NeutronPortChangeListener | 346 - org.opendaylight.netvirt.neutronvpn-impl - 0.7.2 | GwPort 79ef4012-5eef-40f3-95d3-95085f2543a6 added without Router |