Hi David,

First of all thank you so much taking the time for my question!

> My first impression is that you're confusing where to apply policy to
> the encapsulated traffic. "pass on gre proto gre" implies you're
> trying to pass GRE packets as they go over gre(4) interfaces, but
> it's the unencapsulated packets that go over gre(4), and the GRE
> encapsulated packets will go over your "underlay" or physical
> interfaces, which looks like em0 according to tcpdump.

Yes, it might be that I’m a little bit confused right now, after all the
“Experiments” I already did to make this work.

> Your pass rule should let everything work though. Those two rules are
> your entire ruleset?

Yes, those two rules are all I have (I reduced my whole rule set to this to 
sort out things)
In the meantime I changed it to the following as per your and Georgs suggestion.

In file:
pass log (all, to pflog0)
# pass the GRE encapsulated traffic
pass inet6 proto gre
# let ping6 over gre(4) work
pass on gre inet6 proto icmp6
#pass on gre proto gre no state


doas pfctl -s rules
pass log (all) all flags S/SA
pass inet6 proto gre all
pass on gre inet6 proto ipv6-icmp all

With these rules I get, so at least I can see the reply on em0:

doas tcpdump -nvei em0 ip6 or icmp6 or proto gre
tcpdump: listening on em0, link-type EN10MB
07:54:28.107820 00:0d:b9:44:ec:dc 34:81:c4:e0:4b:79 86dd 162: 
2a02:xxxx:yyy:zzz::1 > 2a00:uuuu:vvvv:wwww::10: gre [] 86dd 2a01:qqq:rrrr:ss::2 
> 2a01:qqq:rrrr:ss::1: icmp6: echo request (id:597c seq:0) (len 64, hlim 64) 
[flowlabel 0x71e6] (len 108, hlim 64)
07:54:28.156366 34:81:c4:e0:4b:79 00:0d:b9:44:ec:dc 86dd 170: 
2a00:uuuu:vvvv:wwww::10 > 2a02:xxxx:yyy:zzz::1: DSTOPT (type 0x04: len=1) gre 
[] 86dd 2a01:qqq:rrrr:ss::1 > 2a01:qqq:rrrr:ss::2: icmp6: echo reply (id:597c 
seq:0) [flowlabel 0xa8f7b] (len 64, hlim 64) [flowlabel 0xa8f7b] (len 116, hlim 
243)
07:54:29.109744 00:0d:b9:44:ec:dc 34:81:c4:e0:4b:79 86dd 162: 
2a02:xxxx:yyy:zzz::1 > 2a00:uuuu:vvvv:wwww::10: gre [] 86dd 2a01:qqq:rrrr:ss::2 
> 2a01:qqq:rrrr:ss::1: icmp6: echo request (id:597c seq:1) (len 64, hlim 64) 
[flowlabel 0x71e6] (len 108, hlim 64)
07:54:29.166480 34:81:c4:e0:4b:79 00:0d:b9:44:ec:dc 86dd 170: 
2a00:uuuu:vvvv:wwww::10 > 2a02:xxxx:yyy:zzz::1: DSTOPT (type 0x04: len=1) gre 
[] 86dd 2a01:qqq:rrrr:ss::1 > 2a01:qqq:rrrr:ss::2: icmp6: echo reply (id:597c 
seq:1) [flowlabel 0xa8f7b] (len 64, hlim 64) [flowlabel 0xa8f7b] (len 116, hlim 
243)
07:54:30.110067 00:0d:b9:44:ec:dc 34:81:c4:e0:4b:79 86dd 162: 
2a02:xxxx:yyy:zzz::1 > 2a00:uuuu:vvvv:wwww::10: gre [] 86dd 2a01:qqq:rrrr:ss::2 
> 2a01:qqq:rrrr:ss::1: icmp6: echo request (id:597c seq:2) (len 64, hlim 64) 
[flowlabel 0x71e6] (len 108, hlim 64)
07:54:30.156013 34:81:c4:e0:4b:79 00:0d:b9:44:ec:dc 86dd 170: 
2a00:uuuu:vvvv:wwww::10 > 2a02:xxxx:yyy:zzz::1: DSTOPT (type 0x04: len=1) gre 
[] 86dd 2a01:qqq:rrrr:ss::1 > 2a01:qqq:rrrr:ss::2: icmp6: echo reply (id:597c 
seq:2) [flowlabel 0xa8f7b] (len 64, hlim 64) [flowlabel 0xa8f7b] (len 116, hlim 
243)

Unfortunately it never reaches gre0:

doas tcpdump -nvei gre1051 ip6 or icmp6 or proto gre
tcpdump: listening on gre1051, link-type LOOP
07:54:28.107741 2a01:qqq:rrrr:ss::2 > 2a01:qqq:rrrr:ss::1: icmp6: echo request 
(id:597c seq:0) [icmp6 cksum ok] (len 64, hlim 64)
07:54:29.109675 2a01:qqq:rrrr:ss::2 > 2a01:qqq:rrrr:ss::1: icmp6: echo request 
(id:597c seq:1) [icmp6 cksum ok] (len 64, hlim 64)
07:54:30.110004 2a01:qqq:rrrr:ss::2 > 2a01:qqq:rrrr:ss::1: icmp6: echo request 
(id:597c seq:2) [icmp6 cksum ok] (len 64, hlim 64)


> The bare "pass" rule not letting this work makes me feel like there's
> more to this though.

Yes, I also think that there must be more to it, but I just don’t see the trees 
for the forrest here.

Thanks
Markus

Attachment: signature.asc
Description: Message signed with OpenPGP

Reply via email to