From 496ca69487f8fe78a42dc460d0583e823eebbb93 Mon Sep 17 00:00:00 2001 From: Scott Ullrich Date: Tue, 8 May 2007 16:45:54 +0000 Subject: [PATCH] Add DHCP options to OpenVPN Submitted-by: Martin Fuchs --- etc/inc/openvpn.inc | 66 ++++++++++++++++++++++++++++++++++++ usr/local/pkg/openvpn.xml | 71 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 137 insertions(+) diff --git a/etc/inc/openvpn.inc b/etc/inc/openvpn.inc index a4f9dbc58c..a388335cae 100644 --- a/etc/inc/openvpn.inc +++ b/etc/inc/openvpn.inc @@ -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 diff --git a/usr/local/pkg/openvpn.xml b/usr/local/pkg/openvpn.xml index dc3a0e188b..23bfad047a 100644 --- a/usr/local/pkg/openvpn.xml +++ b/usr/local/pkg/openvpn.xml @@ -192,6 +192,77 @@ 8 40 + + dhcp_domainname + DHCP-Opt.: DNS-Domainname + Set connection-specific DNS Suffix. + input + + + dhcp_dns + DHCP-Opt.: DNS-Server + Set domain name server addressses, separated by semi-colons (;). + input + + + dhcp_wins + DHCP-Opt.: WINS-Server + Set WINS server addressses (NetBIOS over TCP/IP Name Server), separated by semi-colons (;). + input + + + dhcp_nbdd + DHCP-Opt.: NBDD-Server + Set NBDD server addresses (NetBIOS over TCP/IP Datagram Distribution Server), separated by semi-colons (;). + input + + + dhcp_ntp + DHCP-Opt.: NTP-Server + Set NTP server addresses (Network Time Protocol), separated by semi-colons (;). + input + + + dhcp_nbttype + DHCP-Opt.: NetBIOS node type + 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). + select + + + + + + + + 0 + + + dhcp_nbtscope + DHCP-Opt.: NetBIOS Scope + 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. + input + + + dhcp_nbtdisable + DHCP-Opt.: Disable NetBIOS + If this option is set, Netbios-over-TCP/IP will be disabled. + checkbox + use_lzo LZO compression