[ovs-discuss] Problems with proxy ARP
Brendan Doyle
brendan.doyle at oracle.com
Fri May 1 18:48:22 UTC 2020
Hi,
I'm having an issue with proxy ARP
I have a VM ca-rain06-vmovs-3 (192.16.1.6) and I want to use an
unassigned IP (192.16.1.106) in that VM's subnet to "map" to an
underlay IP 253.255.0.33, such that when I ping 192.16.1.106
pkts sent from ca-rain06-vmovs-3 to 192.16.1.106 have the dst IP
192.16.1.106 changed to 253.255.0.33 by a gateway and are sent
onto the underlay by that gateway.
The gateway is lr_vcn3, and it has the following NAT and routes
(253.255.0.1) is the default router in the underlay.
# ovn-nbctl lr-route-list lr_vcn3
IPv4 Routes
192.16.1.106 253.255.0.1 dst-ip
lr_vcn3_gw-ls_external_vcn3
0.0.0.0/0 253.255.0.1 dst-ip
lr_vcn3_gw-ls_external_vcn3
[root at ca-rain01 ~]# ovn-nbctl lr-nat-list lr_vcn3
TYPE EXTERNAL_IP EXTERNAL_PORT LOGICAL_IP
EXTERNAL_MAC LOGICAL_PORT
dnat 253.255.0.33 192.16.1.106
snat 253.255.2.2 192.16.1.6
But what I see is an ARP in the overlay looking for the MAC of
192.16.1.106 and nobody responds. I would have thought that lr_vcn3
would respond as it has a route for 192.16.1.106
I tried adding proxy ARP to no avail on various ports:
ovn-nbctl set Logical_Switch_Port vcn3_subnet1-lr_vcn3
options:arp_proxy=true
ovn-nbctl set Logical_router_port lr_vcn3-vcn3_subnet1
options:arp_proxy=true
ovn-nbctl set Logical_Switch_Port ls_external_vcn3-lr_vcn3_gw
options:arp_proxy=true
ovn-nbctl set Logical_router_port lr_vcn3_gw-ls_external_vcn3
options:arp_proxy=true
I think what I need is an entry in Ingress Table 11 for the vcn3_subnet1
Logical switch port that replies to the ARP request with the router MAC
Here is my setup, and North Bound config
Any thoughts
Thanks
# Setup gateway
#
ovn-nbctl ls-add ls_external_vcn3
ovn-nbctl lsp-add ls_external_vcn3 ln-ls_external_vcn3
ovn-nbctl lsp-set-type ln-ls_external_vcn3 localnet
ovn-nbctl lsp-set-addresses ln-ls_external_vcn3 unknown
ovn-nbctl lsp-set-options ln-ls_external_vcn3 network_name=physnet
# Create a distributed router port (40:44:00:00:10:10 253.255.31.3)
#
ovn-nbctl lrp-add lr_vcn3 lr_vcn3_gw-ls_external_vcn3 40:44:00:00:10:10
253.255.31.3/16
ovn-nbctl lsp-add ls_external_vcn3 ls_external_vcn3-lr_vcn3_gw
ovn-nbctl lsp-set-type ls_external_vcn3-lr_vcn3_gw router
ovn-nbctl lsp-set-addresses ls_external_vcn3-lr_vcn3_gw router
ovn-nbctl lsp-set-options ls_external_vcn3-lr_vcn3_gw
router-port=lr_vcn3_gw-ls_external_vcn3
# Tell the lr_vcn3 to use the underlay default router to get to the world
#
ovn-nbctl lr-route-add lr_vcn3 "0.0.0.0/0" 253.255.0.1
lr_vcn3_gw-ls_external_vcn3
# Add specific route for 192.16.1.106
# We want lr_vcn3 to respond to ARPs for 192.16.1.106
# Then DNAT pkts with dst of 192.16.1.106 to have a dst of 253.255.0.33
#
ovn-nbctl lr-route-add lr_vcn3 "192.16.1.106" 253.255.0.1
lr_vcn3_gw-ls_external_vcn3
# Add NAT rules
#
# SNAT using IP 253.255.2.2 so pkts from with ca-rain06-vmovs-3 src IP
# get an underlay IP of 253.255.2.2
ovn-nbctl lr-nat-add lr_vcn3 snat 253.255.2.2 192.16.1.6
# DNAT using 253.255.0.33
# So pkts sent to 192.16.1.106 get dst replaced with 253.255.0.33
# And pkts received from underlay with dst get dst replaced with
# 253.255.0.33
#
ovn-nbctl lr-nat-add lr_vcn3 dnat 253.255.0.33 192.16.1.106
# Schedule the distributed gateway port
#
ovn-nbctl lrp-set-gateway-chassis lr_vcn3_gw-ls_external_vcn3 ca-rain05 15
ovn-nbctl lrp-set-gateway-chassis lr_vcn3_gw-ls_external_vcn3 ca-rain06 20
ovn-nbctl lrp-set-gateway-chassis lr_vcn3_gw-ls_external_vcn3 ca-rain17 10
# Test
# From overlay VM ca-rain06-vmovs-3 (192.16.1.6)
# ping 192.16.1.106
[ca-rain06-vmovs-3 ~]# ping -c1 192.16.1.106
# tcpdump shows lr_vcn3_gw does not respond to ARP request
# Would have thought it would as it has a route for 192.16.1.106
00:05:05.882784 52:54:00:02:55:96 > ff:ff:ff:ff:ff:ff, ethertype ARP
(0x0806), length 42: Ethernet (len 6), IPv4 (len 4), Request who-has
192.16.1.106 tell 192.16.1.6, length 28
0x0000: ffff ffff ffff 5254 0002 5596 0806 0001
0x0010: 0800 0604 0001 5254 0002 5596 c010 0106
0x0020: 0000 0000 0000 c010 016a
00:00:01.061217 52:54:00:02:55:96 > ff:ff:ff:ff:ff:ff, ethertype ARP
(0x0806), length 42: Ethernet (len 6), IPv4 (len 4), Request who-has
192.16.1.106 tell 192.16.1.6, length 28
0x0000: ffff ffff ffff 5254 0002 5596 0806 0001
0x0010: 0800 0604 0001 5254 0002 5596 c010 0106
0x0020: 0000 0000 0000 c010 016a
# My North Bound DB:
switch 6631a7a5-018f-496c-b8d3-af17d5e997ae (ls_external_vcn3)
port ln-ls_external_vcn3
type: localnet
addresses: ["unknown"]
port ls_external_vcn3-lr_vcn3_gw
type: router
router-port: lr_vcn3_gw-ls_external_vcn3
switch 2f8cce6f-b41c-4a90-8785-9f56d808ac14 (ls_vcn3)
port 284195d2-9280-4334-900e-571ecd00327a
addresses: ["52:54:00:02:55:96 192.16.1.6"]
port 269089c4-9464-41ec-9f63-6b3804b34b07
addresses: ["52:54:00:30:38:35 192.16.1.5"]
port vcn3_subnet1-lr_vcn3
type: router
addresses: ["40:44:00:00:00:60"]
router-port: lr_vcn3-vcn3_subnet1
router 36c64fdf-4842-4543-95bc-9bfe731af4d3 (lr_vcn3)
port lr_vcn3-vcn3_subnet1
mac: "40:44:00:00:00:60"
networks: ["192.16.1.1/24"]
port lr_vcn3_gw-ls_external_vcn3
mac: "40:44:00:00:10:10"
networks: ["253.255.31.3/16"]
gateway chassis: [ca-rain06 ca-rain05 ca-rain17]
nat 5e179df6-15c7-403e-99a7-1e453cbc0493
external ip: "253.255.2.2"
logical ip: "192.16.1.6"
type: "snat"
nat e4dab2ac-7be0-4127-818e-d24b71c14f4b
external ip: "253.255.0.33"
logical ip: "192.16.1.106"
type: "dnat"
MAC bindings
--------------
_uuid : d82e70a0-2212-4566-a929-b7cf3c091e8c
datapath : db21ed8c-16a5-4afb-aa51-5bbaae5bda29
ip : "192.16.1.6"
logical_port : lr_vcn3-vcn3_subnet1
mac : "52:54:00:02:55:96"
_uuid : fe33814e-8001-4697-ad7e-087b1f4ed98d
datapath : db21ed8c-16a5-4afb-aa51-5bbaae5bda29
ip : "192.16.1.5"
logical_port : lr_vcn3-vcn3_subnet1
mac : "52:54:00:30:38:35"
_uuid : aa2f0e96-5ec7-452c-8a5f-aaec5d5b6c7c
datapath : db21ed8c-16a5-4afb-aa51-5bbaae5bda29
ip : "::"
logical_port : lr_vcn3-vcn3_subnet1
mac : "00:00:00:00:00:00"
# Try configure proxy ARP - But on what?
#
# vcn3_subnet1-lr_vcn3 - Logical switch port on ls_vcn3 that connects to
Logical Router lr_vcn3
# lr_vcn3-vcn3_subnet1 - Logical router port on lr_vcn3 that connects to
Logical switch ls_vcn3
# ls_external_vcn3-lr_vcn3_gw - LS port on ls_external_vcn3 that
connects to the gateway
# lr_vcn3_gw-ls_external_vcn3 - LR gateway port
#
# No joy - with vcn3_subnet1-lr_vcn3
ovn-nbctl set Logical_Switch_Port vcn3_subnet1-lr_vcn3
options:arp_proxy=true
# No joy - with lr_vcn3-vcn3_subnet1
ovn-nbctl set Logical_router_port lr_vcn3-vcn3_subnet1
options:arp_proxy=true
# No Joy with - ls_external_vcn3-lr_vcn3_gw
ovn-nbctl set Logical_Switch_Port ls_external_vcn3-lr_vcn3_gw
options:arp_proxy=true
# lr_vcn3_gw-ls_external_vcn3
ovn-nbctl set Logical_router_port lr_vcn3_gw-ls_external_vcn3
options:arp_proxy=true
More information about the discuss
mailing list