DHCP: ARP issue, FR2.x vs FR 3.x

Fajar A. Nugraha list at fajar.net
Fri Jan 13 16:06:43 CET 2012


On Fri, Jan 13, 2012 at 8:48 PM, Alan DeKok <aland at deployingradius.com> wrote:
>  Arg.  "interface" isn't set.  I've fixed that.

Yep, that fixed the segfault issue alright :D

There's still problems though.

First, while migrating my old test config, I forgot to uncomment
mac2ip, which means there are no DHCP-Your-IP-Address attribute. When
it receive dhcp discover packet, the server died with

#================================================================
server dhcp {
Trying sub-section dhcp DHCP-Discover {...}
+- entering group DHCP-Discover {...}
++[reply] returns noop
++[reply] returns noop
++[ok] returns ok
ASSERT FAILED dhcpd.c[412]: vp != NULL
Aborted
#================================================================

I don't think it should do that.

Second, there's still no packet sent to the client. And there's
nothing in the debug log about updating
ARP cache. FR debug log (starting from dhcp section):
#================================================================
server dhcp { # from file /etc/freeradius/sites-enabled/dhcp
 modules {
 Module: Checking dhcp DHCP-Discover {...} for more modules to load
 Module: Linked to module rlm_passwd
 Module: Instantiating module "mac2ip" from file /etc/freeradius/modules/mac2ip
  passwd mac2ip {
	filename = "/etc/freeradius/mac2ip"
	format = "*DHCP-Client-Hardware-Address:=DHCP-Your-IP-Address"
	delimiter = ","
	ignorenislike = yes
	ignoreempty = yes
	allowmultiplekeys = no
	hashsize = 100
  }
rlm_passwd: nfields: 2 keyfield 0(DHCP-Client-Hardware-Address) listable: no
 Module: Linked to module rlm_always
 Module: Instantiating module "ok" from file /etc/freeradius/modules/always
  always ok {
	rcode = "ok"
	simulcount = 0
	mpp = no
  }
 Module: Checking dhcp DHCP-Request {...} for more modules to load
 Module: Checking dhcp (null) {...} for more modules to load
/etc/freeradius/sites-enabled/dhcp[243]: No name specified for
Post-Auth-Type block
 } # modules
} # server
radiusd: #### Opening IP addresses and Ports ####
listen {
	type = "auth"
	ipaddr = *
	port = 0
}
listen {
	type = "acct"
	ipaddr = *
	port = 0
}
listen {
	type = "auth"
	ipaddr = 127.0.0.1
	port = 18120
}
listen {
	type = "dhcp"
	ipaddr = 255.255.255.255
	port = 67
	src_ipaddr = 172.16.101.1
}
listen {
	type = "dhcp"
	ipaddr = 172.16.101.1
	port = 67
WARNING: No "interface" setting is defined.  Only unicast DHCP will work.
	src_interface = "dummy1"
}
 ... adding new socket proxy address * port 48701
Listening on authentication address * port 1812
Listening on accounting address * port 1813
Listening on authentication address 127.0.0.1 port 18120 as server inner-tunnel
Listening on dhcp interface dummy1 address 255.255.255.255 port 67 as
server dhcp
Listening on dhcp address 172.16.101.1 port 67 as server dhcp
Listening on proxy address * port 1814
Ready to process requests.
Received DHCP-Discover of id 90df5d69 from 0.0.0.0:68 to 255.255.255.255:67
	DHCP-Opcode = Client-Message
	DHCP-Hardware-Type = Ethernet
	DHCP-Hardware-Address-Length = 6
	DHCP-Hop-Count = 0
	DHCP-Transaction-Id = 2430557545
	DHCP-Number-of-Seconds = 0
	DHCP-Flags = 0
	DHCP-Client-IP-Address = 0.0.0.0
	DHCP-Your-IP-Address = 0.0.0.0
	DHCP-Server-IP-Address = 0.0.0.0
	DHCP-Gateway-IP-Address = 0.0.0.0
	DHCP-Client-Hardware-Address = 08:00:27:a2:13:b9
	DHCP-Message-Type = DHCP-Discover
	DHCP-Parameter-Request-List = DHCP-Subnet-Mask
	DHCP-Parameter-Request-List = DHCP-Broadcast-Address
	DHCP-Parameter-Request-List = DHCP-Time-Offset
	DHCP-Parameter-Request-List = DHCP-Router-Address
	DHCP-Parameter-Request-List = DHCP-Domain-Name
	DHCP-Parameter-Request-List = DHCP-Domain-Name-Server
	DHCP-Parameter-Request-List = DHCP-Hostname
	DHCP-Parameter-Request-List = DHCP-NTP-Servers
server dhcp {
Trying sub-section dhcp DHCP-Discover {...}
+- entering group DHCP-Discover {...}
++[reply] returns noop
++[reply] returns noop
[mac2ip] Added DHCP-Your-IP-Address: '172.16.101.101' to reply_items
++[mac2ip] returns ok
++[ok] returns ok
} # server dhcp
	DHCP-Subnet-Mask = 255.255.255.0
	DHCP-Router-Address = 172.16.101.1
	DHCP-Domain-Name-Server = 8.8.8.8
	DHCP-IP-Address-Lease-Time = 60
	DHCP-DHCP-Server-Identifier = 172.16.101.1
Sending DHCP-Offer of id 90df5d69 from 172.16.101.1:67 to 172.16.101.101:68
Finished request 0.
Cleaning up request 0 ID -1864409751 with timestamp +18
Going to the next request
Ready to process requests.
Received DHCP-Discover of id 90df5d69 from 0.0.0.0:68 to 255.255.255.255:67
	DHCP-Opcode = Client-Message
	DHCP-Hardware-Type = Ethernet
	DHCP-Hardware-Address-Length = 6
	DHCP-Hop-Count = 0
	DHCP-Transaction-Id = 2430557545
	DHCP-Number-of-Seconds = 5
	DHCP-Flags = 0
	DHCP-Client-IP-Address = 0.0.0.0
	DHCP-Your-IP-Address = 0.0.0.0
	DHCP-Server-IP-Address = 0.0.0.0
	DHCP-Gateway-IP-Address = 0.0.0.0
	DHCP-Client-Hardware-Address = 08:00:27:a2:13:b9
	DHCP-Message-Type = DHCP-Discover
	DHCP-Parameter-Request-List = DHCP-Subnet-Mask
	DHCP-Parameter-Request-List = DHCP-Broadcast-Address
	DHCP-Parameter-Request-List = DHCP-Time-Offset
	DHCP-Parameter-Request-List = DHCP-Router-Address
	DHCP-Parameter-Request-List = DHCP-Domain-Name
	DHCP-Parameter-Request-List = DHCP-Domain-Name-Server
	DHCP-Parameter-Request-List = DHCP-Hostname
	DHCP-Parameter-Request-List = DHCP-NTP-Servers
server dhcp {
Trying sub-section dhcp DHCP-Discover {...}
+- entering group DHCP-Discover {...}
++[reply] returns noop
++[reply] returns noop
[mac2ip] Added DHCP-Your-IP-Address: '172.16.101.101' to reply_items
++[mac2ip] returns ok
++[ok] returns ok
} # server dhcp
	DHCP-Subnet-Mask = 255.255.255.0
	DHCP-Router-Address = 172.16.101.1
	DHCP-Domain-Name-Server = 8.8.8.8
	DHCP-IP-Address-Lease-Time = 60
	DHCP-DHCP-Server-Identifier = 172.16.101.1
Sending DHCP-Offer of id 90df5d69 from 172.16.101.1:67 to 172.16.101.101:68
Finished request 1.
Cleaning up request 1 ID -1864409751 with timestamp +23
Going to the next request
Ready to process requests.
#================================================================


tcpdump:
#================================================================
21:54:27.316739 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none],
proto UDP (17), length 328)
    0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from
