My home OpenBSD machine acts as my home router for NAT and for my HE
ipv6 tunnel.  Everything works great except that I can't figure out how
to allow inbound ping6.  HE has an IPv6 portscan function that can never
manage to ping6 me.  If I tell it to not ping (-PN) it does indeed
succeed to scan just the open ports I intend it to.

I have tried a number of ways to allow icmp6, as the notes in my
pf.conf (look for #####) explain below.  What few examples I could find
online (http://www.benzedrine.cx/pf.conf) seemed to suggest it
shouldn't be hard, but I'm not having any success.  Is anyone doing
this with 4.7?

#/etc/pf.conf

outside_if = "fxp0"
inside_if  = "fxp1"
tunnel_if  = "gif0"
local_if   = "lo0"
nofilt_ifs = "{" $inside_if $local_if "}"
ipv6_net   = "{ 2001:470:a:x::2, 2001:470:b:x::/64 }"
tunnel_peer = "216.218.xxx.xxx"
nat_range  = "10.0.0.0/24"

ok_in_tcp_ports = "{" ftp ssh auth "}"

table <no-ssh> persist

# no filtering on my inside stuff
set skip on $nofilt_ifs

#pass           # to establish keep-state

altq on $outside_if priq queue { std_out, ssh_out, dns_out,
tcp_ack_out }

queue std_out     priq(default)
queue ssh_out     priority 4 priq(red)
queue dns_out     priority 5
queue tcp_ack_out priority 6

# NAT for inside IPv4 network
match out on ! $inside_if inet from $nat_range to any nat-to
($outside_if:0)

# Block networks that bang on my SSH port right away
block in quick inet proto tcp from <no-ssh> to any port ssh

# Block X.org traffic as the default ruleset does.
block in quick on ! lo0 proto tcp to port 6000:6010

# Block everything by default
block

# HE IPv6 Tunnel
pass out on $outside_if inet proto ipv6 from ($outside_if) to
$tunnel_peer pass in  on $outside_if inet proto ipv6 from $tunnel_peer
to ($outside_if)

# Some stuff has to come in.
pass in on $outside_if proto tcp to ($outside_if) port $ok_in_tcp_ports
pass in on $tunnel_if inet6 proto tcp from any to $ipv6_net port
$ok_in_tcp_ports

pass on $outside_if inet proto icmp icmp-type 8 code 0

##### I have tried all three of these to no effect
#pass on $tunnel_if inet6 proto ipv6-icmp
#pass in on $tunnel_if inet6 proto ipv6-icmp from any to $ipv6_net
#pass quick proto icmp6 all

# Outbound rules and our queues
pass out on $outside_if proto tcp from ($outside_if) to any\
    queue(std_out, tcp_ack_out)
pass out on $tunnel_if inet6 proto tcp from $ipv6_net to any\
    queue(std_out, tcp_ack_out)

pass out on $outside_if proto { udp icmp } from ($outside_if) to any
pass out on $tunnel_if inet6 proto udp from $ipv6_net to any

##### tried this, outbound ping6 works without it
#pass out on $tunnel_if inet6 proto ipv6-icmp from $ipv6_net to any

pass out on $outside_if proto { tcp udp } from ($outside_if) to any
port domain\ queue dns_out
pass out on $tunnel_if inet6 proto udp from $ipv6_net to any port
domain\ queue dns_out

--TimH

Reply via email to