diff --git a/src/etc/inc/filter.inc b/src/etc/inc/filter.inc index acb589551..2bdad225c 100644 --- a/src/etc/inc/filter.inc +++ b/src/etc/inc/filter.inc @@ -325,12 +325,7 @@ function filter_configure_sync($verbose = false, $load_aliases = true) } $default_gw = $fw->getGateways()->getDefaultGW($down_gateways, $ipprotocol); if ($default_gw !== null) { - system_default_route( - $default_gw['gateway'], - $ipprotocol, - $default_gw['if'], - isset($default_gw['fargw']) - ); + system_default_route($default_gw['gateway'], $ipprotocol, $default_gw['if']); } } } diff --git a/src/etc/inc/system.inc b/src/etc/inc/system.inc index 215e4dfb9..43e15cbb7 100644 --- a/src/etc/inc/system.inc +++ b/src/etc/inc/system.inc @@ -449,7 +449,7 @@ function system_host_route($host, $gateway, $delete = true, $add = true) } } -function system_default_route($gateway, $family, $interface, $far = false) +function system_default_route($gateway, $family, $interface) { $realif = get_real_interface($interface, $family == 'inet' ? 'all' : 'inet6'); @@ -482,8 +482,11 @@ function system_default_route($gateway, $family, $interface, $far = false) log_error("ROUTING: creating /tmp/{$realif}_defaultgw using '{$gateway}'"); @file_put_contents("/tmp/{$realif}_defaultgw", $gateway); - if (!$far) { + list ($unused, $network) = interfaces_primary_address($interface); + if (ip_in_subnet($gateway, $network)) { $realif = null; + } else { + log_error("ROUTING: treating gateway '{$gateway}' as far gateway"); } } else { foreach (glob('/tmp/*_defaultgwv6') as $to_delete) { @@ -529,7 +532,7 @@ function system_routing_configure($verbose = false, $interface = '') log_error("ROUTING: {$logproto} default gateway set to {$gateway['interface']}"); if ((empty($interface) || $interface == $gateway['interface']) && !empty($gateway['gateway'])) { log_error("ROUTING: setting {$logproto} default route to {$gateway['gateway']}"); - system_default_route($gateway['gateway'], $ipproto, $gateway['interface'], isset($gateway['fargw'])); + system_default_route($gateway['gateway'], $ipproto, $gateway['interface']); } else { log_error("ROUTING: skipping {$logproto} default route"); }