mirror of
https://github.com/lucaspalomodevelop/core.git
synced 2026-03-13 00:07:26 +00:00
interfaces: do not give all trackers the same IPv6 in 6rd / 6to4
PR: https://github.com/opnsense/core/issues/2663
This commit is contained in:
parent
2cb88d030e
commit
a241040662
@ -2620,17 +2620,17 @@ function interface_track6_6rd_configure($interface = 'lan', $lancfg)
|
||||
$rd6lanbin = str_pad($rd6lanbin, 128, "0", STR_PAD_RIGHT);
|
||||
|
||||
/* convert the 128 bits for the lan address back into a valid IPv6 address */
|
||||
$rd6lan = convert_128bit_to_ipv6($rd6lanbin) ."1";
|
||||
$rd6lan = convert_128bit_to_ipv6($rd6lanbin) . (1 + get_interface_number_track6($lancfg['track6-interface'], $interface));
|
||||
|
||||
$lanif = get_real_interface($interface, 'inet6');
|
||||
$oip = find_interface_ipv6($lanif);
|
||||
if (is_ipaddrv6($oip)) {
|
||||
mwexec("/sbin/ifconfig {$lanif} inet6 {$oip} delete");
|
||||
}
|
||||
log_error("rd6 {$interface} with ipv6 address {$rd6lan} based on {$lancfg['track6-interface']} ipv4 {$ip4address}");
|
||||
mwexec("/sbin/ifconfig {$lanif} inet6 {$rd6lan} prefixlen 64");
|
||||
|
||||
return 0;
|
||||
log_error("rd6 {$interface} with ipv6 address {$rd6lan} based on {$lancfg['track6-interface']} ipv4 {$ip4address}");
|
||||
/* XXX why 64? */
|
||||
mwexec("/sbin/ifconfig {$lanif} inet6 {$rd6lan} prefixlen 64");
|
||||
}
|
||||
|
||||
function interface_track6_6to4_configure($interface = 'lan', $lancfg)
|
||||
@ -2660,17 +2660,17 @@ function interface_track6_6to4_configure($interface = 'lan', $lancfg)
|
||||
$sixto4lanbin = str_pad($sixto4lanbin, 128, "0", STR_PAD_RIGHT);
|
||||
|
||||
/* convert the 128 bits for the lan address back into a valid IPv6 address */
|
||||
$sixto4lan = convert_128bit_to_ipv6($sixto4lanbin) ."1";
|
||||
$sixto4lan = convert_128bit_to_ipv6($sixto4lanbin) . (1 + get_interface_number_track6($lancfg['track6-interface'], $interface));
|
||||
|
||||
$lanif = get_real_interface($interface, 'inet6');
|
||||
$oip = find_interface_ipv6($lanif);
|
||||
if (is_ipaddrv6($oip)) {
|
||||
mwexec("/sbin/ifconfig {$lanif} inet6 {$oip} delete");
|
||||
}
|
||||
log_error("sixto4 {$interface} with ipv6 address {$sixto4lan} based on {$lancfg['track6-interface']} ipv4 {$ip4address}");
|
||||
mwexec("/sbin/ifconfig {$lanif} inet6 {$sixto4lan} prefixlen 64");
|
||||
|
||||
return 0;
|
||||
log_error("sixto4 {$interface} with ipv6 address {$sixto4lan} based on {$lancfg['track6-interface']} ipv4 {$ip4address}");
|
||||
/* XXX why 64? */
|
||||
mwexec("/sbin/ifconfig {$lanif} inet6 {$sixto4lan} prefixlen 64");
|
||||
}
|
||||
|
||||
function interface_6rd_configure($interface = 'wan', $wancfg)
|
||||
@ -2845,8 +2845,6 @@ function interface_6to4_configure($interface = 'wan', $wancfg)
|
||||
if (!file_exists("/var/run/booting")) {
|
||||
link_interface_to_track6($interface, true);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
function interface_dhcpv6_configure($interface = 'wan', $wancfg)
|
||||
@ -3759,6 +3757,22 @@ function guess_interface_from_ip($ipaddress)
|
||||
return $ret;
|
||||
}
|
||||
|
||||
function get_interface_number_track6($wanif, $targetif)
|
||||
{
|
||||
$list = link_interface_to_track6($wanif);
|
||||
$number = 0;
|
||||
|
||||
foreach ($list as $lanif => $unused) {
|
||||
if ($lanif == $targetif) {
|
||||
return $number;
|
||||
}
|
||||
$number += 1;
|
||||
}
|
||||
|
||||
/* if we fail give backwards-compat */
|
||||
return 0;
|
||||
}
|
||||
|
||||
function link_interface_to_track6($wanif, $update = false)
|
||||
{
|
||||
$list = array();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user