1
0
Fork 0
mirror of https://github.com/Ysurac/openmptcprouter-feeds.git synced 2025-03-09 15:40:03 +00:00

Add OpenVPN Bonding support

This commit is contained in:
Ycarus (Yannick Chabanois) 2020-12-11 21:39:49 +01:00
parent 0f87c62f36
commit 8ef4df91e7
4 changed files with 108 additions and 7 deletions

View file

@ -631,8 +631,8 @@ function wizard_add()
ucic:set("glorytun","vpn","remoteip","10.255.255.1")
ucic:set("network","omr6in4","ipaddr","10.255.255.2")
ucic:set("network","omr6in4","peeraddr","10.255.255.1")
ucic:set("network","omrvpn","proto","none")
end
ucic:set("network","omrvpn","proto","none")
else
ucic:set("glorytun","vpn","key","")
--ucic:set("glorytun","vpn","enable",0)
@ -656,8 +656,8 @@ function wizard_add()
ucic:set("glorytun-udp","vpn","remoteip","10.255.254.1")
ucic:set("network","omr6in4","ipaddr","10.255.254.2")
ucic:set("network","omr6in4","peeraddr","10.255.254.1")
ucic:set("network","omrvpn","proto","none")
end
ucic:set("network","omrvpn","proto","none")
else
ucic:set("glorytun-udp","vpn","key","")
end
@ -677,9 +677,11 @@ function wizard_add()
ucic:set("dsvpn","vpn","key",dsvpn_key)
ucic:set("dsvpn","vpn","localip","10.255.251.2")
ucic:set("dsvpn","vpn","remoteip","10.255.251.1")
ucic:set("network","omr6in4","ipaddr","10.255.251.2")
ucic:set("network","omr6in4","peeraddr","10.255.251.1")
ucic:set("network","omrvpn","proto","none")
if default_vpn == "dsvpn" then
ucic:set("network","omr6in4","ipaddr","10.255.251.2")
ucic:set("network","omr6in4","peeraddr","10.255.251.1")
ucic:set("network","omrvpn","proto","none")
end
else
ucic:set("dsvpn","vpn","key","")
--ucic:set("dsvpn","vpn","enable",0)
@ -770,6 +772,7 @@ function wizard_add()
luci.sys.call("/etc/init.d/mlvpn restart >/dev/null 2>/dev/null")
--luci.sys.call("/etc/init.d/ubond restart >/dev/null 2>/dev/null")
luci.sys.call("/etc/init.d/openvpn restart >/dev/null 2>/dev/null")
luci.sys.call("/etc/init.d/openvpnbonding restart >/dev/null 2>/dev/null")
luci.sys.call("/etc/init.d/dsvpn restart >/dev/null 2>/dev/null")
luci.sys.call("/etc/init.d/omr-tracker start >/dev/null 2>/dev/null")
luci.sys.call("/etc/init.d/omr-6in4 restart >/dev/null 2>/dev/null")

View file

@ -306,6 +306,8 @@
<% if nixio.fs.access("/usr/sbin/ubond") then %><option value="ubond" <% if uci:get("ubond","general","enable") == "1" then %>selected="selected"<% end %>>UBOND</option><% end %>
<% elseif vpn == "openvpn" then %>
<% if nixio.fs.access("/etc/init.d/openvpn") then %><option value="openvpn" <% if uci:get("openvpn","omr","enabled") == "1" then %>selected="selected"<% end %>>OpenVPN TCP</option><% end %>
<% elseif vpn == "openvpn_bonding" then %>
<% if nixio.fs.access("/etc/init.d/openvpnbonding") then %><option value="openvpn_bonding" <% if uci:get("openmptcprouter","settings","vpn") == "openvpn_bonding" then %>selected="selected"<% end %>>OpenVPN Bonding</option><% end %>
<%
end
end
@ -319,7 +321,8 @@
<% if nixio.fs.access("/usr/sbin/dsvpn") then %><option value="dsvpn" <% if uci:get("dsvpn","vpn","enable") == "1" then %>selected="selected"<% end %>>A Dead Simple VPN</option><% end %>
<% if nixio.fs.access("/usr/sbin/mlvpn") then %><option value="mlvpn" <% if uci:get("mlvpn","general","enable") == "1" then %>selected="selected"<% end %>>MLVPN</option><% end %>
<% if nixio.fs.access("/usr/sbin/ubond") then %><option value="ubond" <% if uci:get("ubond","general","enable") == "1" then %>selected="selected"<% end %>>UBOND</option><% end %>
<% if nixio.fs.access("/usr/sbin/openvpn") then %><option value="openvpn" <% if uci:get("openvpn","omr","enabled") == "1" then %>selected="selected"<% end %>>OpenVPN</option><% end %>
<% if nixio.fs.access("/etc/init.d/openvpn") then %><option value="openvpn" <% if uci:get("openvpn","omr","enabled") == "1" then %>selected="selected"<% end %>>OpenVPN</option><% end %>
<% if nixio.fs.access("/etc/init.d/openvpnbonding") then %><option value="openvpn_bonding" <% if uci:get("openmptcprouter","settings","vpn") == "openvpn_bonding" then %>selected="selected"<% end %>>OpenVPN Bonding</option><% end %>
<option value="none" <% if uci:get("openmptcprouter","settings","vpn") == "none" then %>selected="selected"<% end %>>None</option>
<%
end

View file

