From owner-freebsd-net@freebsd.org Wed Jun 13 20:31:05 2018 Return-Path: Delivered-To: freebsd-net@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 7D4F41012112; Wed, 13 Jun 2018 20:31:05 +0000 (UTC) (envelope-from bu7cher@yandex.ru) Received: from forward106p.mail.yandex.net (forward106p.mail.yandex.net [IPv6:2a02:6b8:0:1472:2741:0:8b7:109]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "forwards.mail.yandex.net", Issuer "Yandex CA" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id E52E5799DF; Wed, 13 Jun 2018 20:31:04 +0000 (UTC) (envelope-from bu7cher@yandex.ru) Received: from mxback15g.mail.yandex.net (mxback15g.mail.yandex.net [IPv6:2a02:6b8:0:1472:2741:0:8b7:94]) by forward106p.mail.yandex.net (Yandex) with ESMTP id 5CC8E2D81412; Wed, 13 Jun 2018 23:31:01 +0300 (MSK) Received: from smtp3o.mail.yandex.net (smtp3o.mail.yandex.net [2a02:6b8:0:1a2d::27]) by mxback15g.mail.yandex.net (nwsmtp/Yandex) with ESMTP id hBhlp0Gmo0-V1IWgWOq; Wed, 13 Jun 2018 23:31:01 +0300 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1528921861; bh=cY2MBNtl1CrpFFN660VxOOv31sdM6f6AwUvGa8EfPy4=; h=Subject:To:References:From:Message-ID:Date:In-Reply-To; b=ZcCxJ5j56gYcJX1kikxnE18wEBIFW59sASbjfzeZN+4qV9kE2RPOxbqsD7gL45va+ FFn0dXGB/4NJdxDxD2E+ED6Uzn2XEQGOmndT+Bj86OF7WYqGUmHo6d2jWwc4m3jkzT 1S93kEFXJNKCpi2/9rikfZ2zBhzKUUTgOt+xI8B8= Received: by smtp3o.mail.yandex.net (nwsmtp/Yandex) with ESMTPSA id EOF5bUA0uU-V0rCQuMJ; Wed, 13 Jun 2018 23:31:00 +0300 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client certificate not present) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1528921860; bh=cY2MBNtl1CrpFFN660VxOOv31sdM6f6AwUvGa8EfPy4=; h=Subject:To:References:From:Message-ID:Date:In-Reply-To; b=DRwuUuCaJ04PV/wBMyS7YOPZmZRERDd+b2p3KZILqhI4gc+CGt0DPLIPvy3a97o1a THvFTHGG3Oqz/2cbzljPvag9wiWRiANVRzclpQST+zBU+PZLWeUOH2/cfdW0cfma2k BxKKrmmcNlGFvogKPKOJntb5rEUFZhYEnjOJ5xE0= Authentication-Results: smtp3o.mail.yandex.net; dkim=pass header.i=@yandex.ru Subject: Re: In-kernel NAT [ipfw] dropping large UDP return packets To: Jeff Kletsky , freebsd-net@freebsd.org, freebsd-ipfw@freebsd.org References: <48e750c1-e38c-5376-a937-dcbb2d871256@yandex.ru> From: "Andrey V. Elsukov" Openpgp: id=E6591E1B41DA1516F0C9BC0001C5EA0410C8A17A Autocrypt: addr=bu7cher@yandex.ru; prefer-encrypt=mutual; keydata= xsBNBEwBF1kBCADB9sXFhBEUy8qQ4X63Y8eBatYMHGEFWN9ypS5lI3RE6qQW2EYbxNk7qUC5 21YIIS1mMFVBEfvR7J9uc7yaYgFCEb6Sce1RSO4ULN2mRKGHP3/Sl0ijZEjWHV91hY1YTHEF ZW/0GYinDf56sYpDDehaBF5wkWIo1+QK5nmj3vl0DIDCMNd7QEiWpyLVwECgLX2eOAXByT8B bCqVhJGcG6iFP7/B9Ll6uX5gb8thM9LM+ibwErDBVDGiOgvfxqidab7fdkh893IBCXa82H9N CNwnEtcgzh+BSKK5BgvPohFMgRwjti37TSxwLu63QejRGbZWSz3OK3jMOoF63tCgn7FvABEB AAHNIkFuZHJleSBWLiBFbHN1a292IDxhZUBmcmVlYnNkLm9yZz7CwHsEEwECACUCGwMGCwkI BwMCBhUIAgkKCwQWAgMBAh4BAheABQJMB/ruAhkBAAoJEAHF6gQQyKF6MLwH/3Ri/TZl9uo0 SepYWXOnxL6EaDVXDA+dLb1eLKC4PRBBjX29ttQ0KaWapiE6y5/AfzOPmRtHLrHYHjd/aiHX GMLHcYRXD+5GvdkK8iMALrZ28X0JXyuuZa8rAxWIWmCbYHNSBy2unqWgTI04Erodk90IALgM 9JeHN9sFqTM6zalrMnTzlcmel4kcjT3lyYw3vOKgoYLtsLhKZSbJoVVVlvRlGBpHFJI5AoYJ SyfXoN0rcX6k9X7Isp2K50YjqxV4v78xluh1puhwZyC0p8IShPrmrp9Oy9JkMX90o6UAXdGU KfdExJuGJfUZOFBTtNIMNIAKfMTjhpRhxONIr0emxxDOwE0ETAEXWQEIAJ2p6l9LBoqdH/0J PEFDY2t2gTvAuzz+8zs3R03dFuHcNbOwjvWCG0aOmVpAzkRa8egn5JB4sZaFUtKPYJEQ1Iu+ LUBwgvtXf4vWpzC67zs2dDuiW4LamH5p6xkTD61aHR7mCB3bg2TUjrDWn2Jt44cvoYxj3dz4 S49U1rc9ZPgD5axCNv45j72tggWlZvpefThP7xT1OlNTUqye2gAwQravXpZkl5JG4eOqJVIU X316iE3qso0iXRUtO7OseBf0PiVmk+wCahdreHOeOxK5jMhYkPKVn7z1sZiB7W2H2TojbmcK HZC22sz7Z/H36Lhg1+/RCnGzdEcjGc8oFHXHCxUAEQEAAcLAXwQYAQIACQUCTAEXWQIbDAAK CRABxeoEEMihegkYCAC3ivGYNe2taNm/4Nx5GPdzuaAJGKWksV+w9mo7dQvU+NmI2az5w8vw 98OmX7G0OV9snxMW+6cyNqBrVFTu33VVNzz9pnqNCHxGvj5dL5ltP160JV2zw2bUwJBYsgYQ WfyJJIM7l3gv5ZS3DGqaGIm9gOK1ANxfrR5PgPzvI9VxDhlr2juEVMZYAqPLEJe+SSxbwLoz BcFCNdDAyXcaAzXsx/E02YWm1hIWNRxanAe7Vlg7OL+gvLpdtrYCMg28PNqKNyrQ87LQ49O9 50IIZDOtNFeR0FGucjcLPdS9PiEqCoH7/waJxWp6ydJ+g4OYRBYNM0EmMgy1N85JJrV1mi5i Message-ID: Date: Wed, 13 Jun 2018 23:28:13 +0300 User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:52.0) Gecko/20100101 Thunderbird/52.6.0 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="W9zmlRhr6HsD1pP9kGTQBXqhK1hohmu8o" X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.26 Precedence: list List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 13 Jun 2018 20:31:05 -0000 This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --W9zmlRhr6HsD1pP9kGTQBXqhK1hohmu8o Content-Type: multipart/mixed; boundary="zKCnThgmpuso9SJk2ZHT0tm5KgUw0pTAS"; protected-headers="v1" From: "Andrey V. Elsukov" To: Jeff Kletsky , freebsd-net@freebsd.org, freebsd-ipfw@freebsd.org Message-ID: Subject: Re: In-kernel NAT [ipfw] dropping large UDP return packets References: <48e750c1-e38c-5376-a937-dcbb2d871256@yandex.ru> In-Reply-To: --zKCnThgmpuso9SJk2ZHT0tm5KgUw0pTAS Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: quoted-printable On 13.06.2018 23:04, Jeff Kletsky wrote: >> The kernel version of libalias uses m_megapullup() function to make >> single contiguous buffer. m_megapullup() uses m_get2() function to >> allocate mbuf of appropriate size. If size of packet greater than 4k i= t >> will fail. So, if you use MTU greater than 4k or if after fragments >> reassembly you get a packet with length greater than 4k, ipfw_nat() >> function will drop this packet. >> > Thanks!! >=20 > Mystery solved... >=20 > /usr/src/sys/netinet/libalias/alias.c >=20 > #ifdef _KERNEL > /* > =C2=A0* m_megapullup() - this function is a big hack. > =C2=A0* Thankfully, it's only used in ng_nat and ipfw+nat. >=20 > suggests that the "old school" approach of natd might resolve this. I'l= l > give it a try when I'm close enough to the box to resolve it when I mak= e > a configuration error. I didn't look at the rest of libalias, but you, probably, can improve this hack to use 9k or 16k mbufs. You can replace m_get2() call in m_megapullup() with the following code: if (len <=3D MJUMPAGESIZE) mcl =3D m_get2(len, M_NOWAIT, MT_DATA, M_PKTHDR); else if (len <=3D MJUM9BYTES) mcl =3D m_getjcl(M_NOWAIT, MT_DATA, M_PKTHDR, MJUM9BYTES); else if (len <=3D MJUM16BYTES) mcl =3D m_getjcl(M_NOWAIT, MT_DATA, M_PKTHDR, MJUM16BYTES); else goto bad; --=20 WBR, Andrey V. Elsukov --zKCnThgmpuso9SJk2ZHT0tm5KgUw0pTAS-- --W9zmlRhr6HsD1pP9kGTQBXqhK1hohmu8o Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/ iQEzBAEBCAAdFiEE5lkeG0HaFRbwybwAAcXqBBDIoXoFAlshfl0ACgkQAcXqBBDI oXqsWgf+JCiWPm8RMV6aLLEDjEw6mqJS630ELX6QKdyoo3wAQQ7OlNylgzC/cSsD W38t7fVtK5kCQFteF0Rr6GrOBjPVJdvJYo2NeG+SqbsRaU17+xlB/Vdup+LXGKi+ jlemwOkLUUSaG36H5vPC5otUnIXua74rmrvsmhFOvrYpEnm/XX+p0Tj3ioV60s8a SmqCXGN75Wb/FRra07i3fUc5hBmsKMDHAPQwMqUuv7cgdEwDjNEJg0uQVjY0z42+ aEGbtgqdyLNrdwjDIgjH0X43mVX3tuYjo8kvvKF2WQvF1kemCLKbT+XQGftlxP9o xdFRbUscXz3oad/OQdFAlR6XNIYQ6Q== =0Y86 -----END PGP SIGNATURE----- --W9zmlRhr6HsD1pP9kGTQBXqhK1hohmu8o--