From owner-freebsd-net@freebsd.org Fri Nov 30 01:06:37 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 727881152D8B for ; Fri, 30 Nov 2018 01:06:37 +0000 (UTC) (envelope-from eugen@grosbein.net) Received: from hz.grosbein.net (hz.grosbein.net [IPv6:2a01:4f8:d12:604::2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "hz.grosbein.net", Issuer "hz.grosbein.net" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id C76BA8B7EA; Fri, 30 Nov 2018 01:06:26 +0000 (UTC) (envelope-from eugen@grosbein.net) Received: from eg.sd.rdtc.ru (eg.sd.rdtc.ru [IPv6:2a03:3100:c:13:0:0:0:5]) by hz.grosbein.net (8.15.2/8.15.2) with ESMTPS id wAU16HQX021093 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 30 Nov 2018 02:06:18 +0100 (CET) (envelope-from eugen@grosbein.net) X-Envelope-From: eugen@grosbein.net X-Envelope-To: lev@FreeBSD.org Received: from [10.58.0.4] (dadv@[10.58.0.4]) by eg.sd.rdtc.ru (8.15.2/8.15.2) with ESMTPS id wAU16H1Y094385 (version=TLSv1.2 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT); Fri, 30 Nov 2018 08:06:17 +0700 (+07) (envelope-from eugen@grosbein.net) Subject: Re: IPsec: is it possible to encrypt transit traffic in transport mode? To: Lev Serebryakov , freebsd-net@freebsd.org References: <1519156224.20181130021136@serebryakov.spb.ru> From: Eugene Grosbein Message-ID: Date: Fri, 30 Nov 2018 08:06:11 +0700 User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 MIME-Version: 1.0 In-Reply-To: <1519156224.20181130021136@serebryakov.spb.ru> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=0.3 required=5.0 tests=BAYES_00,LOCAL_FROM,SPF_PASS autolearn=no autolearn_force=no version=3.4.2 X-Spam-Report: * -2.3 BAYES_00 BODY: Bayes spam probability is 0 to 1% * [score: 0.0000] * -0.0 SPF_PASS SPF: sender matches SPF record * 2.6 LOCAL_FROM From my domains X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on hz.grosbein.net X-Rspamd-Queue-Id: C76BA8B7EA X-Spamd-Result: default: False [-3.62 / 15.00]; ARC_NA(0.00)[]; NEURAL_HAM_MEDIUM(-1.00)[-1.000,0]; MX_INVALID(0.50)[greylisted]; FROM_HAS_DN(0.00)[]; TO_DN_SOME(0.00)[]; TO_MATCH_ENVRCPT_ALL(0.00)[]; NEURAL_HAM_LONG(-1.00)[-1.000,0]; MIME_GOOD(-0.10)[text/plain]; DMARC_NA(0.00)[grosbein.net]; RCVD_COUNT_THREE(0.00)[3]; IP_SCORE(-2.21)[ip: (-4.43), ipnet: 2a01:4f8::/29(-3.93), asn: 24940(-2.66), country: DE(-0.02)]; R_SPF_PERMFAIL(0.00)[]; RCPT_COUNT_TWO(0.00)[2]; NEURAL_HAM_SHORT(-0.81)[-0.810,0]; FROM_EQ_ENVFROM(0.00)[]; R_DKIM_NA(0.00)[]; SUBJECT_ENDS_QUESTION(1.00)[]; ASN(0.00)[asn:24940, ipnet:2a01:4f8::/29, country:DE]; MID_RHS_MATCH_FROM(0.00)[]; RCVD_TLS_ALL(0.00)[] X-Rspamd-Server: mx1.freebsd.org X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 30 Nov 2018 01:06:37 -0000 30.11.2018 6:11, Lev Serebryakov wrote: > I have two router like this: > > [NET 10.1.0.0/24] <-> (10.1.0.1 HOST A 10.2.0.1) > <-> > (10.2.0.2 HOST B 10.10.10.1) <-> [NET 10.10.10.0/24) > > Both HOST A and HOST B tun FreeBSD, both are routers (forwrading is > enabled), host A has "route -net 10.10.10.0/24 10.2.0.2" and host B has > "route -net 10.1.0.0/24 10.2.0.1". > > I could pass traffic from 10.1.0.0/24 to 10.10.10.0/24 and back without > problems. > > Now, I want to encrypt this transit traffic between routers (!) but > without creation of tunnel. > > Is it possible to encrypt this traffic with IPsec in *transport* mode? > I've tried to create SAs for 10.2.0.1 and 10.2.0.2 and SPDs for 10.1.0.0/24 > and 10.10.10.0/24 on A and B (not on endpoint devices) but looks like it > doesn't work, traffic stops. It is not as encrypted traffic is sent but > dropped on other end, no, interfaces between Host A and Host B becomes > silent according to "tcpdump" and all forwarded/dropped/error counters in > "nestat -s" don't change anymore, only "input packets" in "netstat -s -p ip" > is still counting. > > My SAs and SPDs looks like this (for UDP only, for tests): > > Host A: > > add 10.2.0.1 10.2.0.2 esp 0x10001 -m transport -E null ""; > add 10.2.0.2 10.2.0.1 esp 0x10001 -m transport -E null ""; > > spdadd 10.1.0.0/24 10.10.10.0/24 udp -P out ipsec esp/transport//require; > spdadd 10.10.10.0/24 10.1.0.0/24 udp -P in ipsec esp/transport//require; > > Host B: > > add 10.2.0.1 10.2.0.2 esp 0x10001 -m transport -E null ""; > add 10.2.0.2 10.2.0.1 esp 0x10001 -m transport -E null ""; > > spdadd 10.10.10.0/24 10.1.0.0/24 udp -P out ipsec esp/transport//require; > spdadd 10.1.0.0/24 10.10.10.0/24 udp -P in ipsec esp/transport//require; It is possible and it is the way I use extensively for long time since very old FreeBSD versions having KAME IPSEC and it works with 11.2-STABLE, too. You need to read setkey(8) manual page, section ALGORITHMS and make sure you use proper sized keys or it won't work, though. And example of transport mode IPSEC with low-powered device having on-board Geode LX Security Block crypto accelerator with AES-128-CBC support: add 1.1.1.1 2.2.2.2 esp 1081 -m transport -E rijndael-cbc "1234567890123456" -A hmac-md5 "0123456789123456"; add 2.2.2.2 1.1.1.1 esp 2081 -m transport -E rijndael-cbc "9876543210987654" -A hmac-md5 "6543219876543210"; spdadd 1.1.1.1/32 2.2.2.2/32 any -P out ipsec esp/transport//require; spdadd 2.2.2.2/32 1.1.1.1/32 any -P in ipsec esp/transport//require; You have to use bigger keys if you use another -A algorithm like sha*, each character counts for 8 bits.