On 11 May 2014 06:38, Creamy <cre...@dishplanning.com> wrote:
> On Sun, May 11, 2014 at 06:03:24AM -0400, Kenneth Westerback wrote:
>> On 11 May 2014 05:26, "Creamy" <cre...@dishplanning.com> wrote:
>> >
>> > Hello again!
>> >
>> > OK, this time it's a bug, (or is it a feature?), in dhclient.
>> >
>> > Imagine that you have two separate wireless networks, which operate
>> > independently using the same private address spaces and offer leases
>> > based on the same algorithm computed from the MAC address of the
>> > client.
>> >
>> > For example:
>> >
>> > Network 1 - SSID foo, AP IP 192.168.64.1 netmask 255.255.255.0
>> > Network 2 - SSID bar, AP IP 192.168.64.1 netmask 255.255.255.0
>> >
>> > But these are NOT connected in any way.  They are two completely
>> > different networks.  E.G. 192.168.64.20, (by way of example), on
>> > foo, is a different machine to 192.168.64.20 on bar.  Maybe one
>> > is your office network and one is a home network.
>> >
>> > Now, imagine that you have another machine, (probably a laptop),
>> > which connects to either one, but never both at the same time.
>> >
>> > This machine is assigned an IP by DHCP when it joins either
>> > network.  The DHCP server assigns IPs based pseudo randomly based
>> > on MAC address.
>> >
>> > If both networks use identical algorithms to calculate this IP,
>> > then the laptop will be assigned the same IP regardless of the
>> > network it joins.  Imagine that it's assigned 192.168.64.10.
>> >
>> > This causes problems with dhclient, when you switch between
>> > networks whilst a lease is still valid on the first one.  It works,
>>
>> Whew. At least it works.
>
> Yes, it works quite well actually, the behavior I've noticed might not
> even matter.
>
>> > but if you pass the -L option to dhclient, it doesn't produce the
>>
>> At last! Somebody using -L!
>
> Well, I use it to monitor exactly what's coming back from the DHCP
> server when it's one that I don't trust :-).  Call me paranoid, but
> since the DHCP protocol supports much more than just assigning an IP
> address lease, I like to see what the remote end is trying to do,
> before it changes an obscure aspect of my networking configuration.
>
> (Although thankfully the current code doesn't implement the majority
> of stupid things listed in tables.c).
>
>> > normal output, presumably because it believes that it's continuing
>> > with an active lease.
>>
>> Possibly, since I believe you are saying the dhcp servers have the same IP
>> or provide the same server id. dhclient currently has no way to detect that
>> the nwid and only the nwid has changed.
>
> Well, it could notice differences in, for example, the
> vendor-encapsulated-options string, which it currently ignores.

It already compares the contents of all options. Of which
vendor-encapsulated-options is one, i.e. option 43. Any difference in
length or detected by memcmp() would mean the leases are deemed not
identical, compare_lease() fails and normal processing of a new lease
proceeds.

>
>> > This causes problems with scripts.
>> >
>> > A script such as this:
>> >
>> > #!/bin/sh
>> > ifconfig if0 nwid foo wpakey bar
>> > sleep 3
>> > dhclient -L /output
>> > cat /output
>> >
>> > fails with cat: /test: No such file or directory.
>>
>> This seems implausible. Why would cat complain about /test here?
>>
>> Assuming that's a typo,
>
> It was, sorry.  cat: /output: No such file or directory.
>
>> can you provide some more details on what version
>> of OpenBSD you have installed?
>
> Well I'm testing this on a 5.5-release box, but saw the same behavior with
> 5.4-release.

If you want to test the latest changes you need to be trying -current snapshots.

>
>> Some -L changes went in recently. There is
>> also a race in your script since dhclient will not be guaranteed to have
>> finished with /output before your cat runs.
>
> I realise that, but it's always used interactively by me, so it's not
> critical in my case.
>
>> > dhclient needs to recognise that it is not just continuing with an
>> > active lease, even though the new lease has the same parameters it
>> > has come from a different dhcp server.
>>
>> Different how? Does it at least have a different MAC?
>
> Different MAC, with one server returning a random string in
> vendor-encapsulated-options, and the other not returning anything.

Then the leases are as different as they can be. You can validate this
by tweaking the "bound to ..."
message issued by bind_lease() when it has decided the leases are
identical and the interface, routing table and resolv.conf do not need
to be updated.

>
> My worry is that this might have side effects that I haven't noticed.

Not sure what side effects you are thinking of.

>
> If the second server is evil in nature, can it take advantage in any way
> that the client thinks that it's just maintaining an existing lease from
> another server?  If not, it doesn't matter.

I can't see how an evil dhcp server could cause problems by tricking a
dhclient into not deleting and adding the same address/subnet, same
routes and same resolv.conf. At least any problems not caused by
benign servers doing the same thing.

.... Ken

>
> --
> Creamy! <3

Reply via email to