Add description about DNS server variables to _updown
[strongswan.git] / src / _updown / _updown.in
1 #! /bin/sh
2 # iproute2 version, default updown script
3 #
4 # Copyright (C) 2003-2004 Nigel Meteringham
5 # Copyright (C) 2003-2004 Tuomo Soini
6 # Copyright (C) 2002-2004 Michael Richardson
7 # Copyright (C) 2005-2007 Andreas Steffen <andreas.steffen@strongswan.org>
8 #
9 # This program is free software; you can redistribute it and/or modify it
10 # under the terms of the GNU General Public License as published by the
11 # Free Software Foundation; either version 2 of the License, or (at your
12 # option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
13 #
14 # This program is distributed in the hope that it will be useful, but
15 # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16 # or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
17 # for more details.
18
19 # CAUTION:  Installing a new version of strongSwan will install a new
20 # copy of this script, wiping out any custom changes you make.  If
21 # you need changes, make a copy of this under another name, and customize
22 # that, and use the (left/right)updown parameters in ipsec.conf to make
23 # strongSwan use yours instead of this default one.
24
25 # things that this script gets (from ipsec_pluto(8) man page)
26 #
27 #      PLUTO_VERSION
28 #              indicates  what  version of this interface is being
29 #              used.  This document describes version  1.1.   This
30 #              is upwardly compatible with version 1.0.
31 #
32 #       PLUTO_VERB
33 #              specifies the name of the operation to be performed
34 #              (prepare-host, prepare-client, up-host, up-client,
35 #              down-host, or down-client).  If the address family
36 #              for security gateway to security gateway communica-
37 #              tions is IPv6, then a suffix of -v6 is added to the
38 #              verb.
39 #
40 #       PLUTO_CONNECTION
41 #              is the name of the  connection  for  which  we  are
42 #              routing.
43 #
44 #       PLUTO_NEXT_HOP
45 #              is the next hop to which packets bound for the peer
46 #              must be sent.
47 #
48 #       PLUTO_INTERFACE
49 #              is the name of the ipsec interface to be used.
50 #
51 #       PLUTO_REQID
52 #              is the requid of the ESP policy
53 #
54 #       PLUTO_ME
55 #              is the IP address of our host.
56 #
57 #       PLUTO_MY_ID
58 #              is the ID of our host.
59 #
60 #       PLUTO_MY_CLIENT
61 #              is the IP address / count of our client subnet.  If
62 #              the  client  is  just  the  host,  this will be the
63 #              host's own IP address / max (where max  is  32  for
64 #              IPv4 and 128 for IPv6).
65 #
66 #       PLUTO_MY_CLIENT_NET
67 #              is the IP address of our client net.  If the client
68 #              is just the host, this will be the  host's  own  IP
69 #              address.
70 #
71 #       PLUTO_MY_CLIENT_MASK
72 #              is  the  mask for our client net.  If the client is
73 #              just the host, this will be 255.255.255.255.
74 #
75 #       PLUTO_MY_SOURCEIP
76 #              if non-empty, then the source address for the route will be
77 #              set to this IP address.
78 #
79 #       PLUTO_MY_PROTOCOL
80 #              is the IP protocol that will be transported.
81 #
82 #       PLUTO_MY_PORT
83 #              is  the  UDP/TCP  port  to  which  the IPsec SA  is
84 #              restricted on our side.
85 #
86 #       PLUTO_PEER
87 #              is the IP address of our peer.
88 #
89 #       PLUTO_PEER_ID
90 #              is the ID of our peer.
91 #
92 #       PLUTO_PEER_CA
93 #              is the CA which issued the cert of our peer.
94 #
95 #       PLUTO_PEER_CLIENT
96 #              is the IP address / count of the peer's client sub-
97 #              net.   If the client is just the peer, this will be
98 #              the peer's own IP address / max (where  max  is  32
99 #              for IPv4 and 128 for IPv6).
100 #
101 #       PLUTO_PEER_CLIENT_NET
102 #              is the IP address of the peer's client net.  If the
103 #              client is just the peer, this will  be  the  peer's
104 #              own IP address.
105 #
106 #       PLUTO_PEER_CLIENT_MASK
107 #              is  the  mask  for  the  peer's client net.  If the
108 #              client   is   just   the   peer,   this   will   be
109 #              255.255.255.255.
110 #
111 #       PLUTO_PEER_PROTOCOL
112 #              is the IP protocol that will be transported.
113 #
114 #       PLUTO_PEER_PORT
115 #              is  the  UDP/TCP  port  to  which  the IPsec SA  is
116 #              restricted on the peer side.
117 #
118 #       PLUTO_XAUTH_ID
119 #              is an optional user ID employed by the XAUTH protocol
120 #
121 #       PLUTO_MARK_IN
122 #              is an optional XFRM mark set on the inbound IPsec SA
123 #
124 #       PLUTO_MARK_OUT
125 #              is an optional XFRM mark set on the outbound IPsec SA
126 #
127 #       PLUTO_UDP_ENC
128 #              contains the remote UDP port in the case of ESP_IN_UDP
129 #              encapsulation
130 #
131 #       PLUTO_DNS4_$i
132 #       PLUTO_DNS6_$i
133 #              contains IPv4/IPv6 DNS server attribute received from a
134 #              responder, $i enumerates from 1 to the number of servers per
135 #              address family.
136 #
137
138 # define a minimum PATH environment in case it is not set
139 PATH="/sbin:/bin:/usr/sbin:/usr/bin:@sbindir@"
140 export PATH
141
142 # uncomment to log VPN connections
143 VPN_LOGGING=1
144 #
145 # tag put in front of each log entry:
146 TAG=vpn
147 #
148 # syslog facility and priority used:
149 FAC_PRIO=local0.notice
150 #
151 # to create a special vpn logging file, put the following line into
152 # the syslog configuration file /etc/syslog.conf:
153 #
154 # local0.notice                   -/var/log/vpn
155
156 # in order to use source IP routing the Linux kernel options
157 # CONFIG_IP_ADVANCED_ROUTER and CONFIG_IP_MULTIPLE_TABLES
158 # must be enabled
159 #
160 # special routing table for sourceip routes
161 SOURCEIP_ROUTING_TABLE=@routing_table@
162 #
163 # priority of the sourceip routing table
164 SOURCEIP_ROUTING_TABLE_PRIO=@routing_table_prio@
165
166 # check interface version
167 case "$PLUTO_VERSION" in
168 1.[0|1])        # Older Pluto?!?  Play it safe, script may be using new features.
169         echo "$0: obsolete interface version \`$PLUTO_VERSION'," >&2
170         echo "$0:       called by obsolete Pluto?" >&2
171         exit 2
172         ;;
173 1.*)    ;;
174 *)      echo "$0: unknown interface version \`$PLUTO_VERSION'" >&2
175         exit 2
176         ;;
177 esac
178
179 # check parameter(s)
180 case "$1:$*" in
181 ':')                    # no parameters
182         ;;
183 iptables:iptables)      # due to (left/right)firewall; for default script only
184         ;;
185 custom:*)               # custom parameters (see above CAUTION comment)
186         ;;
187 *)      echo "$0: unknown parameters \`$*'" >&2
188         exit 2
189         ;;
190 esac
191
192 # utility functions for route manipulation
193 # Meddling with this stuff should not be necessary and requires great care.
194 uproute() {
195         doroute add
196         ip route flush cache
197 }
198 downroute() {
199         doroute delete
200         ip route flush cache
201 }
202
203 addsource() {
204         st=0
205         if ! ip -o route get ${PLUTO_MY_SOURCEIP%/*} | grep -q ^local
206         then
207             it="ip addr add ${PLUTO_MY_SOURCEIP%/*}/32 dev $PLUTO_INTERFACE"
208             oops="`eval $it 2>&1`"
209             st=$?
210             if test " $oops" = " " -a " $st" != " 0"
211             then
212                 oops="silent error, exit status $st"
213             fi
214             if test " $oops" != " " -o " $st" != " 0"
215             then
216                 echo "$0: addsource \`$it' failed ($oops)" >&2
217             fi
218         fi
219         return $st
220 }
221
222 doroute() {
223         st=0
224
225         if [ -z "$PLUTO_MY_SOURCEIP" ]
226         then
227             for dir in /etc/sysconfig /etc/conf.d; do
228                 if [ -f "$dir/defaultsource" ]
229                 then
230                     . "$dir/defaultsource"
231                 fi
232             done
233
234             if [ -n "$DEFAULTSOURCE" ]
235             then
236                 PLUTO_MY_SOURCEIP=$DEFAULTSOURCE
237             fi
238         fi
239
240         if [ -z "$KLIPS" -a -z "$PLUTO_MY_SOURCEIP" ]
241         then
242             # leave because no route entry is required
243             return $st
244         fi
245
246         parms1="$PLUTO_PEER_CLIENT"
247
248         if [ -n "$PLUTO_NEXT_HOP" ]
249         then
250             parms2="via $PLUTO_NEXT_HOP"
251         else
252             parms2="via $PLUTO_PEER"
253         fi
254         parms2="$parms2 dev $PLUTO_INTERFACE"
255
256         parms3=
257         if [ -n "$PLUTO_MY_SOURCEIP" ]
258         then
259             if test "$1" = "add"
260             then
261                 addsource
262                 if ! ip rule list | grep -q "lookup $SOURCEIP_ROUTING_TABLE"
263                 then
264                     ip rule add pref $SOURCEIP_ROUTING_TABLE_PRIO table $SOURCEIP_ROUTING_TABLE
265                 fi
266             fi
267             parms3="$parms3 src ${PLUTO_MY_SOURCEIP%/*} table $SOURCEIP_ROUTING_TABLE"
268         fi
269
270         case "$PLUTO_PEER_CLIENT_NET/$PLUTO_PEER_CLIENT_MASK" in
271         "0.0.0.0/0.0.0.0")
272                 # opportunistic encryption work around
273                 # need to provide route that eclipses default, without
274                 # replacing it.
275                 it="ip route $1 0.0.0.0/1 $parms2 $parms3 &&
276                         ip route $1 128.0.0.0/1 $parms2 $parms3"
277                 ;;
278         *)      it="ip route $1 $parms1 $parms2 $parms3"
279                 ;;
280         esac
281         oops="`eval $it 2>&1`"
282         st=$?
283         if test " $oops" = " " -a " $st" != " 0"
284         then
285             oops="silent error, exit status $st"
286         fi
287         if test " $oops" != " " -o " $st" != " 0"
288         then
289             echo "$0: doroute \`$it' failed ($oops)" >&2
290         fi
291         return $st
292 }
293
294 # in the presence of KLIPS and ipsecN interfaces do not use IPSEC_POLICY
295 if [ `echo "$PLUTO_INTERFACE" | grep "ipsec"` ]
296 then
297         KLIPS=1
298         IPSEC_POLICY_IN=""
299         IPSEC_POLICY_OUT=""
300 else
301         KLIPS=
302         IPSEC_POLICY="-m policy --pol ipsec --proto esp --reqid $PLUTO_REQID"
303         IPSEC_POLICY_IN="$IPSEC_POLICY --dir in"
304         IPSEC_POLICY_OUT="$IPSEC_POLICY --dir out"
305 fi
306
307 # are there port numbers?
308 if [ "$PLUTO_MY_PORT" != 0 ]
309 then
310         S_MY_PORT="--sport $PLUTO_MY_PORT"
311         D_MY_PORT="--dport $PLUTO_MY_PORT"
312 fi
313 if [ "$PLUTO_PEER_PORT" != 0 ]
314 then
315         S_PEER_PORT="--sport $PLUTO_PEER_PORT"
316         D_PEER_PORT="--dport $PLUTO_PEER_PORT"
317 fi
318
319 # resolve octal escape sequences
320 PLUTO_MY_ID=`printf "$PLUTO_MY_ID"`
321 PLUTO_PEER_ID=`printf "$PLUTO_PEER_ID"`
322
323 # the big choice
324 case "$PLUTO_VERB:$1" in
325 prepare-host:*|prepare-client:*)
326         if [ -z "$KLIPS" -a -z "$PLUTO_MY_SOURCEIP" ]
327         then
328             # exit because no route will be added,
329             # so that existing routes can stay
330             exit 0
331         fi
332
333         # delete possibly-existing route (preliminary to adding a route)
334         case "$PLUTO_PEER_CLIENT_NET/$PLUTO_PEER_CLIENT_MASK" in
335         "0.0.0.0/0.0.0.0")
336                 # need to provide route that eclipses default, without
337                 # replacing it.
338                 parms1="0.0.0.0/1"
339                 parms2="128.0.0.0/1"
340                 it="ip route delete $parms1 2>&1 ; ip route delete $parms2 2>&1"
341                 oops="`ip route delete $parms1 2>&1 ; ip route delete $parms2 2>&1`"
342                 ;;
343         *)
344                 parms="$PLUTO_PEER_CLIENT"
345                 it="ip route delete $parms 2>&1"
346                 oops="`ip route delete $parms 2>&1`"
347                 ;;
348         esac
349         status="$?"
350         if test " $oops" = " " -a " $status" != " 0"
351         then
352                 oops="silent error, exit status $status"
353         fi
354         case "$oops" in
355         *'RTNETLINK answers: No such process'*)
356                 # This is what route (currently -- not documented!) gives
357                 # for "could not find such a route".
358                 oops=
359                 status=0
360                 ;;
361         esac
362         if test " $oops" != " " -o " $status" != " 0"
363         then
364                 echo "$0: \`$it' failed ($oops)" >&2
365         fi
366         exit $status
367         ;;
368 route-host:*|route-client:*)
369         # connection to me or my client subnet being routed
370         uproute
371         ;;
372 unroute-host:*|unroute-client:*)
373         # connection to me or my client subnet being unrouted
374         downroute
375         ;;
376 up-host:)
377         # connection to me coming up
378         # If you are doing a custom version, firewall commands go here.
379         ;;
380 down-host:)
381         # connection to me going down
382         # If you are doing a custom version, firewall commands go here.
383         ;;
384 up-client:)
385         # connection to my client subnet coming up
386         # If you are doing a custom version, firewall commands go here.
387         ;;
388 down-client:)
389         # connection to my client subnet going down
390         # If you are doing a custom version, firewall commands go here.
391         ;;
392 up-host:iptables)
393         # connection to me, with (left/right)firewall=yes, coming up
394         # This is used only by the default updown script, not by your custom
395         # ones, so do not mess with it; see CAUTION comment up at top.
396         iptables -I INPUT 1 -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
397             -s $PLUTO_PEER_CLIENT $S_PEER_PORT \
398             -d $PLUTO_ME $D_MY_PORT $IPSEC_POLICY_IN -j ACCEPT
399         iptables -I OUTPUT 1 -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
400             -s $PLUTO_ME $S_MY_PORT $IPSEC_POLICY_OUT \
401             -d $PLUTO_PEER_CLIENT $D_PEER_PORT -j ACCEPT
402         #
403         # log IPsec host connection setup
404         if [ $VPN_LOGGING ]
405         then
406           if [ "$PLUTO_PEER_CLIENT" = "$PLUTO_PEER/32" ]
407           then
408             logger -t $TAG -p $FAC_PRIO \
409               "+ $PLUTO_PEER_ID $PLUTO_PEER -- $PLUTO_ME"
410           else
411             logger -t $TAG -p $FAC_PRIO \
412               "+ $PLUTO_PEER_ID $PLUTO_PEER_CLIENT == $PLUTO_PEER -- $PLUTO_ME"
413           fi
414         fi
415         ;;
416 down-host:iptables)
417         # connection to me, with (left/right)firewall=yes, going down
418         # This is used only by the default updown script, not by your custom
419         # ones, so do not mess with it; see CAUTION comment up at top.
420         iptables -D INPUT -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
421             -s $PLUTO_PEER_CLIENT $S_PEER_PORT \
422             -d $PLUTO_ME $D_MY_PORT $IPSEC_POLICY_IN -j ACCEPT
423         iptables -D OUTPUT -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
424             -s $PLUTO_ME $S_MY_PORT $IPSEC_POLICY_OUT \
425             -d $PLUTO_PEER_CLIENT $D_PEER_PORT -j ACCEPT
426         #
427         # log IPsec host connection teardown
428         if [ $VPN_LOGGING ]
429         then
430           if [ "$PLUTO_PEER_CLIENT" = "$PLUTO_PEER/32" ]
431           then
432             logger -t $TAG -p $FAC_PRIO -- \
433               "- $PLUTO_PEER_ID $PLUTO_PEER -- $PLUTO_ME"
434           else
435             logger -t $TAG -p $FAC_PRIO -- \
436             "- $PLUTO_PEER_ID $PLUTO_PEER_CLIENT == $PLUTO_PEER -- $PLUTO_ME"
437           fi
438         fi
439         ;;
440 up-client:iptables)
441         # connection to client subnet, with (left/right)firewall=yes, coming up
442         # This is used only by the default updown script, not by your custom
443         # ones, so do not mess with it; see CAUTION comment up at top.
444         if [ "$PLUTO_PEER_CLIENT" != "$PLUTO_MY_SOURCEIP/32" ]
445         then
446           iptables -I FORWARD 1 -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
447               -s $PLUTO_MY_CLIENT $S_MY_PORT \
448               -d $PLUTO_PEER_CLIENT $D_PEER_PORT $IPSEC_POLICY_OUT -j ACCEPT
449           iptables -I FORWARD 1 -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
450               -s $PLUTO_PEER_CLIENT $S_PEER_PORT \
451               -d $PLUTO_MY_CLIENT $D_MY_PORT $IPSEC_POLICY_IN -j ACCEPT
452         fi
453         #
454         # a virtual IP requires an INPUT and OUTPUT rule on the host
455         # or sometimes host access via the internal IP is needed
456         if [ -n "$PLUTO_MY_SOURCEIP" -o -n "$PLUTO_HOST_ACCESS" ]
457         then
458           iptables -I INPUT 1 -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
459               -s $PLUTO_PEER_CLIENT $S_PEER_PORT \
460               -d $PLUTO_MY_CLIENT $D_MY_PORT $IPSEC_POLICY_IN -j ACCEPT
461           iptables -I OUTPUT 1 -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
462               -s $PLUTO_MY_CLIENT $S_MY_PORT \
463               -d $PLUTO_PEER_CLIENT $D_PEER_PORT $IPSEC_POLICY_OUT -j ACCEPT
464         fi
465         #
466         # log IPsec client connection setup
467         if [ $VPN_LOGGING ]
468         then
469           if [ "$PLUTO_PEER_CLIENT" = "$PLUTO_PEER/32" ]
470           then
471             logger -t $TAG -p $FAC_PRIO \
472               "+ $PLUTO_PEER_ID $PLUTO_PEER -- $PLUTO_ME == $PLUTO_MY_CLIENT"
473           else
474             logger -t $TAG -p $FAC_PRIO \
475               "+ $PLUTO_PEER_ID $PLUTO_PEER_CLIENT == $PLUTO_PEER -- $PLUTO_ME == $PLUTO_MY_CLIENT"
476           fi
477         fi
478         ;;
479 down-client:iptables)
480         # connection to client subnet, with (left/right)firewall=yes, going down
481         # This is used only by the default updown script, not by your custom
482         # ones, so do not mess with it; see CAUTION comment up at top.
483         if [ "$PLUTO_PEER_CLIENT" != "$PLUTO_MY_SOURCEIP/32" ]
484         then
485           iptables -D FORWARD -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
486               -s $PLUTO_MY_CLIENT $S_MY_PORT \
487               -d $PLUTO_PEER_CLIENT $D_PEER_PORT \
488                  $IPSEC_POLICY_OUT -j ACCEPT
489           iptables -D FORWARD -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
490               -s $PLUTO_PEER_CLIENT $S_PEER_PORT \
491               -d $PLUTO_MY_CLIENT $D_MY_PORT \
492                  $IPSEC_POLICY_IN -j ACCEPT
493         fi
494         #
495         # a virtual IP requires an INPUT and OUTPUT rule on the host
496         # or sometimes host access via the internal IP is needed
497         if [ -n "$PLUTO_MY_SOURCEIP" -o -n "$PLUTO_HOST_ACCESS" ]
498         then
499           iptables -D INPUT -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
500               -s $PLUTO_PEER_CLIENT $S_PEER_PORT \
501               -d $PLUTO_MY_CLIENT $D_MY_PORT \
502                  $IPSEC_POLICY_IN -j ACCEPT
503           iptables -D OUTPUT -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
504               -s $PLUTO_MY_CLIENT $S_MY_PORT \
505               -d $PLUTO_PEER_CLIENT $D_PEER_PORT \
506                  $IPSEC_POLICY_OUT -j ACCEPT
507         fi
508         #
509         # log IPsec client connection teardown
510         if [ $VPN_LOGGING ]
511         then
512           if [ "$PLUTO_PEER_CLIENT" = "$PLUTO_PEER/32" ]
513           then
514             logger -t $TAG -p $FAC_PRIO -- \
515               "- $PLUTO_PEER_ID $PLUTO_PEER -- $PLUTO_ME == $PLUTO_MY_CLIENT"
516           else
517             logger -t $TAG -p $FAC_PRIO -- \
518               "- $PLUTO_PEER_ID $PLUTO_PEER_CLIENT == $PLUTO_PEER -- $PLUTO_ME == $PLUTO_MY_CLIENT"
519           fi
520         fi
521         ;;
522 #
523 # IPv6
524 #
525 prepare-host-v6:*|prepare-client-v6:*)
526         ;;
527 route-host-v6:*|route-client-v6:*)
528         # connection to me or my client subnet being routed
529         #uproute_v6
530         ;;
531 unroute-host-v6:*|unroute-client-v6:*)
532         # connection to me or my client subnet being unrouted
533         #downroute_v6
534         ;;
535 up-host-v6:)
536         # connection to me coming up
537         # If you are doing a custom version, firewall commands go here.
538         ;;
539 down-host-v6:)
540         # connection to me going down
541         # If you are doing a custom version, firewall commands go here.
542         ;;
543 up-client-v6:)
544         # connection to my client subnet coming up
545         # If you are doing a custom version, firewall commands go here.
546         ;;
547 down-client-v6:)
548         # connection to my client subnet going down
549         # If you are doing a custom version, firewall commands go here.
550         ;;
551 up-host-v6:iptables)
552         # connection to me, with (left/right)firewall=yes, coming up
553         # This is used only by the default updown script, not by your custom
554         # ones, so do not mess with it; see CAUTION comment up at top.
555         ip6tables -I INPUT 1 -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
556             -s $PLUTO_PEER_CLIENT $S_PEER_PORT \
557             -d $PLUTO_ME $D_MY_PORT $IPSEC_POLICY_IN -j ACCEPT
558         ip6tables -I OUTPUT 1 -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
559             -s $PLUTO_ME $S_MY_PORT $IPSEC_POLICY_OUT \
560             -d $PLUTO_PEER_CLIENT $D_PEER_PORT -j ACCEPT
561         #
562         # log IPsec host connection setup
563         if [ $VPN_LOGGING ]
564         then
565           if [ "$PLUTO_PEER_CLIENT" = "$PLUTO_PEER/128" ]
566           then
567             logger -t $TAG -p $FAC_PRIO \
568               "+ $PLUTO_PEER_ID $PLUTO_PEER -- $PLUTO_ME"
569           else
570             logger -t $TAG -p $FAC_PRIO \
571               "+ $PLUTO_PEER_ID $PLUTO_PEER_CLIENT == $PLUTO_PEER -- $PLUTO_ME"
572           fi
573         fi
574         ;;
575 down-host-v6:iptables)
576         # connection to me, with (left/right)firewall=yes, going down
577         # This is used only by the default updown script, not by your custom
578         # ones, so do not mess with it; see CAUTION comment up at top.
579         ip6tables -D INPUT -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
580             -s $PLUTO_PEER_CLIENT $S_PEER_PORT \
581             -d $PLUTO_ME $D_MY_PORT $IPSEC_POLICY_IN -j ACCEPT
582         ip6tables -D OUTPUT -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
583             -s $PLUTO_ME $S_MY_PORT $IPSEC_POLICY_OUT \
584             -d $PLUTO_PEER_CLIENT $D_PEER_PORT -j ACCEPT
585         #
586         # log IPsec host connection teardown
587         if [ $VPN_LOGGING ]
588         then
589           if [ "$PLUTO_PEER_CLIENT" = "$PLUTO_PEER/128" ]
590           then
591             logger -t $TAG -p $FAC_PRIO -- \
592               "- $PLUTO_PEER_ID $PLUTO_PEER -- $PLUTO_ME"
593           else
594             logger -t $TAG -p $FAC_PRIO -- \
595             "- $PLUTO_PEER_ID $PLUTO_PEER_CLIENT == $PLUTO_PEER -- $PLUTO_ME"
596           fi
597         fi
598         ;;
599 up-client-v6:iptables)
600         # connection to client subnet, with (left/right)firewall=yes, coming up
601         # This is used only by the default updown script, not by your custom
602         # ones, so do not mess with it; see CAUTION comment up at top.
603         if [ "$PLUTO_PEER_CLIENT" != "$PLUTO_MY_SOURCEIP/128" ]
604         then
605           ip6tables -I FORWARD 1 -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
606               -s $PLUTO_MY_CLIENT $S_MY_PORT \
607               -d $PLUTO_PEER_CLIENT $D_PEER_PORT $IPSEC_POLICY_OUT -j ACCEPT
608           ip6tables -I FORWARD 1 -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
609               -s $PLUTO_PEER_CLIENT $S_PEER_PORT \
610               -d $PLUTO_MY_CLIENT $D_MY_PORT $IPSEC_POLICY_IN -j ACCEPT
611         fi
612         #
613         # a virtual IP requires an INPUT and OUTPUT rule on the host
614         # or sometimes host access via the internal IP is needed
615         if [ -n "$PLUTO_MY_SOURCEIP" -o -n "$PLUTO_HOST_ACCESS" ]
616         then
617           ip6tables -I INPUT 1 -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
618               -s $PLUTO_PEER_CLIENT $S_PEER_PORT \
619               -d $PLUTO_MY_CLIENT $D_MY_PORT $IPSEC_POLICY_IN -j ACCEPT
620           ip6tables -I OUTPUT 1 -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
621               -s $PLUTO_MY_CLIENT $S_MY_PORT \
622               -d $PLUTO_PEER_CLIENT $D_PEER_PORT $IPSEC_POLICY_OUT -j ACCEPT
623         fi
624         #
625         # log IPsec client connection setup
626         if [ $VPN_LOGGING ]
627         then
628           if [ "$PLUTO_PEER_CLIENT" = "$PLUTO_PEER/128" ]
629           then
630             logger -t $TAG -p $FAC_PRIO \
631               "+ $PLUTO_PEER_ID $PLUTO_PEER -- $PLUTO_ME == $PLUTO_MY_CLIENT"
632           else
633             logger -t $TAG -p $FAC_PRIO \
634               "+ $PLUTO_PEER_ID $PLUTO_PEER_CLIENT == $PLUTO_PEER -- $PLUTO_ME == $PLUTO_MY_CLIENT"
635           fi
636         fi
637         ;;
638 down-client-v6:iptables)
639         # connection to client subnet, with (left/right)firewall=yes, going down
640         # This is used only by the default updown script, not by your custom
641         # ones, so do not mess with it; see CAUTION comment up at top.
642         if [ "$PLUTO_PEER_CLIENT" != "$PLUTO_MY_SOURCEIP/128" ]
643         then
644           ip6tables -D FORWARD -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
645               -s $PLUTO_MY_CLIENT $S_MY_PORT \
646               -d $PLUTO_PEER_CLIENT $D_PEER_PORT \
647                  $IPSEC_POLICY_OUT -j ACCEPT
648           ip6tables -D FORWARD -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
649               -s $PLUTO_PEER_CLIENT $S_PEER_PORT \
650               -d $PLUTO_MY_CLIENT $D_MY_PORT \
651                  $IPSEC_POLICY_IN -j ACCEPT
652         fi
653         #
654         # a virtual IP requires an INPUT and OUTPUT rule on the host
655         # or sometimes host access via the internal IP is needed
656         if [ -n "$PLUTO_MY_SOURCEIP" -o -n "$PLUTO_HOST_ACCESS" ]
657         then
658           ip6tables -D INPUT -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
659               -s $PLUTO_PEER_CLIENT $S_PEER_PORT \
660               -d $PLUTO_MY_CLIENT $D_MY_PORT \
661                  $IPSEC_POLICY_IN -j ACCEPT
662           ip6tables -D OUTPUT -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
663               -s $PLUTO_MY_CLIENT $S_MY_PORT \
664               -d $PLUTO_PEER_CLIENT $D_PEER_PORT \
665                  $IPSEC_POLICY_OUT -j ACCEPT
666         fi
667         #
668         # log IPsec client connection teardown
669         if [ $VPN_LOGGING ]
670         then
671           if [ "$PLUTO_PEER_CLIENT" = "$PLUTO_PEER/128" ]
672           then
673             logger -t $TAG -p $FAC_PRIO -- \
674               "- $PLUTO_PEER_ID $PLUTO_PEER -- $PLUTO_ME == $PLUTO_MY_CLIENT"
675           else
676             logger -t $TAG -p $FAC_PRIO -- \
677               "- $PLUTO_PEER_ID $PLUTO_PEER_CLIENT == $PLUTO_PEER -- $PLUTO_ME == $PLUTO_MY_CLIENT"
678           fi
679         fi
680         ;;
681 *)      echo "$0: unknown verb \`$PLUTO_VERB' or parameter \`$1'" >&2
682         exit 1
683         ;;
684 esac