mirror of
				https://github.com/Ysurac/openmptcprouter-feeds.git
				synced 2025-03-09 15:40:03 +00:00 
			
		
		
		
	Changes for MPTCPoverVPN
This commit is contained in:
		
							parent
							
								
									3f2d37f810
								
							
						
					
					
						commit
						1400f7b0aa
					
				
					 4 changed files with 184 additions and 8 deletions
				
			
		| 
						 | 
				
			
			@ -311,7 +311,7 @@
 | 
			
		|||
				temp += '</a></td></tr></table>';
 | 
			
		||||
				temp += '</td>';
 | 
			
		||||
			}
 | 
			
		||||
			if (mArray !== null && mArray.wans)
 | 
			
		||||
			if (mArray !== null && (mArray.wans || mArray.tunnels))
 | 
			
		||||
			{
 | 
			
		||||
				temp += '<td><ul>';
 | 
			
		||||
				var master = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -471,6 +471,162 @@
 | 
			
		|||
 | 
			
		||||
					temp += '</a></li>';
 | 
			
		||||
				}
 | 
			
		||||
				for( var i = 0; i < mArray.tunnels.length; i++ )
 | 
			
		||||
				{
 | 
			
		||||
					// Get link color
 | 
			
		||||
					mArray.tunnels[i].color = stringToColour(mArray.tunnels[i].name)
 | 
			
		||||
					// Mwan status infos and colors
 | 
			
		||||
					var stat = '';
 | 
			
		||||
					var cssc = '';
 | 
			
		||||
					switch (mArray.tunnels[i].status)
 | 
			
		||||
					{
 | 
			
		||||
						case 'OK':
 | 
			
		||||
							stat = 'Online';
 | 
			
		||||
							cssc = 'rgb(144, 240, 144)';
 | 
			
		||||
							statusIcon = "<%=resource%>/openmptcprouter/images/statusOK.png";
 | 
			
		||||
							statusMessageClass = "";
 | 
			
		||||
							statusMessage = "";
 | 
			
		||||
							break;
 | 
			
		||||
						case 'ERROR':
 | 
			
		||||
							stat = 'Offline';
 | 
			
		||||
							cssc = 'rgb(240, 144, 144)';
 | 
			
		||||
							statusIcon = "<%=resource%>/openmptcprouter/images/statusError.png";
 | 
			
		||||
							statusMessageClass = "error";
 | 
			
		||||
							statusMessage = "";
 | 
			
		||||
							break;
 | 
			
		||||
						default:
 | 
			
		||||
							stat = 'Unknown';
 | 
			
		||||
							cssc = 'rgb(144, 240, 144)';
 | 
			
		||||
							statusIcon = "<%=resource%>/openmptcprouter/images/statusWarning.png";
 | 
			
		||||
							statusMessageClass = "warning";
 | 
			
		||||
							statusMessage = "";
 | 
			
		||||
					}
 | 
			
		||||
					// Populate info
 | 
			
		||||
					var wanip   = mArray.tunnels[i].wanip;
 | 
			
		||||
					if (anonymize == "true" && testPrivateIP(wanip) == false)
 | 
			
		||||
					{
 | 
			
		||||
						wanip=replaceLastNChars(wanip,"x",6);
 | 
			
		||||
					}
 | 
			
		||||
					var ipaddr   = mArray.tunnels[i].ipaddr;
 | 
			
		||||
					if (anonymize == "true" && testPrivateIP(ipaddr) == false)
 | 
			
		||||
					{
 | 
			
		||||
						ipaddr=replaceLastNChars(ipaddr,"x",6);
 | 
			
		||||
					}
 | 
			
		||||
					var whois   = mArray.tunnels[i].whois;
 | 
			
		||||
					var multipath = mArray.tunnels[i].multipath;
 | 
			
		||||
					if(multipath == 'master')
 | 
			
		||||
					{
 | 
			
		||||
						master++;
 | 
			
		||||
					}
 | 
			
		||||
					var latency = mArray.tunnels[i].latency;
 | 
			
		||||
					var mtu = mArray.tunnels[i].mtu;
 | 
			
		||||
					var gateway = mArray.tunnels[i].gateway;
 | 
			
		||||
					if (anonymize == "true" && testPrivateIP(gateway) == false)
 | 
			
		||||
					{
 | 
			
		||||
						gateway=replaceLastNChars(gateway,"x",6);
 | 
			
		||||
					}
 | 
			
		||||
					var gw_ping = mArray.tunnels[i].gw_ping;
 | 
			
		||||
					var server_ping = mArray.tunnels[i].server_ping;
 | 
			
		||||
					var ipv6_discover = mArray.tunnels[i].ipv6_discover;
 | 
			
		||||
					var multipath_available = mArray.tunnels[i].multipath_available;
 | 
			
		||||
					var multipath_state = mArray.tunnels[i].multipath_state;
 | 
			
		||||
					var duplicateif = mArray.tunnels[i].duplicateif;
 | 
			
		||||
					// Generate template
 | 
			
		||||
					if(mArray.openmptcprouter.remote_from_lease == true && mArray.tunnels.length == 1)
 | 
			
		||||
					{
 | 
			
		||||
						temp += String.format('<li class="subnode-only-child"><a href="%q">', mArray.tunnels[i].link);
 | 
			
		||||
					} else {
 | 
			
		||||
						temp += String.format('<li><a href="%q">', mArray.tunnels[i].link);
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
					var equipmentIcon = String.format('<embed id="modem_%s" onload="setColorSVG(\'modem_%s\', \'%s\')" src="<%=resource%>/modem.svg" />', mArray.tunnels[i].name, mArray.tunnels[i].name, mArray.tunnels[i].color);
 | 
			
		||||
					if (mArray.tunnels[i].gateway !== "")
 | 
			
		||||
					{
 | 
			
		||||
						var title = mArray.tunnels[i].label + " (" + mArray.tunnels[i].gateway + ")";
 | 
			
		||||
					} else {
 | 
			
		||||
						var title = mArray.tunnels[i].label;
 | 
			
		||||
					}
 | 
			
		||||
					var content = "";
 | 
			
		||||
					if(ipaddr !== '')
 | 
			
		||||
					{
 | 
			
		||||
						content += String.format('%s <strong>%s</strong><br />',_('ip address:'), ipaddr);
 | 
			
		||||
					}
 | 
			
		||||
					if(wanip !== '')
 | 
			
		||||
					{
 | 
			
		||||
						content += String.format('%s <strong>%s</strong><br />',_('wan address:'), wanip);
 | 
			
		||||
					}
 | 
			
		||||
					if(whois !== '')
 | 
			
		||||
					{
 | 
			
		||||
						content += String.format('%s %s<br />',_('whois:'), whois);
 | 
			
		||||
					}
 | 
			
		||||
					if(latency !== '')
 | 
			
		||||
					{
 | 
			
		||||
						content += String.format('%s %s ms<br />',_('latency:'), latency);
 | 
			
		||||
					}
 | 
			
		||||
					if(mtu !== '')
 | 
			
		||||
					{
 | 
			
		||||
						content += String.format('%s %s<br />',_('mtu:'), mtu);
 | 
			
		||||
					}
 | 
			
		||||
					if(ipaddr == '')
 | 
			
		||||
					{
 | 
			
		||||
						statusMessage += _('No IP defined') + '<br />'
 | 
			
		||||
					}
 | 
			
		||||
					if(gateway == '')
 | 
			
		||||
					{
 | 
			
		||||
						statusMessage += _('No gateway defined') + '<br />'
 | 
			
		||||
					} else if(gw_ping == 'DOWN')
 | 
			
		||||
					{
 | 
			
		||||
						statusMessage += _('Gateway DOWN') + '<br />'
 | 
			
		||||
					} else if(multipath_available == 'ERROR')
 | 
			
		||||
					{
 | 
			
		||||
						statusMessage += _('Multipath seems to be blocked on the connection') + '<br />'
 | 
			
		||||
					}
 | 
			
		||||
					if(server_ping == 'DOWN')
 | 
			
		||||
					{
 | 
			
		||||
						statusMessage += _('No Server ping response after 1 second') + '<br />'
 | 
			
		||||
					}
 | 
			
		||||
					if (stat == 'Offline' && ipaddr != '' && ipaddr == mArray.tunnels[i].gateway)
 | 
			
		||||
					{
 | 
			
		||||
						statusMessage += _('Wan IP and gateway are identical') + '<br />';
 | 
			
		||||
						statusMessageClass = "error";
 | 
			
		||||
					}
 | 
			
		||||
					if(multipath == 'master') 
 | 
			
		||||
					{
 | 
			
		||||
						if (master > 1)
 | 
			
		||||
						{
 | 
			
		||||
							statusMessage += _('Multipath master already defined') + '<br />';
 | 
			
		||||
							statusMessageClass = "error";
 | 
			
		||||
						}
 | 
			
		||||
						if(multipath_state !== 'on' && multipath_state !== '')
 | 
			
		||||
						{
 | 
			
		||||
							statusMessage += _('Multipath current state is ') + multipath_state + '<br />';
 | 
			
		||||
							statusMessageClass = "error";
 | 
			
		||||
						}
 | 
			
		||||
					} else {
 | 
			
		||||
						if(multipath !== multipath_state && multipath_state !== '')
 | 
			
		||||
						{
 | 
			
		||||
							statusMessage += _('Multipath current state is ') + multipath_state + '<br />';
 | 
			
		||||
							statusMessageClass = "error";
 | 
			
		||||
						}
 | 
			
		||||
					}
 | 
			
		||||
					if(duplicateif)
 | 
			
		||||
					{
 | 
			
		||||
						statusMessage += _('Network interface duplicated') + '<br />';
 | 
			
		||||
						statusMessageClass = "error";
 | 
			
		||||
					}
 | 
			
		||||
					if(ipv6_discover == 'DETECTED')
 | 
			
		||||
					{
 | 
			
		||||
						statusMessage += _('IPv6 route received') + '<br />'
 | 
			
		||||
					}
 | 
			
		||||
					content += String.format('multipath: %s<br />',multipath);
 | 
			
		||||
					if(mArray.tunnels[i].qos && mArray.tunnels[i].download > 0 && mArray.tunnels[i].upload > 0)
 | 
			
		||||
					{
 | 
			
		||||
						content += String.format('%s %s/%s kbps (%s)',_('traffic control:'), mArray.tunnels[i].download, mArray.tunnels[i].upload, mArray.tunnels[i].qos)
 | 
			
		||||
					}
 | 
			
		||||
					temp += getNetworkNodeTemplate(equipmentIcon, statusIcon, title, statusMessageClass,statusMessage,content);
 | 
			
		||||
 | 
			
		||||
					temp += '</a></li>';
 | 
			
		||||
				}
 | 
			
		||||
				temp += '</ul></td>';
 | 
			
		||||
				temp += '</tr></table>';
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -907,6 +907,10 @@ function interfaces_status()
 | 
			
		|||
	    if ifname == "" or ifname == nil then
 | 
			
		||||
		ifname = section["ifname"] or ""
 | 
			
		||||
	    end
 | 
			
		||||
	    --if ifname ~= nil and ifname:match("^tun.*") and interface:match("^ovpn.*") then
 | 
			
		||||
	    --ifname = get_device(interface:sub(5))
 | 
			
		||||
	    --end
 | 
			
		||||
	    
 | 
			
		||||
	    duplicateif = false
 | 
			
		||||
	    if ifname ~= "" and ifname ~= nil then
 | 
			
		||||
		if allintf[ifname] then
 | 
			
		||||
| 
						 | 
				
			
			@ -965,6 +969,10 @@ function interfaces_status()
 | 
			
		|||
 | 
			
		||||
	    -- Detect WAN gateway status
 | 
			
		||||
	    local gw_ping = "UP"
 | 
			
		||||
	    if ifname ~= nil and ifname:match("^tun.*") and interface:match("^ovpn.*") then
 | 
			
		||||
		gateway = ut.trim(sys.exec("ip -4 r list dev " .. ifname .. " | grep via | grep -v default | grep -v metric | awk '{print $1}' | tr -d '\n'"))
 | 
			
		||||
	    end
 | 
			
		||||
 | 
			
		||||
	    if gateway == "" then
 | 
			
		||||
		    gateway = get_gateway(interface)
 | 
			
		||||
	    end
 | 
			
		||||
| 
						 | 
				
			
			@ -988,7 +996,7 @@ function interfaces_status()
 | 
			
		|||
		    gw_ping = "DOWN"
 | 
			
		||||
		    connectivity = "ERROR"
 | 
			
		||||
	    end
 | 
			
		||||
	    
 | 
			
		||||
 | 
			
		||||
	    local latency = ""
 | 
			
		||||
	    local server_ping = ""
 | 
			
		||||
	    --if connectivity ~= "ERROR" and ifname ~= "" and gateway ~= "" and gw_ping ~= "DOWN" and ifname ~= nil and mArray.openmptcprouter["service_addr"] ~= "" and ipaddr ~= "" then
 | 
			
		||||
| 
						 | 
				
			
			@ -1068,11 +1076,21 @@ function interfaces_status()
 | 
			
		|||
		    end
 | 
			
		||||
	    end
 | 
			
		||||
 | 
			
		||||
	    local publicIP = uci:get("openmptcprouter",interface,"publicip") or ""
 | 
			
		||||
	    if ifname ~= nil and publicIP == "" and uci:get("openmptcprouter","settings","external_check") ~= "0" then
 | 
			
		||||
		    publicIP = ut.trim(sys.exec("omr-ip-intf " .. ifname))
 | 
			
		||||
	    end
 | 
			
		||||
	    local publicIP = ""
 | 
			
		||||
	    local whois = ""
 | 
			
		||||
	    if ifname ~= nil and ifname:match("^tun.*") and interface:match("^ovpn.*") then
 | 
			
		||||
		    publicIP = uci:get("openmptcprouter",interface:sub(5),"publicip") or ""
 | 
			
		||||
		    if ifname ~= nil and publicIP == "" and uci:get("openmptcprouter","settings","external_check") ~= "0" then
 | 
			
		||||
			    publicIP = ut.trim(sys.exec("omr-ip-intf " .. get_device(interface:sub(5))))
 | 
			
		||||
		    end
 | 
			
		||||
	    else
 | 
			
		||||
		    publicIP = uci:get("openmptcprouter",interface,"publicip") or ""
 | 
			
		||||
		    if ifname ~= nil and publicIP == "" and uci:get("openmptcprouter","settings","external_check") ~= "0" then
 | 
			
		||||
			    publicIP = ut.trim(sys.exec("omr-ip-intf " .. ifname))
 | 
			
		||||
		    end
 | 
			
		||||
	    end
 | 
			
		||||
	    
 | 
			
		||||
	    whois = ""
 | 
			
		||||
	    if publicIP ~= "" then
 | 
			
		||||
		    whois = uci:get("openmptcprouter",interface,"asn") or ""
 | 
			
		||||
		    if whois == "" and uci:get("openmptcprouter","settings","external_check") ~= "0" then
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -451,7 +451,7 @@ fi
 | 
			
		|||
# Save wan settings for status page
 | 
			
		||||
if [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc)" = "" ] || [ $(($(date +"%s") + $((10 + RANDOM % 31)) - $(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc))) -gt 3600 ]; then
 | 
			
		||||
	_log "Get status and settings for $OMR_TRACKER_INTERFACE..."
 | 
			
		||||
	if [ "$(uci -q get openmptcprouter.settings.external_check)" != "0" ]; then
 | 
			
		||||
	if [ "$(uci -q get openmptcprouter.settings.external_check)" != "0" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" != "1" ]; then
 | 
			
		||||
		local ipaddr="$(omr-ip-intf $OMR_TRACKER_DEVICE)"
 | 
			
		||||
	else
 | 
			
		||||
		uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.lc=$(date +"%s")
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,7 +23,8 @@ mptcp_over_vpn() {
 | 
			
		|||
		config_load_openmptcprouter
 | 
			
		||||
		config_foreach _getremoteip server
 | 
			
		||||
		localip=$(ubus call network.interface.$interface status | jsonfilter -e '@["ipv4-address"][0].address' | tr -d "\n")
 | 
			
		||||
		multipath=$(uci -q get network.${interface}.multipath)
 | 
			
		||||
		[ -z "$(uci -q get openmptcprouter.ovpn${interface}.multipath)" ] && multipath=$(uci -q get network.${interface}.multipath)
 | 
			
		||||
		[ -n "$(uci -q get openmptcprouter.ovpn${interface}.multipath)" ] && multipath=$(uci -q get openmptcprouter.ovpn${interface}.multipath)
 | 
			
		||||
		[ -z "$multipath" ] && multipath="on"
 | 
			
		||||
		uci -q batch <<-EOF >/dev/null
 | 
			
		||||
			set network.ovpn${interface}=interface
 | 
			
		||||
| 
						 | 
				
			
			@ -32,6 +33,7 @@ mptcp_over_vpn() {
 | 
			
		|||
			set network.ovpn${interface}.peerdns='0'
 | 
			
		||||
			set network.ovpn${interface}.proto='none'
 | 
			
		||||
			set network.ovpn${interface}.multipath='on'
 | 
			
		||||
			set network.${interface}.multipath='off'
 | 
			
		||||
			commit network
 | 
			
		||||
			set openvpn.${interface}=openvpn
 | 
			
		||||
			set openvpn.${interface}.dev="tun${id}"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue