Projet

Général

Profil

Télécharger (5,96 ko) Statistiques
| Branche: | Tag: | Révision:

univnautes / etc / rc.newwanipv6 @ a94b9bef

1
#!/usr/local/bin/php -f
2
<?php
3
/*
4
        rc.newwanipv6
5
        Copyright (C) 2006 Scott Ullrich (sullrich@gmail.com)
6
        part of pfSense (https://www.pfsense.org)
7

    
8
		Originally part of m0n0wall (http://m0n0.ch)
9
        Copyright (C) 2003-2005 Manuel Kasper <mk@neon1.net>.
10
        All rights reserved.
11

    
12
        Redistribution and use in source and binary forms, with or without
13
        modification, are permitted provided that the following conditions are met:
14

    
15
        1. Redistributions of source code must retain the above copyright notice,
16
           this list of conditions and the following disclaimer.
17

    
18
        2. Redistributions in binary form must reproduce the above copyright
19
           notice, this list of conditions and the following disclaimer in the
20
           documentation and/or other materials provided with the distribution.
21

    
22
        THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
23
        INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
24
        AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25
        AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
26
        OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27
        SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28
        INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29
        CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30
        ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31
        POSSIBILITY OF SUCH DAMAGE.
32
*/
33

    
34
/* parse the configuration and include all functions used below */
35
require_once("globals.inc");
36
require_once("config.inc");
37
require_once("functions.inc");
38
require_once("filter.inc");
39
require_once("shaper.inc");
40
require_once("ipsec.inc");
41
require_once("vpn.inc");
42
require_once("openvpn.inc");
43
require_once("IPv6.inc");
44
require_once("services.inc");
45
require_once("rrd.inc");
46

    
47
function restart_packages() {
48
	global $oldipv6, $curwanipv6, $g;
49

    
50
	/* restart packages */
51
	system_ntp_configure(false);
52
	mwexec_bg("/usr/local/sbin/ntpdate_sync_once.sh", true);
53
	log_error("{$g['product_name']} package system has detected an ip change $oldipv6 ->  $curwanipv6 ... Restarting packages.");		
54
	send_event("service reload packages");
55
}
56

    
57
/* Interface IP address has changed */
58
$argument = trim($argv[1], " \n\t");
59

    
60
log_error("rc.newwanipv6: Informational is starting {$argument}.");
61

    
62
if (empty($argument)) {
63
	$interface = "wan";
64
	$interface_real = get_real_interface($interface, "inet6");
65
	$curwanipv6 = get_interface_ipv6($interface, true);
66
} else {
67
	$interface_real = $argument;
68
	$interface = convert_real_interface_to_friendly_interface_name($interface_real);
69
	$curwanipv6 = get_interface_ipv6($interface, true);
70
}
71

    
72
$interface_descr = convert_friendly_interface_to_friendly_descr($interface);
73

    
74
if (empty($interface)) {
75
	filter_configure();
76
	// restart_packages();
77
	exit;
78
}
79

    
80
//Do not process while booting
81
if ($g['booting'] && $config['interfaces'][$interface]['ipaddrv6'] != "dhcp6")
82
	exit;
83

    
84
/*
85
 * NOTE: Take care of openvpn and similar if you generate the event to reconfigure an interface.
86
 *	i.e. OpenVPN might be in tap mode and not have an ip.
87
 */
88
if ((empty($curwanipv6) || !is_ipaddrv6($curwanipv6)) && substr($interface_real, 0, 4) != "ovpn") {
89
        log_error("rc.newwanipv6: Failed to update {$interface_descr}[{$interface}] IPv6, restarting...");
90
	// send_event("interface reconfigure {$interface}");
91
        exit;
92
}
93

    
94
if (!empty($_ENV['new_domain_name_servers'])) {
95
	$name_servers = explode(" ", $_ENV['new_domain_name_servers']);
96
	$valid_ns = array();
97
	foreach($name_servers as $ns) {
98
		if (is_ipaddrv6(trim($ns)))
99
			$valid_ns[] = trim($ns);
100
	}
101

    
102
	if (count($valid_ns > 0))
103
		file_put_contents("{$g['varetc_path']}/nameserver_v6{$interface}", implode("\n", $valid_ns));
104
}
105
if (!empty($_ENV['new_domain_name']))
106
	file_put_contents("{$g['varetc_path']}/searchdomain_v6{$interface}", $_ENV['new_domain_name']);
107

    
108
/* write current WAN IPv6 to file */
109
if (is_ipaddrv6($curwanipv6))
110
	@file_put_contents("{$g['vardb_path']}/{$interface}_ipv6", $curwanipv6);
111

    
112
log_error("rc.newwanipv6: on (IP address: {$curwanipv6}) (interface: {$interface}) (real interface: {$interface_real}).");
113

    
114
$oldipv6 = "";
115
if (file_exists("{$g['vardb_path']}/{$interface}_cacheipv6"))
116
	$oldipv6 = file_get_contents("{$g['vardb_path']}/{$interface}_cacheipv6");
117

    
118
$grouptmp = link_interface_to_group($interface);
119
if (!empty($grouptmp))
120
	array_walk($grouptmp, 'interface_group_add_member');
121

    
122
link_interface_to_track6($interface, "update");
123

    
124
/* regenerate resolv.conf if DNS overrides are allowed */
125
system_resolvconf_generate(true);
126

    
127
/* reconfigure static routes (kernel may have deleted them) */
128
system_routing_configure($interface);
129

    
130
/* reconfigure our gateway monitor */
131
setup_gateways_monitor();
132

    
133
/* signal filter reload */
134
filter_configure();
135

    
136
if (is_ipaddrv6($oldipv6)) {
137
	if ($curwanipv6 == $oldipv6) {
138
		// Still need to sync VPNs on PPPoE and such, as even with the same IP the VPN software is unhappy with the IP disappearing.
139
		if (in_array($config['interfaces'][$interface]['ipaddrv6'], array('pppoe', 'pptp', 'ppp'))) {
140
			/* reconfigure IPsec tunnels */
141
			vpn_ipsec_force_reload($interface);
142

    
143
			/* start OpenVPN server & clients */
144
			if (substr($interface_real, 0, 4) != "ovpn")
145
				openvpn_resync_all($interface);
146
		}
147
		exit;
148
	} else if (does_interface_exist($interface_real))
149
		mwexec("/sbin/ifconfig {$interface_real} inet6 {$oldipv6} delete");
150

    
151
	file_put_contents("{$g['vardb_path']}/{$interface}_cacheipv6", $curwanipv6);
152
}
153

    
154
/* perform RFC 2136 DNS update */
155
services_dnsupdate_process($interface);
156

    
157
/* signal dyndns update */
158
services_dyndns_configure($interface);
159

    
160
/* reconfigure IPsec tunnels */
161
vpn_ipsec_force_reload($interface);
162

    
163
/* start OpenVPN server & clients */
164
if (substr($interface_real, 0, 4) != "ovpn")
165
	openvpn_resync_all($interface);
166

    
167
/* reload graphing functions */
168
enable_rrd_graphing();
169

    
170
/* reload igmpproxy */
171
services_igmpproxy_configure();
172

    
173
restart_packages();
174

    
175
?>
(80-80/110)