08:00:27:a2:13:b9, length 300, xid 0x90df5d69, Flags [none]
	  Client-Ethernet-Address 08:00:27:a2:13:b9
	  Vendor-rfc1048 Extensions
	    Magic Cookie 0x63825363
	    DHCP-Message Option 53, length 1: Discover
	    Parameter-Request Option 55, length 8:
	      Subnet-Mask, BR, Time-Zone, Default-Gateway
	      Domain-Name, Domain-Name-Server, Hostname, NTP
21:54:27.316755 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none],
proto UDP (17), length 328)
    0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from
08:00:27:a2:13:b9, length 300, xid 0x90df5d69, Flags [none]
	  Client-Ethernet-Address 08:00:27:a2:13:b9
	  Vendor-rfc1048 Extensions
	    Magic Cookie 0x63825363
	    DHCP-Message Option 53, length 1: Discover
	    Parameter-Request Option 55, length 8:
	      Subnet-Mask, BR, Time-Zone, Default-Gateway
	      Domain-Name, Domain-Name-Server, Hostname, NTP
21:54:27.319714 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has
172.16.101.101 tell 172.16.101.1, length 28
21:54:28.319761 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has
172.16.101.101 tell 172.16.101.1, length 28
21:54:29.319717 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has
172.16.101.101 tell 172.16.101.1, length 28
21:54:32.319326 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none],
proto UDP (17), length 328)
    0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from
08:00:27:a2:13:b9, length 300, xid 0x90df5d69, secs 5, Flags [none]
	  Client-Ethernet-Address 08:00:27:a2:13:b9
	  Vendor-rfc1048 Extensions
	    Magic Cookie 0x63825363
	    DHCP-Message Option 53, length 1: Discover
	    Parameter-Request Option 55, length 8:
	      Subnet-Mask, BR, Time-Zone, Default-Gateway
	      Domain-Name, Domain-Name-Server, Hostname, NTP
21:54:32.319354 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none],
proto UDP (17), length 328)
    0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from
08:00:27:a2:13:b9, length 300, xid 0x90df5d69, secs 5, Flags [none]
	  Client-Ethernet-Address 08:00:27:a2:13:b9
	  Vendor-rfc1048 Extensions
	    Magic Cookie 0x63825363
	    DHCP-Message Option 53, length 1: Discover
	    Parameter-Request Option 55, length 8:
	      Subnet-Mask, BR, Time-Zone, Default-Gateway
	      Domain-Name, Domain-Name-Server, Hostname, NTP
21:54:32.323727 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has
172.16.101.101 tell 172.16.101.1, length 28
21:54:33.323764 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has
172.16.101.101 tell 172.16.101.1, length 28
21:54:34.323763 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has
172.16.101.101 tell 172.16.101.1, length 28
#================================================================


If I manually force add arp entry using "arp -i dummy1 -s
172.16.101.101 08:00:27:a2:13:b9", then it works. Looks like there's
still problem in arp cache update code.

-- 
Fajar




More information about the Freeradius-Devel mailing list