http://brainmurmurs.com/products/pulse/download.php

Pulsed's installer is hopelessly linux-centric, and makes icky (and mostly invalid) assumptions about the layout of the system. The sources do compile and run on FreeBSD 6.x, though. Just ignore all their 'convenience' scripts.

  • Prerequisites (all available through ports or packages)

    • Bison
    • GNU Make
    • Python
  • Fetch the sources and build them. The ./configure line is identical to that from linuxConfig.sh, except without the custom CFLAGS.
tar zxvf pulse-gateway-1.0-src.tgz
cd pulse-gateway
./configure --disable-lzo --without-tun --disable-ssl --prefix=/usr
gmake
  • The most important files to worry about are:
pulse-gateway/resources/createPulseConf.py
pulse-gateway/resources/pulse.header
pulse-gateway/pulsed
  • Install and configure packetfilter to NAT from 10.0.0.0/8 to your uplink.
  • Enable gateway in rc.conf
  • Install pulsed into /usr/sbin and secure to root:wheel (750) because it will not work under a mortal UID (no perms to modify routing table).
  • Patch createPulseConf.py to fix a stale route issue:
--- /etc/pulsed/createPulseConf.py.orig Thu Feb  8 04:56:17 2007
+++ /etc/pulsed/createPulseConf.py      Thu Feb  8 03:50:06 2007
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/local/bin/python
 #  Copyright (C) 2006 by Brain Murmurs, Incorporated
 #  This software is furnished under a license and may be used and copied only
 #  in accordance with the terms of such license and with the inclusion of the
@@ -61,6 +61,7 @@
        print "  };"
        print ""
        print "  down {"
+       print "    route \"delete -net 10.%s.%s.0 -netmask 255.255.255.0\";" % (bsubnet, addr)
        print "  };"
        print "}"
        print ""
  • Patch options.pulse to remove options FreeBSD pppd doesn't recognize:
--- /etc/ppp/options.pulse.orig        Thu Feb  8 04:56:17 2007
+++ /etc/ppp/options.pulse      Thu Feb  8 03:37:23 2007
@@ -1,5 +1,5 @@
 debug
-dump
+#dump
 lock
 #vj-max-slots 16
 ipparam 10.3.0.0
@@ -8,7 +8,7 @@
 mtu    8192
 mru    8192
 #kdebug 7
-logfile /var/log/system.log
+#logfile /var/log/system.log
 bsdcomp 15,15
 idle 60
 name boba

(It would also be a good thing at this point to change the ms-dns IP addresses to DNS servers that aren't part of the public Pulse network)

  • Install patched createPulseConf.py into /etc/pulsed (700)
  • Install pulse.header into /etc/pulsed (600)
  • Install patched options.pulse into /etc/ppp (600)
  • Create /etc/pulsed/pulse-users.csv (600) and populate with users, one per line:
user,pass

Caveat: Due to how the username is used, it can only consist of letters and numbers. No periods, underscores, dashes, or other punctuation or special characters.

  • cd /etc/pulsed && ./createPulseConf.py - This will rebuild /etc/pulsed/pulsed.conf and /etc/ppp/chap-secrets .. Do this every time you modify pulse.header or pulse-users.csv
  • Create a simple startup script
--- /dev/null   Thu Feb  8 05:00:00 2007
+++ /usr/local/etc/rc.d/pulsed  Thu Feb  8 04:42:39 2007
@@ -0,0 +1,48 @@
+#!/bin/sh
+#
+# PROVIDE: pulsed
+# REQUIRE: DAEMON
+# KEYWORD: shutdown
+#
+# Add the following lines to /etc/rc.conf to enable postfix:
+# pulsed_enable (bool):        Set it to "YES" to enable pulsed.
+#                              Default is "NO".
+# pulsed_pidfile (path):       Set full path to pulsed.pid.
+#                              Default is "/var/run/pulsed.pid".
+#
+
+. /etc/rc.subr
+
+name="pulsed"
+rcvar=`set_rcvar`
+
+load_rc_config $name
+
+: ${pulsed_enable="NO"}
+: ${pulsed_pidfile="/var/run/pulsed.pid"}
+
+start_cmd=${name}_start
+stop_cmd=${name}_stop
+reload_cmd=${name}_reload
+extra_commands="reload"
+
+pidfile=${pulsed_pidfile}
+
+pulsed_start() {
+       /usr/sbin/pulsed -s -f /etc/pulsed/pulsed.conf
+}
+
+pulsed_stop() {
+       killall -TERM pulsed
+}
+
+pulsed_reload() {
+       killall -HUP pulsed
+}
+
+run_rc_command "$1"
  • Enable execution at startup by inserting 'pulsed_enable="YES"' into rc.conf.

I think that's everything...