"(self)" not always mathing all local IPv6 addresses

Christian Laursen xi at borderworlds.dk
Tue Apr 6 18:25:46 UTC 2010


Hello,

I have tripped over what I believe is a bug in pf.

On my test machine I have this fairly simple ruleset:
===============================================
set block-policy return
set skip on lo0

block in all

pass out proto { tcp, udp } all keep state

pass in proto {icmp,icmp6} all
pass out proto {icmp,icmp6} all

pass in proto tcp from any to (self) port 22
===============================================

After booting the machine ifconfig for em0 looks like this:
em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
         options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM>
         ether 08:00:27:73:96:a9
         inet6 fe80::a00:27ff:fe73:96a9%em0 prefixlen 64 scopeid 0x1
         inet 10.1.0.40 netmask 0xffff0000 broadcast 10.1.255.255
         inet6 2001:6c8:6:6:a00:27ff:fe73:96a9 prefixlen 64 autoconf
         nd6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>
         media: Ethernet autoselect (1000baseT <full-duplex>)
         status: active

The problem is that when I try to ssh to the machine the connection is 
not allowed through:
[xi at talaxian ~]$ ssh 2001:6c8:6:6:a00:27ff:fe73:96a9
ssh: connect to host 2001:6c8:6:6:a00:27ff:fe73:96a9 port 22: Connection 
refused

I have tried various things when I tried to figure out what is going on 
here. In this case it helps to add another IPv6 address to em0:

ifconfig em0 inet6 2001:6c8:6:6::2

em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
         options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM>
         ether 08:00:27:73:96:a9
         inet6 fe80::a00:27ff:fe73:96a9%em0 prefixlen 64 scopeid 0x1
         inet 10.1.0.40 netmask 0xffff0000 broadcast 10.1.255.255
         inet6 2001:6c8:6:6:a00:27ff:fe73:96a9 prefixlen 64 autoconf
         inet6 2001:6c8:6:6::2 prefixlen 64
         nd6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>
         media: Ethernet autoselect (1000baseT <full-duplex>)
         status: active

After doing this, ssh works:

[xi at talaxian ~]$ ssh 2001:6c8:6:6:a00:27ff:fe73:96a9
Last login: Tue Apr  6 21:56:48 2010 from 10.1.0.2

I have observed this problem on 7.3, 8.0 and -CURRENT less than a week old.

I can mention that changing "(self)" to "self" in the ruleset works as 
expected and the problem returns when changing it back.

When I see this behaviour, it can also be "fixed" by adding another 
interface, eg. "ifconfig gif0 create".

I hope that this makes sense and that someone more familiar with the 
inner workings of pf is able to reproduce it. I like using "(self)" but 
when it doesn't work reliably I'm forced to resort to workarounds.

If I need to provide more info, I'll be happy to do so.

Thanks in advance.

-- 
Christian Laursen


More information about the freebsd-pf mailing list