From owner-freebsd-net@FreeBSD.ORG Mon Sep 24 21:44:56 2007 Return-Path: Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 493D316A419 for ; Mon, 24 Sep 2007 21:44:56 +0000 (UTC) (envelope-from cristi@net.utcluj.ro) Received: from bavaria.utcluj.ro (unknown [IPv6:2001:b30:5000:2:20e:cff:fe4b:ca01]) by mx1.freebsd.org (Postfix) with ESMTP id B94A913C457 for ; Mon, 24 Sep 2007 21:44:55 +0000 (UTC) (envelope-from cristi@net.utcluj.ro) Received: from localhost (localhost [127.0.0.1]) by bavaria.utcluj.ro (Postfix) with ESMTP id 8C3EF50888 for ; Tue, 25 Sep 2007 00:44:54 +0300 (EEST) X-Virus-Scanned: by the daemon playing with your mail on local.mail.utcluj.ro Received: from bavaria.utcluj.ro ([127.0.0.1]) by localhost (bavaria.utcluj.ro [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id SNFNrSnWpIf2 for ; Tue, 25 Sep 2007 00:44:48 +0300 (EEST) Received: from [172.27.2.200] (c7.campus.utcluj.ro [193.226.6.226]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by bavaria.utcluj.ro (Postfix) with ESMTP id 5260B50873 for ; Tue, 25 Sep 2007 00:44:48 +0300 (EEST) Message-ID: <46F82FCF.2090203@net.utcluj.ro> Date: Tue, 25 Sep 2007 00:44:47 +0300 From: Cristian KLEIN User-Agent: Thunderbird 1.5.0.13 (X11/20070824) MIME-Version: 1.0 To: freebsd-net@freebsd.org References: <20070924072517.GL19429@hal.rescomp.berkeley.edu> <46F77C27.9050400@net.utcluj.ro> <20070924203516.GQ19429@hal.rescomp.berkeley.edu> In-Reply-To: <20070924203516.GQ19429@hal.rescomp.berkeley.edu> X-Enigmail-Version: 0.94.2.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Subject: Re: Large-scale 1-1 NAT X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 24 Sep 2007 21:44:56 -0000 Christopher Cowart wrote: > On Mon, Sep 24, 2007 at 11:58:15AM +0300, Cristian KLEIN wrote: >> Christopher Cowart wrote: >>> We're working on expanding our wireless network. Unfortunately, we're >>> running out of IP addresses (aren't we all). As much as I'd love to just >>> tell everyone to use IPv6, that isn't gonna fly. The next plan to >>> consider is using an RFC1918 pool and NATing the traffic. >>> >>> If only it were that simple. The security folks have mandated that >>> anyone who can talk to the internet at large must be individually >>> indentifiable. This means having hundreds of users NATing to a single >>> internet-routable IP isn't happening. >> We used to have this problem too, for some NATed networks. The solution which >> has been adopted is to capture the flows on the gateway and send them the >> security team. The netflow protocol is very well suited for this. > > We have automated intake and processing for security cases. These often > just contain the IP the bad traffic appeared to be coming from. While we > could probably reconstruct things using netflow, we definitely wouldn't > have the staff time to do so. As such, we'd have to keep this > information in a database, which will add up fast. Keeping track who was > using an IP at a given time is relatively easy. Granted, this places the > complexity in the network and not the security processing, but that's > where we have resources. I must admit I haven't thought of this. With this new information I am missing a point. Since you need to make a 1-to-1 association between clients and public IPs, why do you need the NAT at all. Is this to save public IPs by NOT giving them to unauthenticated users? There is another thing I wanted to point out. I remember you used the words "authentication web page". This made me think you are establishing a captive portal, which is not secure at all. If I understand well the authpf solution would be secure, except perhaps a small delay. You might proxy your clients to a "click here and download this preconfigured PuTTY" page. >>> The real question is: what's the best way to dynamically update the NAT >>> table? >> You may use IPFW with IPNAT or PF instead. PF is able to reload its >> configuration without disruption. Moreover, because the state table is not >> flushed during a reload, you can even move NATed clients from one public IP to >> another, without them noticing. > > We would prefer to stick with ipfw. The most common documentation I've > founded is natd+ipfw. I've also seen pf+ipnat. I haven't really seen any > documentation on ipfw+ipnat. Is this possible? Or would we be able to do > ipfw+pf+ipnat? What solution would scale best to 1500-4000 authenticated > users? I have used ipfw + pf for almost a year, for about 400 clients and I am very happy with it. Note that I only use ipfw for dummynet. In all other situations I only use PF. PF uses a binary tree to store NAT states, so it isn't really affected by the number of clients. It also features state timeouts reduction based on the number of NAT states, which is very useful if one Windows station gets a "lets scan the whole /16" virus.