NetBSD-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
kern/47001: pf + IPv6 forwarding broken
>Number: 47001
>Category: kern
>Synopsis: pf + IPv6 forwarding broken
>Confidential: no
>Severity: critical
>Priority: high
>Responsible: kern-bug-people
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Wed Sep 26 19:25:00 +0000 2012
>Originator: T.E. Spanjaard
>Release: 6.0_POST_RC1
>Organization:
>Environment:
NetBSD irminsul.deepslack.eu 6.0_POST_RC1 NetBSD 6.0_POST_RC1 (IRMINSUL) #0:
Thu Sep 6 20:12:49 UTC 2012
root%leo.ssr.netphreax.net@localhost:/usr/obj/sys/arch/amd64/compile/IRMINSUL
amd64
>Description:
Using pf(4) on a host which is configured as a gateway/router, forwarding of
IPv6 traffic is broken because pf(4) is not tracking states properly. For
traffic originating/targeting the gateway itself, all packets of a TCP
handshake are seen by pf(4), allowing it to establish state for a TCP
connection. However, when the session is between two hosts, one remote, the
other internal, it never sees the SYNACK, so it drops the state because it
never progresses beyond SYN_SENT on one end, as far as pf(4) is concerned.
Example: SSH session between 2001:838:32c:2::c and
2a02:2770::21a:4aff:fed3:e6ac:
state according to pf(4):
all tcp 2001:838:32c:2::c[25820] -> 2a02:2770::21a:4aff:fed3:e6ac[22]
ESTABLISHED:SYN_SENT
state on internal host:
tcp6 0 0 2001:838:32c:2::.25820 2a02:2770::21a:4.22 ESTABLISHED
state on remote host:
tcp6 0 0 2a02:2770::21a:4.22 2001:838:32c:2::.25820 ESTABLISHED
Looking on pflog0, I see no blocked packets, except after when pf(4) tears the
ESTABLISHED:SYN_SENT state down and the block rule applies.
If a default rule of 'pass' is used, traffic beyond the first max_tcp_winsize
bytes starts to flow only *after* the ESTABLISHED:SYN_SENT state is torn down,
but obviously no state is tracked for the remainder of the connection, because
pf(4) has forgotten about it.
To show locally-originating IPv6 sessions' SYNACKs are caught by pf(4) as it
should:
all tcp 2001:838:300:29e::2[65512] -> 2a02:2770::21a:4aff:fed3:e6ac[22]
ESTABLISHED:ESTABLISHED
(the 29e::2 address is a local one on the gateway)
>How-To-Repeat:
1) Setup a NetBSD IPv6 router with pf(4) stateful tracking and default blocking
of traffic
2) watch your forwarded sessions get killed
>Fix:
Home |
Main Index |
Thread Index |
Old Index