change the prefix NATGW_ to CTDB_NATGW_
[sahlberg/ctdb.git] / config / events.d / 11.natgw
1 #!/bin/sh
2 # Script to set up one of the nodes as a NAT gateway for all other nodes.
3 # This is used to ensure that all nodes in the cluster can still originate
4 # traffic to the external network even if there are no public addresses
5 # available.
6 #
7
8 . $CTDB_BASE/functions
9 loadconfig ctdb
10
11 [ -z "$CTDB_NATGW_PUBLIC_IFACE" ] && exit 0
12
13 cmd="$1"
14 shift
15 PATH=/usr/bin:/bin:/usr/sbin:/sbin:$PATH
16
17
18 delete_all() {
19         remove_ip $CTDB_NATGW_PUBLIC_IP $CTDB_NATGW_PUBLIC_IFACE
20         remove_ip $CTDB_NATGW_PUBLIC_IP_HOST lo
21
22         ip route del 0.0.0.0/0 metric 10 >/dev/null 2>/dev/null
23
24         # Delete the masquerading setup from a previous iteration where we
25         # were the NAT-GW
26         iptables -D POSTROUTING -t nat -s $CTDB_NATGW_PRIVATE_NETWORK -d ! $CTDB_NATGW_PRIVATE_NETWORK -j MASQUERADE >/dev/null 2>/dev/null
27
28 }
29
30 case $cmd in 
31      recovered)
32         MYPNN=`ctdb pnn | cut -d: -f2`
33         NATGWMASTER=`ctdb natgwlist | head -1`
34         NATGWIP=`ctdb natgwlist | tail --lines=+2 | head -1 | cut -d: -f3`
35
36         CTDB_NATGW_PUBLIC_IP_HOST=`echo $CTDB_NATGW_PUBLIC_IP | sed -e "s/\/.*/\/32/"`
37
38         delete_all
39
40         if [ "$MYPNN" == "$NATGWMASTER" ]; then
41                 # This is the first node, set it up as the NAT GW
42                 echo 1 >/proc/sys/net/ipv4/ip_forward
43                 iptables -A POSTROUTING -t nat -s $CTDB_NATGW_PRIVATE_NETWORK -d ! $CTDB_NATGW_PRIVATE_NETWORK -j MASQUERADE
44                 ip addr add $CTDB_NATGW_PUBLIC_IP dev $CTDB_NATGW_PUBLIC_IFACE
45                 ip route add 0.0.0.0/0 via $CTDB_NATGW_DEFAULT_GATEWAY >/dev/null 2>/dev/null
46         else
47                 # This is not the NAT-GW
48                 # Assign the public ip to the private interface and make
49                 # sure we dont respond to ARPs.
50                 # We do this so that the ip address will exist on a
51                 # non-loopback interface so that samba may send it along in the
52                 # KDC requests.
53                 ip addr add $CTDB_NATGW_PUBLIC_IP_HOST dev lo
54                 ip route add 0.0.0.0/0 via $NATGWIP metric 10
55         fi
56
57         # flush our route cache
58         echo 1 > /proc/sys/net/ipv4/route/flush
59         ;;
60
61      shutdown)
62         delete_all
63         ;;
64
65 esac
66
67 exit 0