Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 26 Feb 1999 14:47:06 +0100
From:      Jakob Schripsema <sch@hdxf02.unix.telecom.ptt.nl>
To:        freebsd-net@freebsd.org
Cc:        sch@kpn.com
Subject:   TCP/IP stack question
Message-ID:  <199902261347.OAA11430@sat-relay2.pc.telecom.ptt.nl>

next in thread | raw e-mail | index | archive | help

Hi,

Recently we ran into 2 TCP/IP-stack related problems with our
2.2.2-RELEASE based Firewall:

1. An ARP related problem described in detail below

2. A (minor) problem with IPFW and IP-fragmentation: we forgot to include
   rules for IP-fragments.

These problems resulted in a number of arguments between FreeBSD lovers (me)
and Linux lovers. (Comparable with the Z80 vs 6800 arguments from the old
days ..). We have found 2 differences between the Linux stack and
the 2.2.2 stack:

1. Linux expects a per-interface arp cache, while 2.2.2. has a global
   arp cache.
2. Linux has the ability to do ip-reassembly before the firewall
   code is used.

Are there changes between 2.2.2 and the more recent versions of FBSD
regarding these items ?? The problem with the IP-fragmentation is
minor, but the arp-problem is a real pain in the ass.

Regards,

Jakob Schripsema


ARP problem:

Network topology:


                        Production backbone
        --------+----------------------------+-------------
                |       ---> 1               |
                |       <--  2               |
           mac1 |       ---> 3          mac2 |
           ip1  |                       ip2  |
         .------------.               .-------------.
         |            |               |             |
         |    FW      |               |    MHH      |
         |            |               `-------------'
         |            | mac4                 | ip3
         |            | ip4                  | mac3
         |            |----------------------+--------
         |            |    <--- 4 Maintenance backbone
         `------------'    ---> 5
                |          <--- 6
                |
                |
                |                       FW: FreeBSD 2.2.2-RELEASE
         .------------.                 MHH: Linux RedHAT 5.x
         |            |
         |    PC      |
         |            |
         `------------'

The firewall FW routes 'forward' traffic from PC to the ip2 via the
production backbone. The Multi-Homed-Host MHH routes the return traffic
via the maintenance backbone.

The FW reports changes in MAC address for the production interface of the
MHH, ip2.  Running tcpdump on FW reveals the following scenario:

1. PC tries to connect to ip2 (HTTP request
2. FW issues an arp-request (asking for mac2) on the production
   backbone: packet 1
3. MHH replies with an arp-reply: packet 2
4. FW sends first IP packet to MHH: packet 3
5. MHH issues an arp-request (asking for mac4) on the maintenance
   backbone: packet 4
6. FW replies with an arp-reply: packet 5
7. MHH sends first IP return packet to FW: packet 6.

This should work but the arp-request from MHH, packet 4, contains unexpected
information:

	source hardware addres = mac3
	source protocol address = ip2 (I expected ip3)
	destination hardawre addres = NULL
	destination protocal addres = ip4

This packet forces the FW to change its arp-cache: the mac addres for ip2
is set to mac3. This effectively blocks all traffic between PC end MHH


Jakob

-----
Jakob Schripsema   Phone:+31 50 5855537   E-mail:j.schripsema@kpn.com
DISCLAIMER: This statement is not an official statement from, nor does
            it represent an official position of, KPN Telecom BV.


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-net" in the body of the message




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