On Tue, 5 Aug 2008 20:34:09 -0600
Duncan Patton a Campbell <[EMAIL PROTECTED]> wrote:

> Howdy List?
> 
> As some of you may have gathered from previous posts, I have been
> working on a pf configuration that will allow a gateway firewall 
> machine to talk to two or more ISP services and allow for the
> differential routing of data connections from client's services 
> both behind the firewall and on it (e.g. a TOR, HTTP server or other proxy).
> 
> An additional complexity is introduced in that most prospective
> users of such a configuration are small to medium businessess that
> engage only DHCP services from ISPs.  This means the IP address,
> default route and name servers associated with a particular service
> provider can (and do) change over the period the firewall gate 
> is up for, moreover the lease times granted can change from time
> to time.  Also, nameservers for most ISP are configured to only
> answer queries from the ISP's subnet(s) and the standard dhclient-
> script does not accomodate this.
> 
> In order to make such a configuration work, I introduce some hacks
> into the dhclient-script such that when the dhclient processess
> associated with a particular interface are triggered to renew 
> a lease, a piece of prolog code is called that touches the following
> configs:
> 
> file                          data mod
> 
> /etc/pf.conf                  gatewayIP
> /etc/resolv.conf              nameservers (for default route)
> /etc/dhclient.conf            nameservers (for dhclient routes)

This should NOT state dhclient.conf.  It is, in fact dhcpd.conf that
is modified with the nameservers for dhclients on the internal net.

Dhu


> [routetable]                  default route for firewall
> 
> To do this, I create a directory, /etc/pf, containing the following files:
> 
> file                          purpose
> 
> dhclient-script                       dhclient-script modified to call 
> replall from
>                               add_new_routes() subroutine, and stub 
>                               add_new_resolv_conf() as resolv.conf must 
>                               only reference nameservers for the default 
> route;
>                               slink'd to /sbin/dhclient-script.
> dhcpd.cnf.[interface]         one for each internal interface 
>                               to provision dhcpd services
> droute.IF                     define the firewall's default route interface
> pf.cnf                                template pf ruleset into which the 
> specific
>                               interface gateways are inserted (replall looks
>                               for lines begining with ext_gw_{IFN} ).
> replall                               slink to compiled gprolog code hooked 
> from 
>                               dhclient-script that does the various 
> manipulations.
> gplg/Makefile                 make for gprolog code
> gplg/dlib.pl                  prolog support code -- dlib==duncan's lib;)
> gplg/replall                  gprolog executable
> gplg/replall.pl                       gprolog source
> 
> 
> A completed working instance of this scheme can be found at:
> 
> http://neotext.ca/RefR/pf.dhcp/
> 
> It has been tested on a machine with 1 static and 1 DHCP gateway as
> well as on a machine with 2 DHCP gateways.
> 
> And yes, I know that most of you will think I'm daft to use prolog for 
> a task that could be done in sh/perl/python.  It's really just a matter
> of what you are most comfortable with... if a good reason comes up I might
> recode it in C.
> 
> Dhu

Reply via email to