openbsd-ports/net/poptop/files
..
README.OpenBSD

                     PoPToP - Unix PPTP Server
                   ----------------------------
1. Kernel
   PoPToP requires a kernel compiled without GRE support.  See sections 5.3
   and 5.4 of the OpenBSD FAQ for instructions on compiling a custom kernel
   http://www.openbsd.org/faq/faq5.html#Options Essentially:
1.1 Configuration
   Grab a copy of the src tree (CD3 - src.tar.gz), you'll probably want to
   sync this to -STABLE.
        (See http://www.openbsd.org/faq/faq3.html#GetCurrent)
   Make a copy of src/sys/conf/GENERIC (We'll call it PPTPSrv) Comment out
   the following line:
        pseudo-device   gre     1       # GRE encapsulation interface
   Make a copy of src/sys/arch/`uname -m`/conf/GENERIC (We'll copy to PPTPSrv)
   Edit the line:
        include "../../../conf/GENERIC"
   to point to the modified configuration file in src/sys/conf/ In our case:
        include "../../../conf/PPTPSrv"
1.2 Compilation
   In the src/sys/arch/`uname -m`/conf directory, execute config with the
   name of the modified configuration file.  (In our case PPTPSrv), then build
   a new kernel.
        /usr/sbin/config PPTPSrv cd ../compile/PPTPSrv make clean && make
        depend && make
   We now have a new kernel in src/sys/arch/`uname -m`/compile/ called 'bsd'
   Backup old kernel
        mv /bsd /bsd.old
   Copy new kernel
        cp src/sys/arch/`uname -m`/compile/PPTPSrv/bsd /bsd
   Reboot. Note: If your source has changed (e.g. you updated to -STABLE),
   you will most likely need to rebuild the rest of the source tree after
   reboot.
2. Configuration of PPTP
   A sample configuration file is copied into your configuration directory
   (normally /etc) as pptpd.conf. Personalise this config file to suit. At
   least configure 'localip' and 'remoteip'.  Only 'localip' needs to be
   configured on one of your interfaces.
3. Configuration of PPP
   PoPToP only handles a small part of the PPTP connection, most of the work
   is done by PPP.
3.1 /etc/ppp/options
   General desired options:
        proxyarp
   For Microsoft clients you will want the following options:
        +MSChap-V2 mppe-128 mppe-stateless
   Lower cryptography level (40-bit v 128-bit) is also available, but not
   recommended.
        mppe-40
   Optional for Microsoft clients (not preferred)
        +MSChap
3.2 /etc/ppp/ppp.conf
   In ppp.conf create a section pptp
        pptp: enable proxy set dns IP.Of.DNS.Server1 IP.Of.DNS.Server2 set
        ifaddr Local.IP Remote.IP set timeout 0
   For non-Microsoft clients chose your authentication method (one or more
   of):
        enable pap enable chap
   For Microsoft clients you will also want:
        enable MSChapV2
   If you chose "+MSChap" in options above you can enable it with
        enable MSChap
   If you have a WINS server:
        set nbns IP.Of.WINS.Server
3.3 Users and Passwords
   You will now need to create username/password entries for your users in
   /etc/ppp/ppp.secret. See /etc/ppp/ppp.secret.sample for examples. If you
   assigned a range to 'remoteip' in the above configuration files, you can
   assign per-user IPs for accounting purposes here (third field).
4. Firewalls
   There are three flows you will need to create.  An inbound TCP connection
   to port 1723 (Initial connection)
        pass in  quick on $ext_if proto tcp from any to $ext_ip port = 1723 \
        modulate state
   An inbound and outbound GRE connection (The main data channel)
        pass in  quick on $ext_if proto gre from any to $ext_ip keep state
        pass out quick on $ext_if proto gre from $ext_ip to any keep state
   Where $ext_ip is the externally accessable IP address ('host' in the PPTP
   client config).
   Also, make sure you have flows defined to allow the traffic out of your 
   server. The traffic will appear to be from the IP address defined in
   ppp.secret, or if not defined there, Remote.IP as defined in ppp.conf
   (first available if this a pool).