Назад | Перейти на главную страницу

pfSense Shell: применить модификацию конфигурации без перезагрузки

В настоящее время я пытаюсь отредактировать конфигурацию работающего pfSense в производстве с помощью оболочки pfSsh.php. Используя pfSsh.php shell Я могу изменить конфигурацию, но как только я ее напишу, она не применяется к системе.

Есть ли способ принудительно перезагрузить конфигурацию без перезагрузки всей системы?

pfSense shell: $newIp['mode'] = 'ipalias';
pfSense shell: $newIp['interface'] = 'wan';
pfSense shell: $newIp['descr'] = 'vip1';
pfSense shell: $newIp['type'] = 'single';
pfSense shell: $newIp['subnet_bits'] = 24;
pfSense shell: $newIp['subnet'] = '192.168.0.241';
pfSense shell: $config['virtualip']['vip'][] = $newIp;
pfSense shell: parse_config(true);
pfSense shell: write_config();
pfSense shell: exec;

Если я распечатаю конфигурацию, я вижу, что vip добавлен:

     [virtualip] => Array
       (
           [vip] => Array
               (
                   [0] => Array
                       (
                           [mode] => ipalias
                           [interface] => wan
                           [uniqid] => 578aa9852a7bf
                           [descr] => test
                           [type] => single
                           [subnet_bits] => 24
                           [subnet] => 192.168.0.239
                       )

                   [1] => Array
                       (
                           [mode] => ipalias
                           [interface] => wan
                           [descr] => Unused IP
                           [type] => single
                           [subnet_bits] => 24
                           [subnet] => 192.168.0.241

Но в системе vip не добавляется, пока я не перезагружусь:

[2.3.1-RELEASE][admin@pfSense.localdomain]/root: ifconfig
em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
       options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM>
       ether 00:0c:29:22:55:0b
       inet6 fe80::20c:29ff:fe22:550b%em0 prefixlen 64 scopeid 0x1
       inet 192.168.0.240 netmask 0xffffff00 broadcast 192.168.0.255

РЕДАКТИРОВАТЬ :

Благодаря ответу Криса я использовал метод interface_ipalias_configure, который работал, как ожидалось. Я привел простой пример зацикливания, который добавляет несколько VIP-адресов с 192.168.0.74 до 79 в CARP VIP, если это может кому-то помочь.

Этот скрипт php записывается в / etc / phpshellsessions / myscript и выполняется с помощью команды «pfSsh.php play myscript» в удаленной консоли от имени администратора.

$vipPrefix = '192.168.0.';
$vipNetmask = '24';

foreach($config['virtualip']['vip'] as $k => $value) {
   $tmp[] = $value['subnet'];
}

end($config['virtualip']['vip']);

$vID = key($config['virtualip']['vip']);

for ($i = 74; $i < 80; $i++) {

    $byte = strval($i);

    if ( ! in_array( $vipPrefix.$byte , $tmp )) {

        $vID++;
        $newIp['mode'] = 'ipalias';
        $newIp['interface'] = '_vip57cc61f85d2c8';
        $newIp['descr'] = $vipPrefix.$byte;
        $newIp['type'] = 'single';
        $newIp['subnet_bits'] = $vipNetmask;
        $newIp['subnet'] = $vipPrefix.$byte;
        $newIp['uniqid'] = uniqid();
        $config['virtualip']['vip'][$vID] = $newIp;
        parse_config(true);
        write_config();
        interface_ipalias_configure($config['virtualip']['vip'][$vID]);
    }
}

print_r($config['virtualip']['vip']);

exec;

То, что вы там делаете, - это только изменение конфигурации. Во многом это правильно, но затем вам нужно применить эти изменения.

В случае с VIP проверьте, что делает firewall_virtual_ip.php при применении изменений. https://github.com/pfsense/pfsense/blob/master/src/usr/local/www/firewall_virtual_ip.php#L48

Сделайте это в своем коде после выполнения команды write_config.