[Bug 218968] [patch] [libalias] unbreak translation of transit PPtP/GRE for "nat global" case
bugzilla-noreply at freebsd.org
bugzilla-noreply at freebsd.org
Sun Apr 30 08:11:48 UTC 2017
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=218968
Bug ID: 218968
Summary: [patch] [libalias] unbreak translation of transit
PPtP/GRE for "nat global" case
Product: Base System
Version: 11.0-STABLE
Hardware: Any
OS: Any
Status: New
Keywords: patch
Severity: Affects Some People
Priority: ---
Component: kern
Assignee: freebsd-bugs at FreeBSD.org
Reporter: eugen at freebsd.org
Keywords: patch
Created attachment 182189
--> https://bugs.freebsd.org/bugzilla/attachment.cgi?id=182189&action=edit
fix libalias for LibAliasOutTry() case
Assume we have several ipfw nat (or natd) instances and utilize "nat global"
feature to select alias_address for outgoing packets that already have
corresponding state in one of aliasing instances. This standard setup works
just fine for ICMP, UDP, TCP and SCTP packes but not for others. For example,
outgoing PPtP/GRE packets always get alias_address of latest configured
instance no matter whether such packet has corresponding state or not.
The bug is in ProtoAliasOut() function that ignores its "create" argument and
performs translation regardless of its value. This static function is called
only by LibAliasOutLocked() function and only for packers other than ICMP, UDP,
TCP and SCTP passing its "create" argument unmodified.
For every NAT instance, "ipfw nat global" code calls LibAliasOutTry() with
create=0 that leads to LibAliasOutLocked() call and then to ProtoAliasOut()
that returns PKT_ALIAS_OK. So, "ipfw nat global" translates
non-ICP/UDP/TCP/SCTP packet using last configured instance (first in the chain)
and that may be wrong.
Attached patch makes ProtoAliasOut() respect its "create" argument and stop
translation in case of create == 0 with return of PKT_ALIAS_IGNORED.
We have only two consumers of LibAliasOutLocked() in the source tree calling it
with create != 1: mentioned "ipfw nat global" code and similar natd code having
same problem. The patch fixes it too. All other consumers of
LibAliasOutLocked() call it with create = 1 and patch is "no-op" for such case.
For example, the patch unbreaks translation of outgoing transit PPtP/GRE
connections for described configuration.
--
You are receiving this mail because:
You are the assignee for the bug.
More information about the freebsd-bugs
mailing list