diff --git a/mptcp/files/etc/init.d/mptcp b/mptcp/files/etc/init.d/mptcp index 6575bc0d7..d7b2d6be3 100755 --- a/mptcp/files/etc/init.d/mptcp +++ b/mptcp/files/etc/init.d/mptcp @@ -7,6 +7,7 @@ START=90 USE_PROCD=1 . /usr/lib/unbound/iptools.sh +. /lib/functions/network.sh global_multipath_settings() { local multipath mptcp_path_manager mptcp_schdeduler congestion mptcp_checksum mptcp_syn_retries mptcp_fullmesh_num_subflows mptcp_fullmesh_create_on_err mptcp_ndiffports_num_subflows @@ -46,7 +47,8 @@ interface_multipath_settings() { config_get iface "$config" ifname count=$(($count+1)) id=$count - + config_set "$config" metric $count + uci -q set network.${config}.metric=$count config_get mode "$config" multipath "off" [ "$mode" != "off" ] && { [ -n "$mptcpintf" ] && mptcpintf="$mptcpintf $iface" @@ -57,8 +59,8 @@ interface_multipath_settings() { # Force that only one interface is master if [ "$master" != "" ]; then logger -t "MPTCP" "Multipath master already set, disable master for $config" - uci -q set network.$config.multipath="on" - uci -q commit network + config_set "$config" multipath "on" + uci -q set network.${config}.multipath="on" else master="$config" fi @@ -88,11 +90,13 @@ interface_multipath_settings() { config_get ipaddr $config ipaddr config_get gateway $config gateway config_get netmask $config netmask + [ -n "$ipaddr" ] && [ -n "$netmask" ] && netmask=`ipcalc.sh $ipaddr $netmask | sed -n '/NETMASK=/{;s/.*=//;s/ .*//;p;}'` [ -n "$îpaddr" ] && [ -n "$netmask" ] && network=`ipcalc.sh $ipaddr $netmask | sed -n '/NETWORK=/{;s/.*=//;s/ .*//;p;}'` else - network_get_ipaddr $config ipaddr - ipaddr=$(ip -4 addr show dev $iface | grep inet | awk '{print $2}' | cut -d/ -f1 | tr -d "\n") - gateway=$(ip -4 r list dev $iface | grep -v default | awk '/proto static/ {print $1}' | tr -d "\n") + network_get_ipaddr ipaddr $config + [ -z "$ipaddr" ] && ipaddr=$(ip -4 addr show dev $iface | grep inet | awk '{print $2}' | cut -d/ -f1 | tr -d "\n") + network_get_gateway gateway $config true + [ -z "$gateway" ] && gateway=$(ip -4 r list dev $iface | grep -v default | awk '/proto static/ {print $1}' | tr -d "\n") [ -z "$gateway" ] && gateway=$(uci -q get "network.$config.gateway") [ -z "$gateway" ] && gateway=$(ubus call network.interface.$config status | jsonfilter -q -e '@.route[0].nexthop' | tr -d "\n") if [ -z "$gateway" ] || [ "$( valid_subnet4 $gateway )" != "ok" ]; then @@ -101,17 +105,49 @@ interface_multipath_settings() { if [ -z "$gateway" ] || [ "$( valid_subnet4 $gateway )" != "ok" ]; then gateway=$(ubus call network.interface.${config}_4 status 2>/dev/null | jsonfilter -q -e '@.inactive.route[0].nexthop' | tr -d "\n") fi - netmask=$(ip -4 addr show dev $iface | grep peer | awk '{print $4}' | cut -d/ -f2 | tr -d "\n") + network_get_subnet netmask $config + [ -z "$netmask" ] && netmask=$(ip -4 addr show dev $iface | grep peer | awk '{print $4}' | cut -d/ -f2 | tr -d "\n") [ -z "$netmask" ] && netmask=$(ip -4 addr show dev $iface | grep inet | awk '{print $2}' | cut -d/ -f2 | tr -d "\n") + [ -n "$ipaddr" ] && [ -n "$netmask" ] && netmask=`ipcalc.sh $ipaddr $netmask | sed -n '/NETMASK=/{;s/.*=//;s/ .*//;p;}'` [ -n "$ipaddr" ] && [ -n "$netmask" ] && network=`ipcalc.sh $ipaddr $netmask | sed -n '/NETWORK=/{;s/.*=//;s/ .*//;p;}'` fi - ip rule del table $id > /dev/null 2>&1 - ip route flush $id > /dev/null 2>&1 + #ip rule del table $id > /dev/null 2>&1 + #ip route flush $id > /dev/null 2>&1 + uci -q batch <<-EOF >/dev/null + delete network.${config}_rule + delete network.${config}_route + delete network.${config}_route_default + commit network + EOF + if [ -n "$gateway" ] && [ -n "$network" ]; then - ip rule add from $ipaddr iif $iface oif $iface table $id pref 0 - ip route replace $network/$netmask dev $iface scope link table $id - ip route replace default via $gateway dev $iface table $id - ip route flush $id + uci -q batch <<-EOF >/dev/null + delete network.${config}_rule + set network.${config}_rule=rule + set network.${config}_rule.in=${config} + set network.${config}_rule.out=${config} + set network.${config}_rule.lookup=${id} + set network.${config}_rule.priority=0 + set network.${config}_rule.src="${ipaddr}/32" + delete network.${config}_route + set network.${config}_route=route + set network.${config}_route.interface=${config} + set network.${config}_route.target=${network} + set network.${config}_route.netmask=${netmask} + set network.${config}_route.table=${id} + delete network.${config}_route_default + set network.${config}_route_default=route + set network.${config}_route_default.interface=${config} + set network.${config}_route_default.target='0.0.0.0' + set network.${config}_route_default.netmask='0.0.0.0' + set network.${config}_route_default.gateway=$gateway + set network.${config}_route_default.table=${id} + commit network + EOF + #ip rule add from $ipaddr iif $iface oif $iface table $id pref 0 + #ip route replace $network/$netmask dev $iface scope link table $id + #ip route replace default via $gateway dev $iface table $id + #ip route flush $id config_get mode "$config" multipath "off" [ "$mode" = "master" ] && { @@ -151,13 +187,34 @@ interface_multipath_settings() { network6=`ipcalc $ip6addr | sed -n '/NETWORK=/{;s/.*=//;s/ .*//;p;}'` fi fi - ip -6 rule del table 6$id > /dev/null 2>&1 - ip -6 route flush 6$id > /dev/null 2>&1 + #ip -6 rule del table 6$id > /dev/null 2>&1 + #ip -6 route flush 6$id > /dev/null 2>&1 if [ -n "$ip6addr" ] && [ -n "$gateway6" ] && [ -n "$network6" ]; then - ip -6 rule add from $ip6addr iif $iface oif $iface table 6$id pref 0 - ip -6 route replace $network6/$netmask6 dev $iface scope link table 6$id - ip -6 route replace default via $gateway6 dev $iface table 6$id - ip -6 route flush 6$id + uci -q batch <<-EOF >/dev/null + delete network.${config}_rule6 + set network.${config}_rule6=rule6 + set network.${config}_rule6.in=${config} + set network.${config}_rule6.out=${config} + set network.${config}_rule6.lookup=6${id} + set network.${config}_rule6.priority=0 + set network.${config}_rule6.src="${ipaddr6}/127" + delete network.${config}_route6 + set network.${config}_route6=route6 + set network.${config}_route6.interface=${config} + set network.${config}_route6.target=${network6}/${netmask6} + set network.${config}_route6.table=6${id} + delete network.${config}_route6_default + set network.${config}_route6_default=route6 + set network.${config}_route6_default.interface=${config} + set network.${config}_route6_default.target='::/0' + set network.${config}_route6_default.gateway=$gateway6 + set network.${config}_route6_default.table=6${id} + commit network + EOF + #ip -6 rule add from $ip6addr iif $iface oif $iface table 6$id pref 0 + #ip -6 route replace $network6/$netmask6 dev $iface scope link table 6$id + #ip -6 route replace default via $gateway6 dev $iface table 6$id + #ip -6 route flush 6$id config_get mode "$config" multipath "off" [ "$mode" = "master" ] && { @@ -207,9 +264,9 @@ start_service() { [ "$intfmaster" != "" ] && { logger -t "MPTCP" "No master multipath defined, setting it to $intfmaster" uci -q set network.${intfmaster}.multipath="master" - uci -q commit network } fi + uci -q commit network [ -n "$(ubus call system board | jsonfilter -e '@.board_name' | grep raspberry)" ] && { ethtool --offload eth0 rx off tx off } diff --git a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking index 3cd6af997..f2f2f7bfe 100755 --- a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking +++ b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking @@ -11,8 +11,6 @@ set_route() { [ -z "$interface_if" ] && interface_if=$(ifstatus "${INTERFACE}_4" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') multipath_current_config=$(multipath $interface_if | grep deactivated) if [ "$multipath_config" != "off" ] && [ "$SETROUTE" != true ] && [ "$INTERFACE" != "$PREVINTERFACE" ] && [ "$multipath_current_config" = "" ]; then - #if [ "$multipath_config" != "off" ] && [ "$SETROUTE" != true ]; then - #if [ "$multipath_config" != "off" ] && [ "$INTERFACE" != "$PREVINTERFACE" ] && [ "$SETROUTE" != true ]; then interface_gw="$(uci -q get network.$INTERFACE.gateway)" if [ -z "$interface_gw" ]; then interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -e '@.route[0].nexthop' | tr -d "\n") @@ -25,75 +23,76 @@ set_route() { fi if [ "$interface_gw" != "" ]; then _log "$PREVINTERFACE down. Replace default route by $interface_gw dev $interface_if" - ip route replace default scope global nexthop via $interface_gw dev $interface_if && SETROUTE=true - ip route replace default via $interface_gw dev $interface_if table 991337 + #ip route replace default scope global nexthop via $interface_gw dev $interface_if && SETROUTE=true + #ip route replace default via $interface_gw dev $interface_if table 991337 + uci -q batch <<-EOF >/dev/null + set network.default_route=route + set network.default_route.interface=$INTERFACE + set network.default_route.target='0.0.0.0' + set network.default_route.netmask='0.0.0.0' + set network.default_route.gateway=$interface_gw + commit network.default_route + set network.default_fw_route=route + set network.default_fw_route.interface=$INTERFACE + set network.default_fw_route.target='0.0.0.0' + set network.default_fw_route.netmask='0.0.0.0' + set network.default_fw_route.gateway=$interface_gw + set network.default_fw_route.table=991337 + commit network.default_fw_route + EOF + #SETROUTE=true fi fi } -set_ss_route() { - local server_ip upstreams nginxip - local metric=$2 - config_get server_ip $1 server - if [ "$server_ip" = "127.0.0.1" ]; then - upstreams=$(uci -q get nginx-ha.ShadowSocks.upstreams | sed -e "s/' '/%/" -e 's/ /_/g' -e "s/'//g" -e 's/%/ /') - for up in $upstreams; do - nginxip=$(echo $up | cut -d: -f1) - if [ "$nginxip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE metric $metric | grep $nginxip | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ]; then - _log "Set server $nginxip route via $OMR_TRACKER_DEVICE" - ip route replace $nginxip via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE metric $metric > /dev/null 2>&1 - fi - done - else - if [ "$metric" != "off" ] && [ "$server_ip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE metric $metric | grep $server_ip | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ]; then - _log "Set server $server_ip route via $OMR_TRACKER_DEVICE metric $metric" - ip route del $server_ip metric $metric > /dev/null 2>&1 - ip route replace $server_ip via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE metric $metric > /dev/null 2>&1 - fi +set_server_default_route() { + local server=$1 + local serverip + config_get serverip $server ip + if [ "$serverip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE metric 1 | grep $serverip | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ]; then + _log "Set server $server ($serverip) default route via $OMR_TRACKER_DEVICE_GATEWAY" + uci -q batch <<-EOF >/dev/null + set network.server_${server}_default_route=route + set network.server_${server}_default_route.interface=$OMR_TRACKER_INTERFACE + set network.server_${server}_default_route.target=$serverip + set network.server_${server}_default_route.netmask='255.255.255.255' + set network.server_${server}_default_route.gateway=$OMR_TRACKER_DEVICE_GATEWAY + set network.server_${server}_default_route.metric=1 + commit network.server_${server}_default_route + EOF fi } -del_ss_route() { - local server_ip upstreams nginxip +set_server_route() { + local server=$1 + local serverip + config_get serverip $server ip local metric=$2 - config_get server_ip $1 server - if [ "$server_ip" = "127.0.0.1" ]; then - upstreams=$(uci -q get nginx-ha.ShadowSocks.upstreams | sed -e "s/' '/%/" -e 's/ /_/g' -e "s/'//g" -e 's/%/ /') - for up in $upstreams; do - _log "down : $up" - nginxip=$(echo $up | cut -d: -f1) - if [ "$metric" = "all" ]; then - if [ "$nginxip" != "" ] && [ "$(ip route show | grep $nginxip)" != "" ]; then - _log "Remove all server $nginxip route" - ip route delete $nginxip > /dev/null 2>&1 - fi - else - if [ "$nginxip" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE metric $metric | grep $nginxip)" != "" ]; then - _log "Remove server $nginxip route via $OMR_TRACKER_DEVICE" - ip route delete $nginxip dev $OMR_TRACKER_DEVICE metric $metric > /dev/null 2>&1 - fi - fi - done - else - if [ "$metric" = "all" ]; then - if [ "$server_ip" != "" ] && [ "$(ip route show | grep $server_ip)" != "" ]; then - _log "Remove all server $server_ip route" - ip route delete $server_ip > /dev/null 2>&1 - fi - elif [ "$metric" = "off" ]; then - if [ "$server_ip" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE | grep $server_ip)" != "" ]; then - _log "Remove all server $server_ip route via $OMR_TRACKER_DEVICE" - ip route delete $server_ip dev $OMR_TRACKER_DEVICE > /dev/null 2>&1 - fi - else - if [ "$server_ip" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE metric $metric | grep $server_ip)" != "" ]; then - _log "Remove server $server_ip route via $OMR_TRACKER_DEVICE" - ip route delete $server_ip dev $OMR_TRACKER_DEVICE metric $metric > /dev/null 2>&1 - elif [ "$server_ip" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE metric 1 | grep $server_ip)" != "" ]; then - _log "Remove server $server_ip route via $OMR_TRACKER_DEVICE (master)" - ip route delete $server_ip dev $OMR_TRACKER_DEVICE metric 1 > /dev/null 2>&1 - fi - fi + [ -z "$metric" ] && metric=$(uci -q get network.$OMR_TRACKER_INTERFACE.metric) + if [ "$serverip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE metric $metric | grep $serverip | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ]; then + _log "Set server $server ($serverip) route via $OMR_TRACKER_DEVICE_GATEWAY metric $metric" + uci -q batch <<-EOF >/dev/null + set network.server_${server}_${OMR_TRACKER_INTERFACE}_route=route + set network.server_${server}_${OMR_TRACKER_INTERFACE}_route.interface=$OMR_TRACKER_INTERFACE + set network.server_${server}_${OMR_TRACKER_INTERFACE}_route.target=$serverip + set network.server_${server}_${OMR_TRACKER_INTERFACE}_route.netmask='255.255.255.255' + set network.server_${server}_${OMR_TRACKER_INTERFACE}_route.gateway=$OMR_TRACKER_DEVICE_GATEWAY + set network.server_${server}_${OMR_TRACKER_INTERFACE}_route.metric=$metric + commit network.server_${server}_${OMR_TRACKER_INTERFACE}_route + EOF + fi + if [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ]; then + #ip route replace default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE metric $metric + uci -q batch <<-EOF >/dev/null + set network.${OMR_TRACKER_INTERFACE}_route_default_metric=route + set network.${OMR_TRACKER_INTERFACE}_route_default_metric.interface=$OMR_TRACKER_INTERFACE + set network.${OMR_TRACKER_INTERFACE}_route_default_metric.target='0.0.0.0' + set network.${OMR_TRACKER_INTERFACE}_route_default_metric.netmask='0.0.0.0' + set network.${OMR_TRACKER_INTERFACE}_route_default_metric.gateway=$OMR_TRACKER_DEVICE_GATEWAY + set network.${OMR_TRACKER_INTERFACE}_route_default_metric.metric=$metric + set network.${OMR_TRACKER_INTERFACE}_route_default_metric.source=$OMR_TRACKER_DEVICE_IP + commit network.${OMR_TRACKER_INTERFACE}_route_default_metric + EOF fi } @@ -143,17 +142,16 @@ if [ "$OMR_TRACKER_STATUS" = "ERROR" ]; then glorytun-udp path $OMR_TRACKER_DEVICE_IP dev tun0 down > /dev/null 2>&1 fi config_load shadowsocks-libev - if [ -n "$OMR_TRACKER_DEVICE_IP" ] && [ -n "$OMR_TRACKER_DEVICE_GATEWAY" ]; then - #local metric=$(ip rule show | grep -m 1 "$OMR_TRACKER_DEVICE_IP" | awk '{print $5}') - local metric=$(ip rule show | grep "$OMR_TRACKER_DEVICE_IP" | grep -m 1 "$OMR_TRACKER_DEVICE" | grep -om1 'lookup [[:digit:]]' | awk '{print $2}') - ip route del default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE metric $metric >/dev/null 2>&1 - config_foreach del_ss_route server $metric - else - if [ -n "$OMR_TRACKER_DEVICE_GATEWAY" ]; then - ip route del default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE >/dev/null 2>&1 - fi - config_foreach del_ss_route server off - fi + #if [ -n "$OMR_TRACKER_DEVICE_IP" ] && [ -n "$OMR_TRACKER_DEVICE_GATEWAY" ]; then + # local metric=$(ip rule show | grep "$OMR_TRACKER_DEVICE_IP" | grep -m 1 "$OMR_TRACKER_DEVICE" | grep -om1 'lookup [[:digit:]]' | awk '{print $2}') + # ip route del default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE metric $metric >/dev/null 2>&1 + # config_foreach del_ss_route server $metric + #else + # if [ -n "$OMR_TRACKER_DEVICE_GATEWAY" ]; then + # ip route del default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE >/dev/null 2>&1 + # fi + # config_foreach del_ss_route server off + #fi } if [ "$default_gw" = "$OMR_TRACKER_DEVICE_GATEWAY" ] || [ "$default_gw" = "" ]; then @@ -188,13 +186,22 @@ if [ "$OMR_TRACKER_STATUS" = "ERROR" ]; then fi fi dns_flush + /etc/init.d/network reload exit 0 fi if [ "$OMR_TRACKER_INTERFACE" = "glorytun" ] || [ "$OMR_TRACKER_INTERFACE" = "omrvpn" ]; then if [ "$default_gw" != "$OMR_TRACKER_DEVICE_GATEWAY" ] || [ "$default_gw" = "" ]; then _log "Tunnel up : Replace default route by $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE" - ip route replace default scope global nexthop via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE + uci -q batch <<-EOF >/dev/null + set network.default_route=route + set network.default_route.interface=$OMR_TRACKER_INTERFACE + set network.default_route.target='0.0.0.0' + set network.default_route.netmask='0.0.0.0' + set network.default_route.gateway=$OMR_TRACKER_DEVICE_GATEWAY + commit network.default_route + EOF + #ip route replace default scope global nexthop via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE fi if [ "$(uci -q get shadowsocks-libev.sss0.disabled)" != "1" ] && [ "$(uci -q get shadowsocks-libev.ss_rules.redir_udp)" = "hi2" ]; then _log "Tunnel up disable use of ShadowSocks for UDP" @@ -229,6 +236,7 @@ if [ "$OMR_TRACKER_INTERFACE" = "glorytun" ] || [ "$OMR_TRACKER_INTERFACE" = "om fi uci -q commit openmptcprouter fi + /etc/init.d/network reload exit 0 fi @@ -247,23 +255,43 @@ if [ "$multipath_config" = "master" ]; then omrvpn_intf=$(uci -q get "network.omrvpn.ifname" || echo "tun") if [ "$(ip route show default | grep -v metric | awk '/default/ {print $5}' | grep $omrvpn_intf)" = "" ]; then _log "Master up : Replace default route by $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE" - ip route replace default scope global nexthop via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE + #ip route replace default scope global nexthop via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE + uci -q batch <<-EOF >/dev/null + set network.default_route=route + set network.default_route.interface=$OMR_TRACKER_INTERFACE + set network.default_route.target='0.0.0.0' + set network.default_route.netmask='0.0.0.0' + set network.default_route.gateway=$OMR_TRACKER_DEVICE_GATEWAY + commit network.default_route + EOF else - config_load shadowsocks-libev - config_foreach set_ss_route server 1 + #config_load shadowsocks-libev + #config_foreach set_ss_route server 1 + config_load openmptcprouter + config_foreach set_server_default_route server fi - ip route replace default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE table 991337 + #ip route replace default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE table 991337 + uci -q batch <<-EOF >/dev/null + set network.default_fw_route=route + set network.default_fw_route.interface=$OMR_TRACKER_INTERFACE + set network.default_fw_route.target='0.0.0.0' + set network.default_fw_route.netmask='0.0.0.0' + set network.default_fw_route.gateway=$OMR_TRACKER_DEVICE_GATEWAY + set network.default_fw_route.table=991337 + commit network.default_fw_route + EOF fi multipath_config="on" fi if [ -n "$OMR_TRACKER_DEVICE_IP" ] && [ -n "$OMR_TRACKER_DEVICE_GATEWAY" ]; then - #local metric=$(ip rule show | grep -m 1 "$OMR_TRACKER_DEVICE_IP" | awk '{print $5}') - local metric=$(ip rule show | grep "$OMR_TRACKER_DEVICE_IP" | grep -m 1 "$OMR_TRACKER_DEVICE" | grep -om1 'lookup [[:digit:]]' | awk '{print $2}') - [ -n "$metric" ] && { - ip route replace default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE metric $metric - config_load shadowsocks-libev - config_foreach set_ss_route server $metric - } + #local metric=$(ip rule show | grep "$OMR_TRACKER_DEVICE_IP" | grep -m 1 "$OMR_TRACKER_DEVICE" | grep -om1 'lookup [[:digit:]]' | awk '{print $2}') + #[ -n "$metric" ] && { + # #ip route replace default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE metric $metric + # config_load shadowsocks-libev + # config_foreach set_ss_route server $metric + #} + config_load openmptcprouter + config_foreach set_server_route server fi [ "$multipath_config" = "on" ] && glorytun-udp path $OMR_TRACKER_DEVICE_IP dev tun0 up > /dev/null 2>&1 @@ -274,6 +302,7 @@ fi multipath "$OMR_TRACKER_DEVICE" "$multipath_config" fi } +/etc/init.d/network reload # Save wan settings for status page if [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc)" = "" ] || [ $(($(date +"%s") - $(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc))) -gt 3600 ]; then