summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Schwenke <martin@meltin.net>2014-03-07 15:11:36 +1100
committerAmitay Isaacs <amitay@samba.org>2014-03-26 04:21:42 +0100
commit34682affe9f19432851d5f921b58e692e5c6274d (patch)
treea2714f3c6474bebeebd6a3f828052f007572036c
parent7705efc35551a083873e2fed91ac42d021669df9 (diff)
downloadsamba-34682affe9f19432851d5f921b58e692e5c6274d.tar.gz
samba-34682affe9f19432851d5f921b58e692e5c6274d.tar.xz
samba-34682affe9f19432851d5f921b58e692e5c6274d.zip
ctdb-eventscripts: New configuration variable CTDB_NATGW_STATIC_ROUTES
This can be used to create more specific NATGW routes than the usual NATGW default route. Signed-off-by: Martin Schwenke <martin@meltin.net>
-rwxr-xr-xctdb/config/events.d/11.natgw15
-rw-r--r--ctdb/doc/ctdb.7.xml12
-rw-r--r--ctdb/doc/ctdbd.conf.5.xml42
3 files changed, 64 insertions, 5 deletions
diff --git a/ctdb/config/events.d/11.natgw b/ctdb/config/events.d/11.natgw
index b97eca5e30..45b4d212ae 100755
--- a/ctdb/config/events.d/11.natgw
+++ b/ctdb/config/events.d/11.natgw
@@ -24,6 +24,9 @@ natgw_check_config ()
die "Invalid configuration: CTDB_NATGW_PUBLIC_IFACE not set"
[ -n "$CTDB_NATGW_PRIVATE_NETWORK" ] || \
die "Invalid configuration: CTDB_NATGW_PRIVATE_NETWORK not set"
+
+ # The default is to create a single default route
+ [ -n "$CTDB_NATGW_STATIC_ROUTES" ] || CTDB_NATGW_STATIC_ROUTES="0.0.0.0/0"
}
natgw_set_capability ()
@@ -43,7 +46,9 @@ natgw_clear ()
delete_ip_from_iface \
$CTDB_NATGW_PUBLIC_IFACE $_ip $_maskbits >/dev/null 2>&1
- ip route del 0.0.0.0/0 metric 10 >/dev/null 2>/dev/null
+ for _net in $CTDB_NATGW_STATIC_ROUTES ; do
+ ip route del "$_net" metric 10 >/dev/null 2>/dev/null
+ done
# Delete the masquerading setup from a previous iteration where we
# were the NAT-GW
@@ -70,7 +75,9 @@ natgw_set_master ()
ip addr add $CTDB_NATGW_PUBLIC_IP dev $CTDB_NATGW_PUBLIC_IFACE
if [ -n "$CTDB_NATGW_DEFAULT_GATEWAY" ] ; then
- ip route add 0.0.0.0/0 metric 10 via $CTDB_NATGW_DEFAULT_GATEWAY
+ for _net in $CTDB_NATGW_STATIC_ROUTES ; do
+ ip route add "$_net" metric 10 via $CTDB_NATGW_DEFAULT_GATEWAY
+ done
fi
}
@@ -78,7 +85,9 @@ natgw_set_slave ()
{
_natgwip="$1"
- ip route add 0.0.0.0/0 via "$_natgwip" metric 10
+ for _net in $CTDB_NATGW_STATIC_ROUTES ; do
+ ip route add "$_net" via "$_natgwip" metric 10
+ done
# Make sure winbindd does not stay bound to this address if we are
# no longer NATGW master
diff --git a/ctdb/doc/ctdb.7.xml b/ctdb/doc/ctdb.7.xml
index d640300024..f48d5a6299 100644
--- a/ctdb/doc/ctdb.7.xml
+++ b/ctdb/doc/ctdb.7.xml
@@ -655,9 +655,17 @@ CTDB_NATGW_DEFAULT_GATEWAY=10.0.0.1
</para>
<para>
+ <varname>CTDB_NATGW_STATIC_ROUTES</varname> can be used to
+ have NATGW create more specific routes instead of just default
+ routes.
+ </para>
+
+ <para>
This is implemented in the <filename>11.natgw</filename>
- eventscript. Please see the eventscript file for the finer
- details.
+ eventscript. Please see the eventscript file and the
+ <citetitle>NAT GATEWAY</citetitle> section in
+ <citerefentry><refentrytitle>ctdbd.conf</refentrytitle>
+ <manvolnum>5</manvolnum></citerefentry> for more details.
</para>
</refsect2>
diff --git a/ctdb/doc/ctdbd.conf.5.xml b/ctdb/doc/ctdbd.conf.5.xml
index 6d164f6cfc..ff064cfffd 100644
--- a/ctdb/doc/ctdbd.conf.5.xml
+++ b/ctdb/doc/ctdbd.conf.5.xml
@@ -545,6 +545,31 @@
</listitem>
</varlistentry>
+ <varlistentry>
+ <term>CTDB_NATGW_STATIC_ROUTES=<parameter>IPADDR/MASK</parameter> ...</term>
+ <listitem>
+ <para>
+ Each IPADDR/MASK identifies a network or host to which
+ NATGW should create a fallback route, instead of
+ creating a single default route. This can be used when
+ there is already a default route, via an interface that
+ can not reach required infrastructure, that overrides
+ the NAT gateway default route.
+ </para>
+ <para>
+ This should be used with care to avoid causing traffic
+ to unnecessarily double-hop through the NAT gateway
+ master, even when a node is hosting public IP addresses.
+ Each specified network or host should probably have a
+ corresponding automatically created link route or static
+ route to avoid this.
+ </para>
+ <para>
+ No default.
+ </para>
+ </listitem>
+ </varlistentry>
+
</variablelist>
<refsect3>
@@ -556,6 +581,23 @@ CTDB_NATGW_DEFAULT_GATEWAY=10.0.0.1
CTDB_NATGW_PUBLIC_IP=10.0.0.227/24
CTDB_NATGW_PUBLIC_IFACE=eth0
</screen>
+
+ <para>
+ A variation that ensures that infrastructure (ADS, DNS, ...)
+ directly attached to the public network (10.0.0.0/24) is
+ always reachable would look like this:
+ </para>
+ <screen>
+CTDB_NATGW_NODES=/etc/ctdb/natgw_nodes
+CTDB_NATGW_PRIVATE_NETWORK=192.168.1.0/24
+CTDB_NATGW_PUBLIC_IP=10.0.0.227/24
+CTDB_NATGW_PUBLIC_IFACE=eth0
+CTDB_NATGW_STATIC_ROUTES=10.0.0.0/24
+ </screen>
+ <para>
+ Note that <varname>CTDB_NATGW_DEFAULT_GATEWAY</varname> is
+ not specified.
+ </para>
</refsect3>
</refsect2>