added ikev1/nat-virtual-ip scenario
[strongswan.git] / testing / tests / ikev1 / nat-virtual-ip / hosts / moon / etc / nat_updown
1 #! /bin/sh
2 # NAT updown script
3 #
4 # Copyright (C) 2010 Andreas Steffen <andreas.steffen@strongswan.org>
5 #
6 # This program is free software; you can redistribute it and/or modify it
7 # under the terms of the GNU General Public License as published by the
8 # Free Software Foundation; either version 2 of the License, or (at your
9 # option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
10 #
11 # This program is distributed in the hope that it will be useful, but
12 # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13 # or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14 # for more details.
15
16 # things that this script gets (from ipsec_pluto(8) man page)
17 #
18 #      PLUTO_VERSION
19 #              indicates  what  version of this interface is being
20 #              used.  This document describes version  1.1.   This
21 #              is upwardly compatible with version 1.0.
22 #
23 #       PLUTO_VERB
24 #              specifies the name of the operation to be performed
25 #              (prepare-host, prepare-client, up-host, up-client,
26 #              down-host, or down-client).  If the address family
27 #              for security gateway to security gateway communica-
28 #              tions is IPv6, then a suffix of -v6 is added to the
29 #              verb.
30 #
31 #       PLUTO_CONNECTION
32 #              is the name of the  connection  for  which  we  are
33 #              routing.
34 #
35 #       PLUTO_NEXT_HOP
36 #              is the next hop to which packets bound for the peer
37 #              must be sent.
38 #
39 #       PLUTO_INTERFACE
40 #              is the name of the ipsec interface to be used.
41 #
42 #       PLUTO_REQID
43 #              is the requid of the ESP policy
44 #
45 #       PLUTO_ME
46 #              is the IP address of our host.
47 #
48 #       PLUTO_MY_ID
49 #              is the ID of our host.
50 #
51 #       PLUTO_MY_CLIENT
52 #              is the IP address / count of our client subnet.  If
53 #              the  client  is  just  the  host,  this will be the
54 #              host's own IP address / max (where max  is  32  for
55 #              IPv4 and 128 for IPv6).
56 #
57 #       PLUTO_MY_CLIENT_NET
58 #              is the IP address of our client net.  If the client
59 #              is just the host, this will be the  host's  own  IP
60 #              address.
61 #
62 #       PLUTO_MY_CLIENT_MASK
63 #              is  the  mask for our client net.  If the client is
64 #              just the host, this will be 255.255.255.255.
65 #
66 #       PLUTO_MY_SOURCEIP
67 #              if non-empty, then the source address for the route will be
68 #              set to this IP address.
69 #
70 #       PLUTO_MY_PROTOCOL
71 #              is the IP protocol that will be transported.
72 #
73 #       PLUTO_MY_PORT
74 #              is  the  UDP/TCP  port  to  which  the IPsec SA  is
75 #              restricted on our side.
76 #
77 #       PLUTO_PEER
78 #              is the IP address of our peer.
79 #
80 #       PLUTO_PEER_ID
81 #              is the ID of our peer.
82 #
83 #       PLUTO_PEER_CA
84 #              is the CA which issued the cert of our peer.
85 #
86 #       PLUTO_PEER_CLIENT
87 #              is the IP address / count of the peer's client sub-
88 #              net.   If the client is just the peer, this will be
89 #              the peer's own IP address / max (where  max  is  32
90 #              for IPv4 and 128 for IPv6).
91 #
92 #       PLUTO_PEER_CLIENT_NET
93 #              is the IP address of the peer's client net.  If the
94 #              client is just the peer, this will  be  the  peer's
95 #              own IP address.
96 #
97 #       PLUTO_PEER_CLIENT_MASK
98 #              is  the  mask  for  the  peer's client net.  If the
99 #              client   is   just   the   peer,   this   will   be
100 #              255.255.255.255.
101 #
102 #       PLUTO_PEER_PROTOCOL
103 #              is the IP protocol that will be transported.
104 #
105 #       PLUTO_PEER_PORT
106 #              is  the  UDP/TCP  port  to  which  the IPsec SA  is
107 #              restricted on the peer side.
108 #
109
110 # define a minimum PATH environment in case it is not set
111 PATH="/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin"
112 export PATH
113
114 # resolve octal escape sequences
115 PLUTO_MY_ID=`printf "$PLUTO_MY_ID"`
116 PLUTO_PEER_ID=`printf "$PLUTO_PEER_ID"`
117
118 case "$PLUTO_VERB:$1" in
119 up-host:)
120         # connection to me coming up
121         # If you are doing a custom version, firewall commands go here.
122         ;;
123 down-host:)
124         # connection to me going down
125         # If you are doing a custom version, firewall commands go here.
126         ;;
127 up-client:)
128         # connection to my client subnet coming up
129         # If you are doing a custom version, firewall commands go here.
130         iptables -A FORWARD -i eth1 -o $PLUTO_INTERFACE -s PH_IP_ALICE \
131             -d $PLUTO_PEER_CLIENT -j ACCEPT
132         iptables -A FORWARD -o eth1 -i $PLUTO_INTERFACE -d PH_IP_ALICE \
133             -s $PLUTO_PEER_CLIENT -j ACCEPT
134         iptables -t nat -A POSTROUTING -o $PLUTO_INTERFACE -s PH_IP_ALICE \
135             -d $PLUTO_PEER_CLIENT -j SNAT --to-source $PLUTO_MY_SOURCEIP
136         echo "inserted NAT rule mapping PH_IP_ALICE to virtual IP $PLUTO_MY_SOURCEIP" >&2 
137         ;;
138 down-client:)
139         # connection to my client subnet going down
140         # If you are doing a custom version, firewall commands go here.
141         iptables -D FORWARD -i eth1 -o $PLUTO_INTERFACE -s PH_IP_ALICE \
142             -d $PLUTO_PEER_CLIENT -j ACCEPT
143         iptables -D FORWARD -o eth1 -i $PLUTO_INTERFACE -d PH_IP_ALICE \
144             -s $PLUTO_PEER_CLIENT -j ACCEPT
145          iptables -t nat -D POSTROUTING -o $PLUTO_INTERFACE -s PH_IP_ALICE \
146             -d $PLUTO_PEER_CLIENT -j SNAT --to-source $PLUTO_MY_SOURCEIP
147         echo "deleted NAT rule mapping PH_IP_ALICE to virtual IP $PLUTO_MY_SOURCEIP" >&2    
148         ;;
149 *)      echo "$0: unknown verb \`$PLUTO_VERB' or parameter \`$1'" >&2
150         exit 1
151         ;;
152 esac