Add DHCP options to OpenVPN

Submitted-by: Martin Fuchs
This commit is contained in:
Scott Ullrich 2007-05-08 16:45:54 +00:00
parent 7176618a3f
commit 496ca69487
2 changed files with 137 additions and 0 deletions

View File

@ -87,6 +87,25 @@ function openvpn_validate_input($mode, $post, $input_errors) {
if ($result = openvpn_validate_cidr($post['local_network'], 'Local network'))
$input_errors[] = $result;
// DHCP-Options logic-check
$servers = explode(';', $post['dhcp_dns']);
foreach ($servers as $server) if (!is_ipaddr($server))
{$input_errors[] = 'The field \'DHCP-Opt.: DNS-Server\' must contain a valid IP address and no whitespaces.';
break;}
$servers = explode(';', $post['dhcp_wins']);
foreach ($servers as $server) if (!is_ipaddr($server))
{$input_errors[] = 'The field \'DHCP-Opt.: WINS-Server\' must contain a valid IP address and no whitespaces.';
break;}
$servers = explode(';', $post['dhcp_nbdd']);
foreach ($servers as $server) if (!is_ipaddr($server))
{$input_errors[] = 'The field \'DHCP-Opt.: NBDD-Server\' must contain a valid IP address and no whitespaces.';
break;}
$servers = explode(';', $post['dhcp_ntp']);
foreach ($servers as $server) if (!is_ipaddr($server))
{$input_errors[] = 'The field \'DHCP-Opt.: NTP-Server\' must contain a valid IP address and no whitespaces.';
break;}
}
else { // Client mode
@ -264,6 +283,53 @@ EOD;
// The port we'll listen at
$openvpn_conf .= "lport {$settings['local_port']}\n";
// DHCP-Options
if (!empty($settings['dhcp_domainname'])) $openvpn_conf .= "push \"dhcp-option DOMAIN {$settings['dhcp_domainname']}\"\n";
if (!empty($settings['dhcp_dns'])) {
$servers = explode(';', $settings['dhcp_dns']);
if (is_array($servers)) {
foreach ($servers as $server) $openvpn_conf .= "push \"dhcp-option DNS {$server}\"\n";
}
else {
$openvpn_conf .= "push \"dhcp-option DNS {$settings['dhcp_dns']}\"\n";
}
}
if (!empty($settings['dhcp_wins'])) {
$servers = explode(';', $settings['dhcp_wins']);
if (is_array($servers)) {
foreach ($servers as $server) $openvpn_conf .= "push \"dhcp-option WINS {$server}\"\n";
}
else {
$openvpn_conf .= "push \"dhcp-option WINS {$settings['dhcp_wins']}\"\n";
}
}
if (!empty($settings['dhcp_nbdd'])) {
$servers = explode(';', $settings['dhcp_nbdd']);
if (is_array($servers)) {
foreach ($servers as $server) $openvpn_conf .= "push \"dhcp-option NBDD {$server}\"\n";
}
else {
$openvpn_conf .= "push \"dhcp-option NBDD {$settings['dhcp_nbdd']}\"\n";
}
}
if (!empty($settings['dhcp_ntp'])) {
$servers = explode(';', $settings['dhcp_ntp']);
if (is_array($servers)) {
foreach ($servers as $server) $openvpn_conf .= "push \"dhcp-option NTP {$server}\"\n";
}
else {
$openvpn_conf .= "push \"dhcp-option NTP {$settings['dhcp_ntp']}\"\n";
}
}
if (!empty($settings['dhcp_nbttype']) && $settings['dhcp_nbttype'] !=0) $openvpn_conf .= "push \"dhcp-option NBT {$settings['dhcp_nbttype']}\"\n";
if (!empty($settings['dhcp_nbtscope'])) $openvpn_conf .= "push \"dhcp-option NBS {$settings['dhcp_nbtscope']}\"\n";
if ($settings['dhcp_nbtdisable']) $openvpn_conf .= "push \"dhcp-option DISABLE-NBT\"\n";
}
else { // $mode == client

View File

@ -192,6 +192,77 @@
<rows>8</rows>
<cols>40</cols>
</field>
<field>
<fieldname>dhcp_domainname</fieldname>
<fielddescr>DHCP-Opt.: DNS-Domainname</fielddescr>
<description>Set connection-specific DNS Suffix.</description>
<type>input</type>
</field>
<field>
<fieldname>dhcp_dns</fieldname>
<fielddescr>DHCP-Opt.: DNS-Server</fielddescr>
<description>Set domain name server addressses, separated by semi-colons (;).</description>
<type>input</type>
</field>
<field>
<fieldname>dhcp_wins</fieldname>
<fielddescr>DHCP-Opt.: WINS-Server</fielddescr>
<description>Set WINS server addressses (NetBIOS over TCP/IP Name Server), separated by semi-colons (;).</description>
<type>input</type>
</field>
<field>
<fieldname>dhcp_nbdd</fieldname>
<fielddescr>DHCP-Opt.: NBDD-Server</fielddescr>
<description>Set NBDD server addresses (NetBIOS over TCP/IP Datagram Distribution Server), separated by semi-colons (;).</description>
<type>input</type>
</field>
<field>
<fieldname>dhcp_ntp</fieldname>
<fielddescr>DHCP-Opt.: NTP-Server</fielddescr>
<description>Set NTP server addresses (Network Time Protocol), separated by semi-colons (;).</description>
<type>input</type>
</field>
<field>
<fieldname>dhcp_nbttype</fieldname>
<fielddescr>DHCP-Opt.: NetBIOS node type</fielddescr>
<description>Set NetBIOS over TCP/IP Node type. Possible options: b-node (broadcasts), p-node (point-to-point name queries to a WINS server), m-node (broadcast then query name server), and h-node (query name server, then broadcast).</description>
<type>select</type>
<options>
<option>
<value>0</value>
<name>none</name>
</option>
<option>
<value>1</value>
<name>b-node</name>
</option>
<option>
<value>2</value>
<name>p-node</name>
</option>
<option>
<value>4</value>
<name>m-node</name>
</option>
<option>
<value>8</value>
<name>h-node</name>
</option>
</options>
<default_value>0</default_value>
</field>
<field>
<fieldname>dhcp_nbtscope</fieldname>
<fielddescr>DHCP-Opt.: NetBIOS Scope</fielddescr>
<description>Set NetBIOS over TCP/IP Scope. A NetBIOS Scope ID provides an extended naming service for NetBIOS over TCP/IP. The NetBIOS scope ID isolates NetBIOS traffic on a single network to only those nodes with the same NetBIOS scope ID.</description>
<type>input</type>
</field>
<field>
<fieldname>dhcp_nbtdisable</fieldname>
<fielddescr>DHCP-Opt.: Disable NetBIOS</fielddescr>
<description>If this option is set, Netbios-over-TCP/IP will be disabled.</description>
<type>checkbox</type>
</field>
<field>
<fieldname>use_lzo</fieldname>
<fielddescr>LZO compression</fielddescr>