Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 23 Jan 1997 15:16:51 -0800
From:      John Polstra <jdp@polstra.com>
To:        hackers@freebsd.org
Subject:   Re: Fault-tolerant network with 2 ethernets 
Message-ID:  <199701232316.PAA21713@austin.polstra.com>

next in thread | raw e-mail | index | archive | help
Everybody, thanks for all the helpful replies!  This has really
cleared some things up for me.  Since several of the replies covered
the same areas, I'm going to try to respond to them all together
here.

The point about 100BaseT failing differently from coax-based ethernet
(the whole net doesn't go down if there's a cable problem) is well
taken.  It does change the problem somewhat.  I still have coax in
my own office ("if it works, don't fix it"), so I was incorrectly
thinking in terms of how coax behaves.

I also agree with the insight that adding a 2nd interface into each
host and a 2nd set of cables is as likely to lower the reliability
as it is to raise it.  Unfortunately, this is a telephone company
thing.  There's a requirement that there must be "no single point
of failure," and I doubt there's any flexibility to it.

The ideas of using divert sockets or the tun interface are pretty
tricky.  I think they'd work, but I'm a little bit concerned about
performance issues.

I'm going to check out Julian Elischer's "netgraph" framework ASAP.

A couple of folks mentioned the problem of losing existing connections
in the event of failure, because they can't be moved to different
IP endpoints.  This may not be a big issue, as I think almost all
the traffic will be UDP.  I'll have to find out more from the client
about how the network is used, before I'm sure about this one.

But maybe it doesn't matter.  I am quite intrigued by an idea that
a person sent me in private mail.  (If he wanted to be named, I
assume he would have sent it to the list too.)  This person suggested:

> Non-simple solution.  Three addresses for every machine.  one on
> each ethernet segment, and one off the loopback address.  Then run
> routed on every machine, told to advertize the third address out
> both ethenet ports.
> 
> I'm not sure if this would work, since I've never used routed,
> though it sounds like it should
...

It took me a while to grasp this, but here's what I think the idea
is.  I'll use actual numbers just to make it more concrete.  We
could assign addresses like this:

    Ethernet A:		192.168.1.x
    Ethernet B:		192.168.2.x
    Third address:	192.168.3.x

If I understand the idea correctly, this third address would be
assigned as an alias for the loopback device on each host, something
like this:

    ifconfig lo0 inet 192.168.3.21 alias netmask 0xffffffff
				^^
				||
				host-specific, of course

At the application layer, the 192.168.3.x addresses are the ones
that would be used.  The applications would never use the real
addresses of the ethernets.

Finally, each host would advertise a route to its 192.168.3.x
address on both ethernet interfaces.  In effect, each host acts as a
gateway to itself.

The only remaining problem is routed, and I now think Andrew Stesin
was right on the money when he suggested:

> 	No. RIP sucks and must die :)
...
> 	Use Gated and OSPF.  It will even do some kind
> 	of load-sharing then, you will get kinda of 20Mb
> 	between the hosts included into the structure.

I read up on OSPF and gated this morning, and it looks like they're
perfect for solving this problem.  The documentation even seems to
suggest the trick of adding a second address to the loopback
interface, if I understand it right.

If I've misunderstood the solution, or if it won't work, I hope
somebody will let me know. :-)

Again, thanks for all the help.

John
--
   John Polstra                                       jdp@polstra.com
   John D. Polstra & Co., Inc.                Seattle, Washington USA
   "Self-knowledge is always bad news."                 -- John Barth



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199701232316.PAA21713>