bridge + ip_alias --> SLOW!!!

Andrea Venturoli ml at netfence.it
Mon Aug 30 12:25:20 PDT 2004


Hello,
I've got a problem I cannot understand and hope someone can help me.

I've got a machine which must firewall a whole class C subnet.
The upstream router (100Mb/s fiber connection) is configured as xxx.xxx.xxx.254, so I've chosen xxx.xxx.xxx.1 for my
box and bridge with the other xxx.xxx.xxx.* IPs (10Mb/s copper).

(In all my tests I've setup the external NIC to 10Mb/s; I wouldn't do more anyway).

ifconfig gives

>fxp0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
>        ether 00:02:b3:5e:5c:ca
>        media: Ethernet 10baseT/UTP
>        status: active
>vr0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
>        inet xxx.xxx.xxx.1 netmask 0xffffff00 broadcast xxx.xxx.xxx.255
>        inet xxx.xxx.xxx.12 netmask 0xffffffff broadcast xxx.xxx.xxx.12
>        ether 00:40:f4:77:5f:c8
>        media: Ethernet 10baseT/UTP
>        status: active
>fxp1: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
>        inet 192.168.106.1 netmask 0xffffff00 broadcast 192.168.106.255
>        ether 00:02:b3:5e:61:d0
>        media: Ethernet 100baseTX
>        status: active
>vr1: flags=8802<BROADCAST,SIMPLEX,MULTICAST> mtu 1500
>        ether 00:40:f4:77:61:c5
>        media: Ethernet autoselect (none)
>        status: no carrier
>lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
>        inet 127.0.0.1 netmask 0xff000000

vr1 is currently not used, fxp1 serves a private network, fxp0 and vr0 are bridged with the following:

cat /etc/sysctl.conf

>net.link.ether.bridge=1
>net.link.ether.bridge_cfg=vr0,fxp0
>net.link.ether.bridge_ipfw=1
>net.link.ether.ipfw=1

Notice I gave no IP to fxp0, since, from what I could understand, it is not needed.


uname -a gives:

>FreeBSD zzzzzz 4.10-RELEASE-p2 FreeBSD 4.10-RELEASE-p2 #7: Tue Aug 24 16:45:56 C
>EST 2004     root at zzzzzz:/usr/obj/usr/src/sys/ZZZZZZ  i386

and we are using ipfw2:

tail /usr/src/sys/i386/conf/ZZZZZZ

>options IPFIREWALL
>options IPFIREWALL_VERBOSE
>options TCP_DROP_SYNFIN
>options RANDOM_IP_ID
>options IPDIVERT
>options IPFW2
>options BRIDGE
>options DUMMYNET



As you can see vr0 also have an alias address (for reasons which are out of scope here) and with that the problem
begin.

I can achieve good speeds on the external side both ways (originating connections and working as a server) if I use
xxx.xxx.xxx.1, but xxx.xxx.xxx.12 is MUCH MUCH slower! No difference can be noted on the internal net or the private net
on fxp1.

Just to give an idea, I tested with iperf and this are the results:

internal net -> xxx.xxx.xxx.1     6.93 Mb/s
internal net -> xxx.xxx.xxx.12    6.94 Mb/s
internet     -> xxx.xxx.xxx.1     237 Kb/s
internet     -> xxx.xxx.xxx.12    60.3 Kb/s

So using the alias IP seems four times slower, but this is probably due to the bandwidth limit on the other side (I
could only test from an ADSL): if I surf the web, choosing one of the two IPs as source, I get a much bigger gap.

I tried with an "allow all" rule as the first in the ipfw chain, and got no improvement, so the firewall should (IMHO)
not be the problem.

I'm really lost, I cannot see any reason for this difference.
Any hint?

 bye & Thanks
        av.





More information about the freebsd-net mailing list