@ -80,7 +80,7 @@ MY_DEPENDS := \
!TARGET_mvebu:luci-proto-qmi wpad-basic kmod-mt7601u kmod-rtl8187 \
luci-app-mlvpn mlvpn 464xlat !TARGET_mvebu:kmod-usb-net-smsc75xx kmod-zram kmod-swconfig swconfig kmod-ipt-nat kmod-ipt-nat6 luci-app-https-dns-proxy kmod-tcp-nanqinlang (TARGET_x86_64||TARGET_arm64):kmod-tcp-bbr2 iptables-mod-ipopt igmpproxy ss iptraf-ng \
luci-app-acl block-mount blockd fstools luci-app-shutdown libwebp luci-proto-gre tcptraceroute luci-proto-mbim kmod-rtl8xxxu kmod-ath9k-htc luci-app-ttyd luci-mod-dashboard (TARGET_x86||TARGET_x86_64):rtl8192eu-firmware kmod-usb2 libustream-wolfssl (TARGET_x86||TARGET_x86_64):kmod-ixgbevf \
hwinfo (TARGET_x86||TARGET_x86_64):dmidecode luci-app-packet-capture
hwinfo (TARGET_x86||TARGET_x86_64):dmidecode luci-app-packet-capture kmod-bonding luci-proto-bonding
# luci-theme-bootstrap luci-theme-openwrt-2020 luci-theme-openwrt luci-app-status
# luci-proto-bonding luci-app-statistics luci-proto-gre
# softethervpn5-client softethervpn5-server luci-app-nginx-ha

View file

@ -0,0 +1,95 @@
#!/bin/sh /etc/rc.common
# Copyright (C) 2020 Ycarus (Yannick Chabanois) <ycarus@zugaina.org> for OpenMPTCProuter
# Released under GPL 3. See LICENSE for the full terms.
{
START=70
STOP=10
USE_PROCD=1
}
_getremoteip() {
[ "$(uci -q get openmptcprouter.$1.master)" = "1" ] && remoteip=$(uci -q get openmptcprouter.$1.ip)
}
_openvpnbonding() {
local interface=$1
if [ "$(uci -q get openmptcprouter.${interface}.multipath)" = "master" ] || [ "$(uci -q get openmptcprouter.${interface}.multipath)" = "on" ]; then
nbintf=$(($nbintf+1))
remoteip=""
config_load openmptcprouter
config_foreach _getremoteip server
if [ -n "$remoteip" ]; then
localip=$(ubus call network.interface.$interface status | jsonfilter -e '@["ipv4-address"][0].address' | tr -d "\n")
uci -q batch <<-EOF >/dev/null
set openvpn.omr_bonding_${interface}=openvpn
set openvpn.omr_bonding_${interface}.dev="bond${interface}"
set openvpn.omr_bonding_${interface}.dev_type="tap"
set openvpn.omr_bonding_${interface}.cipher='AES-256-CBC'
set openvpn.omr_bonding_${interface}.port="6535${nbintf}"
set openvpn.omr_bonding_${interface}.remote="${remoteip}"
set openvpn.omr_bonding_${interface}.local="${localip}"
set openvpn.omr_bonding_${interface}.lport='0'
set openvpn.omr_bonding_${interface}.ncp_disable='1'
set openvpn.omr_bonding_${interface}.auth_nocache='1'
set openvpn.omr_bonding_${interface}.proto='udp'
set openvpn.omr_bonding_${interface}.client='1'
set openvpn.omr_bonding_${interface}.tls_client='1'
set openvpn.omr_bonding_${interface}.enabled='1'
set openvpn.omr_bonding_${interface}.key='/etc/luci-uploads/client.key'
set openvpn.omr_bonding_${interface}.cert='/etc/luci-uploads/client.crt'
set openvpn.omr_bonding_${interface}.ca='/etc/luci-uploads/ca.crt'
commit openvpn
EOF
if [ "$(uci -q get network.omrvpn.slaves | grep bond${interface})" = "" ]; then
uci -q add_list network.omrvpn.slaves="bond${interface}"
fi
/etc/init.d/openvpn start omr_bonding_${interface}
ip link set bond${interface} master bonding-omrvpn
fi
fi
}
_disable_openvpnbonding()
{
name=$1
if [ "$(echo $name | grep omr_bonding)" != "" ]; then
uci -q set openvpn.${name}.enabled='0'
fi
}
start_service()
{
if [ "$(uci -q get openmptcprouter.settings.vpn)" = "openvpn_bonding" ]; then
nbintf=0
uci -q batch <<-EOF >/dev/null
set network.omrvpn.proto='bonding'
set network.omrvpn.bonding_policy='balance-rr'
set network.omrvpn.packets_per_slave='1'
set network.omrvpn.xmit_hash_policy='layer2'
set network.omrvpn.all_slaves_active='0'
set network.omrvpn.netmask='255.255.255.0'
set network.omrvpn.ipaddr='10.255.248.2'
set network.omrvpn.link_monitoring='mii'
set network.omrvpn.miimon='10'
set network.omrvpn.downdelay='100'
set network.omrvpn.updelay='20'
set network.omrvpn.use_carrier='1'
commit network
EOF
config_load openmptcprouter
config_foreach _openvpnbonding interface
ip link set bonding-omrvpn up
uci -q batch <<-EOF >/dev/null
commit network
EOF
else
config_load openvpn
config_foreach _disable_openvpnbonding
uci -q commit openvpn
fi
}
service_triggers() {
procd_add_reload_trigger "openvpn" "network"
}