Hello,

I am confused about how Neighbor Discovery is not working when the firewall is 
on. If I have “pf” disabled then the doing an ndp -an will result is an 
complete discovery;

ndp With firewall disabled (pfctl -d)
Neighbor                             Linklayer Address   Netif Expire    S Flags
2001:8004:1420:194b:c4a9:f2c3:3403:36ed 00:e0:67:15:e7:82  em0 permanent R l
fe80::2e0:67ff:fe15:e782%em0         00:e0:67:15:e7:82     em0 permanent R l
fe80::803a:feff:fe38:a754%em0        82:63:9c:36:23:a2     em0 37s       R R
fe80::e98a:6028:3c19:5fc%em0         82:63:9c:36:23:a2     em0 32s       R R
fe80::2e0:67ff:fe15:e783%em1         00:e0:67:15:e7:83     em1 permanent R l
fe80::1c32:1698:96d9:35fb%em1        38:f9:d3:e0:fa:db     em1 20h53m3s  S 

ndp with firewall enabled (pfctl -e), the discovery is incomplete;
Neighbor                             Linklayer Address   Netif Expire    S Flags
2001:8004:1420:194b:c4a9:f2c3:3403:36ed 00:e0:67:15:e7:82  em0 permanent R l
fe80::2e0:67ff:fe15:e782%em0         00:e0:67:15:e7:82     em0 permanent R l
fe80::803a:feff:fe38:a754%em0        82:63:9c:36:23:a2     em0 23h40m37s S R
fe80::e98a:6028:3c19:5fc%em0         (incomplete)          em0 expired   I R
fe80::2e0:67ff:fe15:e783%em1         00:e0:67:15:e7:83     em1 permanent R l
fe80::1c32:1698:96d9:35fb%em1        38:f9:d3:e0:fa:db     em1 20h55m18s S 

Interface em0, I am using dhcpcd to get the Ipv6 address.
em0: flags=808843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,AUTOCONF4> mtu 1500
        lladdr 00:e0:67:15:e7:82
        index 1 priority 0 llprio 3
        groups: egress
        media: Ethernet autoselect (1000baseT 
full-duplex,master,rxpause,txpause)
        status: active
        inet 10.121.101.56 netmask 0xffffff00 broadcast 10.121.101.255
        inet6 fe80::2e0:67ff:fe15:e782%em0 prefixlen 64 scopeid 0x1
        inet6 2001:8004:1420:194b:c4a9:f2c3:3403:36ed prefixlen 64 autoconf

I cannot see anything blocking “ndp” from pflog so I am confused as what is 
going on here. I have attached my firewall configuration;

# Macros
ext_if = "em0"
int_if = "em1"
icmp_types = "{echoreq unreach}"
icmp6_types = "{echoreq unreach toobig routersol routeradv neighbrsol 
neighbradv}"

# Tables
table <martians> { 0.0.0.0/8 10.0.0.0/8 127.0.0.0/8 \
        169.254.0.0/16 172.16.0.0/12 192.0.0.0/24 \
        192.0.2.0/24 192.88.99.0/24 192.168.0.0/16 \
        198.18.0.0/15 198.51.100.0/24 203.0.113.0/24 \
        224.0.0.0/4 240.0.0.0/4 255.255.255.255/32 }

# Options
set skip on lo 
set block-policy drop
set loginterface egress
set reassemble yes

# Scrub rule
match in all scrub (no-df random-id max-mss 1440)

# NAT Rule
match out on egress inet from !(egress:network) to any nat-to (egress:0)

# Block Unicast reverse path Forwarding
block in quick log from urpf-failed

# Block martians rule
block in quick on egress from <martians> to any
# block return out quick on egress from any to <martians>

# Default block all
block log all

# Allow ipv6 NDP
pass out quick on egress inet6 proto icmp6 from fe80::/10 to any icmp6-type 
{neighbrsol} keep state
pass out quick on egress inet6 proto icmp6 from fe80::/10 to any icmp6-type 
{neighbradv} keep state

# Allow icmp6
pass in quick on egress inet6 proto icmp6 all icmp6-type $icmp6_types keep 
state label "ICMP6-TRAFFIC"

# Allow dhcp6 traffic
pass in quick on egress inet6 proto udp from fe80::/10 port dhcpv6-server to 
fe80::/10 port dhcpv6-client 

# Pass all other traffic out
pass out quick 

# Pass in all traffic on internal network
pass in on { $int_if } 

At present I am interested in getting a working Ipv6 on interface em0 only with 
the firewall enabled. Any ideas would be appreciated.

Many thanks

Antonino Sidoti




Reply via email to