aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorScott Ullrich <sullrich@pfsense.org>2005-03-10 22:14:08 +0000
committerScott Ullrich <sullrich@pfsense.org>2005-03-10 22:14:08 +0000
commiteb5560d6a13a64978e9b94b74f3d79ab1b7c7c2f (patch)
tree06900d2638efc826c1c522abc28bb153fe5e2b1e
parent203c2a1066f43cb732d906e6045642cfcf33774f (diff)
downloadpfsense-packages-eb5560d6a13a64978e9b94b74f3d79ab1b7c7c2f.tar.gz
pfsense-packages-eb5560d6a13a64978e9b94b74f3d79ab1b7c7c2f.tar.bz2
pfsense-packages-eb5560d6a13a64978e9b94b74f3d79ab1b7c7c2f.zip
* Seperate PFSync settings into its own menu area.
* Add IP address field for PFSync interface
-rw-r--r--packages/carp.xml48
-rw-r--r--packages/carp_rules.php23
-rw-r--r--packages/carp_settings.xml78
3 files changed, 107 insertions, 42 deletions
diff --git a/packages/carp.xml b/packages/carp.xml
index d9028537..48b9c669 100644
--- a/packages/carp.xml
+++ b/packages/carp.xml
@@ -12,7 +12,7 @@
</menu>
<tabs>
<tab>
- <text>CARP Settings</text>
+ <text>CARP Virtual IPs</text>
<url>/pkg_edit.php?xml=carp.xml</url>
<active/>
</tab>
@@ -20,8 +20,18 @@
<text>CARP Status</text>
<url>carp_status.php</url>
</tab>
+ <tab>
+ <text>CARP Settings</text>
+ <xml>carp_settings.xml</xml>
+ <active/>
+ </tab>
</tabs>
<additional_files_needed>
+ <prefix>/usr/local/pkg/</prefix>
+ <chmod>a+x</chmod>
+ <item>http://www.pfsense.com/packages/config/carp_settings.xml</item>
+ </additional_files_needed>
+ <additional_files_needed>
<prefix>/usr/local/pkg/pf/</prefix>
<chmod>a+x</chmod>
<item>http://www.pfsense.com/packages/config/carp_rules.php</item>
@@ -48,11 +58,6 @@
<fieldname>advskew</fieldname>
</columnitem>
<columnitem>
- <fielddescr>Synchronize State</fielddescr>
- <fieldname>pfsync</fieldname>
- <type>checkbox</type>
- </columnitem>
- <columnitem>
<fielddescr>Load Balancing</fielddescr>
<fieldname>balancing</fieldname>
<type>checkbox</type>
@@ -203,18 +208,6 @@
</options>
</field>
<field>
- <fielddescr>Synchrnoize State</fielddescr>
- <fieldname>pfsync</fieldname>
- <description>PFSync transfers state insertion, update, and deletion messages between firewalls. Each firewall sends these messages out via multicast on a specified interface, using the PFSYNC protocol (IP Protocol 240). It also listens on that interface for similar messages from other firewalls, and imports them into the local state table.</description>
- <type>checkbox</type>
- </field>
- <field>
- <fielddescr>Synchronize Interface</fielddescr>
- <fieldname>synciface</fieldname>
- <type>interfaces_selection</type>
- <description>If Synchronize State is enabled, it will utilize this interface for communication.</description>
- </field>
- <field>
<fielddescr>Load Balancing</fielddescr>
<fieldname>balancing</fieldname>
<description>If this feature is enabled, CARP source-hashes the originating IP of a request. The hash is then used to select a virtual host from the available pool to handle the request. This is disabled by default.</description>
@@ -261,17 +254,20 @@
fwrite($fout, $carp_command . "\n");
fwrite($fout, "/sbin/ifconfig carp{$carp_instances_counter} up\n");
if($carp['pfsync'] != "") $pfsync = 1;
- if($pfsync != 0) {
- /*
- * user has selected pfsync, bring it up.
- */
- fwrite($fout, "/sbin/ifconfig pfsync" . $pfsync_instances_counter . " create \n");
- fwrite($fout, "/sbin/ifconfig pfsync" . $pfsync_instances_counter . " up syncif " . convert_friendly_interface_to_real_interface_name($carp['synciface']) . "\n");
- $pfsync_instances_counter++;
- }
$carp_instances_counter++;
}
}
+ if($pfsync != 0) {
+ /*
+ * user has selected pfsync, bring it up.
+ */
+ $carp_sync_int = convert_friendly_interface_to_real_interface_name($config['installedpackages']['carpsettings']['config']['pfsyncinterface']);
+ $carp_sync_ip = $config['installedpackages']['carpsettings']['config']['pfsyncip'];
+ fwrite($fout, "/sbin/ifconfig pfsync0 create\n");
+ fwrite($fout, "/sbin/ifconfig pfsync0 {$carp_sync_ip}/24\n");
+ fwrite($fout, "/sbin/ifconfig pfsync0 up syncif " . carp_sync_ip . "\n");
+ $pfsync_instances_counter++;
+ }
fwrite($fout, "/etc/rc.filter_configure");
fclose($fout);
mwexec("chmod a+x /usr/local/etc/rc.d/carp.sh");
diff --git a/packages/carp_rules.php b/packages/carp_rules.php
index eaf8464a..20fd5988 100644
--- a/packages/carp_rules.php
+++ b/packages/carp_rules.php
@@ -28,34 +28,25 @@
*/
/* return if there are no carp configured items */
-//if($config['installedpackages']['carp']['config']) return;
-
+if($config['installedpackages']['carp']['config']) return;
mwexec("/sbin/pfctl -a carp -Fr");
-
/* carp records exist, lets process */
$wan_interface = get_real_wan_interface();
-$seen_sync_ints = array();
foreach($config['installedpackages']['carp']['config'] as $carp) {
$ip = $carp['ipaddress'];
$int = find_ip_interface($ip);
$carp_int = find_carp_interface($ip);
- $carp_sync_int = convert_friendly_interface_to_real_interface_name($carp['synciface']);
add_rule_to_anchor("carp", "pass out quick on {$carp_int} keep state", $carp_int . "1");
- if($carp_sync_int <> "") {
- $already_handled = 0;
- foreach($seen_sync_ints as $si) {
- if($si == $carp_sync_int) $already_handled = 1;
- }
- if($already_handled == 0) {
- array_push($seen_sync_ints, $carp_sync_int);
- add_rule_to_anchor("carp", "pass quick on {$carp_sync_int}", $carp_sync_int . "3");
- add_rule_to_anchor("carp", "pass quick on {$carp_sync_int} proto carp from {$carp_sync_int}:network to 224.0.0.18 keep state \(no-sync\)", $carp_sync_int . "2");
- }
- }
if($int <> false and $int <> $wan_interface) {
$ipnet = convert_ip_to_network_format($ip, $carp['netmask']);
$rule = "nat on {$int} inet from {$ipnet} to any -> ({$carp_int}) \n";
add_rule_to_anchor("natrules", $rule, $ip);
}
}
+$carp_sync_int = convert_friendly_interface_to_real_interface_name($config['installedpackages']['carpsettings']['config']['pfsyncinterface']);
+if($carp_sync_int <> "") {
+ add_rule_to_anchor("carp", "pass quick on {$carp_sync_int}", $carp_sync_int . "3");
+ add_rule_to_anchor("carp", "pass quick on pfsync0", "pfsync0" . "3");
+ add_rule_to_anchor("carp", "pass quick on {$carp_sync_int} proto carp from {$carp_sync_int}:network to 224.0.0.18 keep state \(no-sync\)", $carp_sync_int . "2");
+}
diff --git a/packages/carp_settings.xml b/packages/carp_settings.xml
new file mode 100644
index 00000000..2ec27719
--- /dev/null
+++ b/packages/carp_settings.xml
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<packagegui>
+ <name>carpsettings</name>
+ <version>0.1.0</version>
+ <title>Services: CARP Settings</title>
+ <!-- configpath gets expanded out automatically and config items will be
+ stored in that location -->
+ <configpath>['installedpackages']['carpsettings']['config']</configpath>
+ <!-- Menu is where this packages menu will appear -->
+ <menu>
+ <name>CARP (failover)</name>
+ <tooltiptext>CARP is a tool to help achieve system redundancy, by having multiple computers creating a single, virtual network interface between them, so that if any machine fails, another can respond instead, and/or allowing a degree of load sharing between systems. CARP is an improvement over the Virtual Router Redundancy Protocol (VRRP) standard. It was developed after VRRP was deemed to be not free enough because of a possibly-overlapping Cisco patent.</tooltiptext>
+ <section>Services</section>
+ <configfile>carp.xml</configfile>
+ </menu>
+ <tabs>
+ <tab>
+ <text>CARP Virtual IPs</text>
+ <url>/pkg_edit.php?xml=carp.xml</url>
+ <active/>
+ </tab>
+ <tab>
+ <text>CARP Status</text>
+ <url>carp_status.php</url>
+ </tab>
+ <tab>
+ <text>CARP Settings</text>
+ <xml>carp_settings.xml</xml>
+ <active/>
+ </tab>
+ </tabs>
+ <adddeleteeditpagefields>
+ <columnitem>
+ <fielddescr>PFSync Enabled</fielddescr>
+ <fieldname>pfsyncenabled</fieldname>
+ </columnitem>
+ <columnitem>
+ <fielddescr>PFSync IP</fielddescr>
+ <fieldname>pfsyncip</fieldname>
+ </columnitem>
+ <columnitem>
+ <fielddescr>PFSync Interface</fielddescr>
+ <fieldname>pfsyncinterface</fieldname>
+ </columnitem>
+ </adddeleteeditpagefields>
+ <!-- fields gets invoked when the user adds or edits a item. the following items
+ will be parsed and rendered for the user as a gui with input, and selectboxes. -->
+ <fields>
+ <field>
+ <fielddescr>Synchrnoize Enabled</fielddescr>
+ <fieldname>pfsyncenabled</fieldname>
+ <description>PFSync transfers state insertion, update, and deletion messages between firewalls. Each firewall sends these messages out via multicast on a specified interface, using the PFSYNC protocol (IP Protocol 240). It also listens on that interface for similar messages from other firewalls, and imports them into the local state table.</description>
+ <type>checkbox</type>
+ </field>
+ <field>
+ <fielddescr>Synchronize IP Address</fielddescr>
+ <fieldname>pfsyncip</fieldname>
+ <description>PFSync IP Address</description>
+ <type>input</type>
+ </field>
+ <field>
+ <fielddescr>Synchronize Interface</fielddescr>
+ <fieldname>pfsyncinterface</fieldname>
+ <type>interfaces_selection</type>
+ <description>If Synchronize State is enabled, it will utilize this interface for communication.</description>
+ </field>
+ </fields>
+ <custom_php_command_before_form>
+ </custom_php_command_before_form>
+ <custom_php_resync_config_command>
+ </custom_php_resync_config_command>
+ <custom_delete_php_command>
+ </custom_delete_php_command>
+ <custom_php_install_command>
+ </custom_php_install_command>
+ <custom_php_deinstall_command>
+ </custom_php_deinstall_command>
+</packagegui>