summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--etc/inc/openvpn.inc28
-rw-r--r--etc/inc/util.inc19
-rw-r--r--usr/local/www/vpn_openvpn_client.php11
-rw-r--r--usr/local/www/vpn_openvpn_server.php11
4 files changed, 54 insertions, 15 deletions
diff --git a/etc/inc/openvpn.inc b/etc/inc/openvpn.inc
index 9de908c..ad5fa87 100644
--- a/etc/inc/openvpn.inc
+++ b/etc/inc/openvpn.inc
@@ -299,18 +299,22 @@ function openvpn_reconfigure($mode,& $settings) {
$cipher = $settings['crypto'];
$interface = $settings['interface'];
- if (!$interface)
- $interface = 'WAN';
+ $ipaddr = $settings['ipaddr'];
- /* For a carp interface, the name is well known:vip1, vip2, ...*/
- if (!strncmp($interface, "vip", 3)) {
- $iface=$interface;
+ // If a specific ip address (VIP) is requested, use it.
+ // Otherwise, if a specific interface is requested, use it
+ // If "any" interface was selected, local directive will be ommited.
+ if (!empty($ipaddr)) {
+ $iface_ip=$ipaddr;
} else {
- $iface=convert_friendly_interface_to_real_interface_name($interface);
+ if ((!empty($interface)) && (strcmp($interface, "any"))) {
+ $iface=convert_friendly_interface_to_real_interface_name($interface);
+
+ // Get ip address for the requested interface
+ $lines = explode(' ', trim(shell_exec("ifconfig {$iface} | grep inet | grep -v inet6")));
+ $iface_ip = $lines[1];
+ }
}
-
- $lines = explode(' ', trim(shell_exec("ifconfig {$iface} | grep inet | grep -v inet6")));
- $iface_ip = $lines[1];
$conf = "dev {$devname}\n";
$conf .= "dev-type tun\n";
@@ -327,10 +331,12 @@ function openvpn_reconfigure($mode,& $settings) {
$conf .= "cipher {$cipher}\n";
$conf .= "up /etc/rc.filter_configure\n";
$conf .= "down /etc/rc.filter_configure\n";
- $conf .= "local {$iface_ip}\n";
- // server specific settings
+ if (!empty($iface_ip)) {
+ $conf .= "local {$iface_ip}\n";
+ }
+ // server specific settings
if ($mode == 'server') {
list($ip, $mask) = explode('/', $settings['tunnel_network']);
diff --git a/etc/inc/util.inc b/etc/inc/util.inc
index 4f084ee..b32daa3 100644
--- a/etc/inc/util.inc
+++ b/etc/inc/util.inc
@@ -361,6 +361,25 @@ function get_configured_carp_interface_list() {
return $iflist;
}
+/* return the configured IP aliases list */
+function get_configured_ip_aliases_list() {
+ global $config;
+
+ $alias_list=array();
+
+ if(is_array($config['virtualip']['vip'])) {
+ $viparr = &$config['virtualip']['vip'];
+ foreach ($viparr as $vip) {
+ if ($vip['mode']=="ipalias") {
+ $alias_list[$vip['subnet']] = $vip['interface'];
+ }
+ }
+ }
+
+ return $alias_list;
+}
+
+
/* return the configured interfaces list. */
function get_configured_interface_list($only_opt = false, $withdisabled = false) {
global $config;
diff --git a/usr/local/www/vpn_openvpn_client.php b/usr/local/www/vpn_openvpn_client.php
index f3cc139..a7abb79 100644
--- a/usr/local/www/vpn_openvpn_client.php
+++ b/usr/local/www/vpn_openvpn_client.php
@@ -81,6 +81,9 @@ if($_GET['act']=="edit"){
$pconfig['mode'] = $a_client[$id]['mode'];
$pconfig['protocol'] = $a_client[$id]['protocol'];
$pconfig['interface'] = $a_client[$id]['interface'];
+ if (!empty($a_client[$id]['ipaddr'])) {
+ $pconfig['interface'] = $pconfig['interface'] . '|' . $a_client[$id]['ipaddr'];
+ }
$pconfig['local_port'] = $a_client[$id]['local_port'];
$pconfig['server_addr'] = $a_client[$id]['server_addr'];
$pconfig['server_port'] = $a_client[$id]['server_port'];
@@ -194,7 +197,7 @@ if ($_POST) {
$client['disable'] = $pconfig['disable'];
$client['protocol'] = $pconfig['protocol'];
- $client['interface'] = $pconfig['interface'];
+ list($client['interface'], $client['ipaddr']) = explode ("|",$pconfig['interface']);
$client['local_port'] = $pconfig['local_port'];
$client['server_addr'] = $pconfig['server_addr'];
$client['server_port'] = $pconfig['server_port'];
@@ -387,7 +390,11 @@ function autotls_change() {
$interfaces = get_configured_interface_with_descr();
$carplist = get_configured_carp_interface_list();
foreach ($carplist as $cif => $carpip)
- $interfaces[$cif] = strtoupper($cif) . " ({$carpip})";
+ $interfaces[$cif.'|'.$carpip] = strtoupper($cif) . " ({$carpip})";
+ $aliaslist = get_configured_ip_aliases_list();
+ foreach ($aliaslist as $aliasip => $aliasif)
+ $interfaces[$aliasif.'|'.$aliasip] = strtoupper($aliasif) . " ({$aliasip})";
+ $interfaces['any'] = "any";
foreach ($interfaces as $iface => $ifacename):
$selected = "";
if ($iface == $pconfig['interface'])
diff --git a/usr/local/www/vpn_openvpn_server.php b/usr/local/www/vpn_openvpn_server.php
index 008fd47..8686c29 100644
--- a/usr/local/www/vpn_openvpn_server.php
+++ b/usr/local/www/vpn_openvpn_server.php
@@ -83,6 +83,9 @@ if($_GET['act']=="edit"){
$pconfig['mode'] = $a_server[$id]['mode'];
$pconfig['protocol'] = $a_server[$id]['protocol'];
$pconfig['interface'] = $a_server[$id]['interface'];
+ if (!empty($a_server[$id]['ipaddr'])) {
+ $pconfig['interface'] = $pconfig['interface'] . '|' . $a_server[$id]['ipaddr'];
+ }
$pconfig['local_port'] = $a_server[$id]['local_port'];
$pconfig['description'] = $a_server[$id]['description'];
$pconfig['custom_options'] = $a_server[$id]['custom_options'];
@@ -257,7 +260,7 @@ if ($_POST) {
$server['disable'] = $pconfig['disable'];
$server['mode'] = $pconfig['mode'];
$server['protocol'] = $pconfig['protocol'];
- $server['interface'] = $pconfig['interface'];
+ list($server['interface'], $server['ipaddr']) = explode ("|",$pconfig['interface']);
$server['local_port'] = $pconfig['local_port'];
$server['description'] = $pconfig['description'];
$server['custom_options'] = $pconfig['custom_options'];
@@ -550,7 +553,11 @@ function netbios_change() {
$interfaces = get_configured_interface_with_descr();
$carplist = get_configured_carp_interface_list();
foreach ($carplist as $cif => $carpip)
- $interfaces[$cif] = strtoupper($cif) . " ({$carpip})";
+ $interfaces[$cif.'|'.$carpip] = strtoupper($cif) . " ({$carpip})";
+ $aliaslist = get_configured_ip_aliases_list();
+ foreach ($aliaslist as $aliasip => $aliasif)
+ $interfaces[$aliasif.'|'.$aliasip] = strtoupper($aliasif) . " ({$aliasip})";
+ $interfaces['any'] = "any";
foreach ($interfaces as $iface => $ifacename):
$selected = "";
if ($iface == $pconfig['interface'])
OpenPOWER on IntegriCloud