luci: Optimization tcp node socks logic
The TCP Node Socks must be used, and for code logic. And More convenient expansion in the future.
This commit is contained in:
parent
3bc71db379
commit
78a33066ed
@ -13,18 +13,18 @@ for k, e in ipairs(api.get_valid_nodes()) do
|
||||
nodes_table[#nodes_table + 1] = e
|
||||
end
|
||||
|
||||
local tcp_socks_server = "127.0.0.1" .. ":" .. (uci:get(appname, "@global[0]", "tcp_node_socks_port") or "1070")
|
||||
local socks_table = {}
|
||||
socks_table[#socks_table + 1] = {
|
||||
id = tcp_socks_server,
|
||||
remarks = tcp_socks_server .. " - " .. translate("TCP Node")
|
||||
}
|
||||
uci:foreach(appname, "socks", function(s)
|
||||
if s.enabled == "1" and s.node then
|
||||
local id, remarks
|
||||
local same, i = s.node:match("^(tcp)")
|
||||
if same then
|
||||
remarks = translatef("Same as the tcp node")
|
||||
else
|
||||
for k, n in pairs(nodes_table) do
|
||||
if (s.node == n.id) then
|
||||
remarks = n["remark"]; break
|
||||
end
|
||||
for k, n in pairs(nodes_table) do
|
||||
if (s.node == n.id) then
|
||||
remarks = n["remark"]; break
|
||||
end
|
||||
end
|
||||
id = "127.0.0.1" .. ":" .. s.port
|
||||
@ -169,6 +169,19 @@ udp_node = s:taboption("Main", ListValue, "udp_node", "<a style='color: red'>" .
|
||||
udp_node:value("nil", translate("Close"))
|
||||
udp_node:value("tcp", translate("Same as the tcp node"))
|
||||
|
||||
tcp_node_socks_port = s:taboption("Main", Value, "tcp_node_socks_port", translate("TCP Node") .. " Socks " .. translate("Listen Port"))
|
||||
tcp_node_socks_port.default = 1070
|
||||
tcp_node_socks_port.datatype = "port"
|
||||
|
||||
--[[
|
||||
if has_v2ray or has_xray then
|
||||
tcp_node_http_port = s:taboption("Main", Value, "tcp_node_http_port", translate("TCP Node") .. " HTTP " .. translate("Listen Port") .. " " .. translate("0 is not use"))
|
||||
tcp_node_http_port.default = 0
|
||||
tcp_node_http_port.datatype = "port"
|
||||
end
|
||||
]]--
|
||||
|
||||
|
||||
s:tab("DNS", translate("DNS"))
|
||||
|
||||
o = s:taboption("DNS", Flag, "filter_proxy_ipv6", translate("Filter Proxy Host IPv6"), translate("Experimental feature."))
|
||||
@ -211,6 +224,7 @@ end
|
||||
|
||||
o = s:taboption("DNS", Value, "socks_server", translate("Socks Server"), translate("Make sure socks service is available on this address."))
|
||||
for k, v in pairs(socks_table) do o:value(v.id, v.remarks) end
|
||||
o.default = socks_table[1].id
|
||||
o.validate = function(self, value, t)
|
||||
if not datatypes.ipaddrport(value) then
|
||||
return nil, translate("Socks Server") .. " " .. translate("Not valid IP format, please re-enter!")
|
||||
@ -399,9 +413,8 @@ o.default = 1
|
||||
o.rmempty = false
|
||||
|
||||
socks_node = s:option(ListValue, "node", translate("Socks Node"))
|
||||
socks_node:value("tcp", translate("Same as the tcp node"))
|
||||
|
||||
local n = 0
|
||||
local n = 1
|
||||
uci:foreach(appname, "socks", function(s)
|
||||
if s[".name"] == section then
|
||||
return false
|
||||
|
@ -45,49 +45,52 @@ local auto_switch = api.uci_get_type("auto_switch", "enable", 0)
|
||||
for (var i = 0; i < node.childNodes.length; i++) {
|
||||
if (node.childNodes[i].childNodes && node.childNodes[i].childNodes.length > 0) {
|
||||
for (var k = 0; k < node.childNodes[i].childNodes.length; k++) {
|
||||
var dom = node.childNodes[i].childNodes[k];
|
||||
if (dom.id) {
|
||||
var s = dom.id.match(reg1);
|
||||
if (s) {
|
||||
dom_id = dom.id.split("cbi-").join("cbid-").split("-").join(".");
|
||||
var node_select = document.getElementsByName(dom_id)[0];
|
||||
var node_select_value = node_select.value;
|
||||
if (node_select_value && node_select_value != "nil" && node_select_value.indexOf("_default") != 0 && node_select_value.indexOf("_direct") != 0 && node_select_value.indexOf("_blackhole") != 0) {
|
||||
if (global_id != null && node_select_value.indexOf("tcp") == 0) {
|
||||
var d = global_id + "-tcp_node";
|
||||
d = d.replace("cbi-", "cbid-").replace(new RegExp("-", 'g'), ".");
|
||||
var dom = document.getElementsByName(d)[0];
|
||||
var _node_select_value = dom.value;
|
||||
if (_node_select_value && _node_select_value != "nil") {
|
||||
node_select_value = _node_select_value;
|
||||
try {
|
||||
var dom = node.childNodes[i].childNodes[k];
|
||||
if (dom.id) {
|
||||
var s = dom.id.match(reg1);
|
||||
if (s) {
|
||||
dom_id = dom.id.split("cbi-").join("cbid-").split("-").join(".");
|
||||
var node_select = document.getElementsByName(dom_id)[0];
|
||||
var node_select_value = node_select.value;
|
||||
if (node_select_value && node_select_value != "nil" && node_select_value.indexOf("_default") != 0 && node_select_value.indexOf("_direct") != 0 && node_select_value.indexOf("_blackhole") != 0) {
|
||||
if (global_id != null && node_select_value.indexOf("tcp") == 0) {
|
||||
var d = global_id + "-tcp_node";
|
||||
d = d.replace("cbi-", "cbid-").replace(new RegExp("-", 'g'), ".");
|
||||
var dom = document.getElementsByName(d)[0];
|
||||
var _node_select_value = dom.value;
|
||||
if (_node_select_value && _node_select_value != "nil") {
|
||||
node_select_value = _node_select_value;
|
||||
}
|
||||
}
|
||||
var v = document.getElementById(dom_id + "-" + node_select_value);
|
||||
if (v) {
|
||||
node_select.title = v.text;
|
||||
} else {
|
||||
node_select.title = node_select.options[node_select.options.selectedIndex].text;
|
||||
}
|
||||
|
||||
var new_html = "";
|
||||
|
||||
var new_a = document.createElement("a");
|
||||
new_a.innerHTML = "<%:Edit%>";
|
||||
new_a.href = "#";
|
||||
new_a.setAttribute("onclick", "location.href='" + '<%=api.url("node_config")%>' + "/" + node_select_value + "'");
|
||||
new_html = new_a.outerHTML;
|
||||
|
||||
if (s[0] == "tcp" || s[0] == "udp") {
|
||||
var log_a = document.createElement("a");
|
||||
log_a.innerHTML = "<%:Log%>";
|
||||
log_a.href = "#";
|
||||
log_a.setAttribute("onclick", "window.open('" + '<%=api.url("get_redir_log")%>' + "?proto=" + s[0] + "', '_blank')");
|
||||
new_html += "  " + log_a.outerHTML;
|
||||
}
|
||||
|
||||
node_select.insertAdjacentHTML("afterend", "  " + new_html);
|
||||
}
|
||||
var v = document.getElementById(dom_id + "-" + node_select_value);
|
||||
if (v) {
|
||||
node_select.title = v.text;
|
||||
} else {
|
||||
node_select.title = node_select.options[node_select.options.selectedIndex].text;
|
||||
}
|
||||
|
||||
var new_html = "";
|
||||
|
||||
var new_a = document.createElement("a");
|
||||
new_a.innerHTML = "<%:Edit%>";
|
||||
new_a.href = "#";
|
||||
new_a.setAttribute("onclick", "location.href='" + '<%=api.url("node_config")%>' + "/" + node_select_value + "'");
|
||||
new_html = new_a.outerHTML;
|
||||
|
||||
if (s[0] == "tcp" || s[0] == "udp") {
|
||||
var log_a = document.createElement("a");
|
||||
log_a.innerHTML = "<%:Log%>";
|
||||
log_a.href = "#";
|
||||
log_a.setAttribute("onclick", "window.open('" + '<%=api.url("get_redir_log")%>' + "?proto=" + s[0] + "', '_blank')");
|
||||
new_html += "  " + log_a.outerHTML;
|
||||
}
|
||||
|
||||
node_select.insertAdjacentHTML("afterend", "  " + new_html);
|
||||
}
|
||||
}
|
||||
} catch(err) {
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -102,37 +105,31 @@ local auto_switch = api.uci_get_type("auto_switch", "enable", 0)
|
||||
descr.outerHTML = socks_enabled_dom.outerHTML;
|
||||
rows = socks.getElementsByClassName("cbi-section-table-row");
|
||||
for (var i = 0; i < rows.length; i++) {
|
||||
var row = rows[i];
|
||||
var id = row.id;
|
||||
if (!id) continue;
|
||||
var dom_id = id + "-node";
|
||||
var node = document.getElementById(dom_id);
|
||||
var dom_id = dom_id.replace("cbi-", "cbid-").replace(new RegExp("-", 'g'), ".");
|
||||
var node_select = document.getElementsByName(dom_id)[0];
|
||||
var node_select_value = node_select.value;
|
||||
if (node_select_value && node_select_value != "nil") {
|
||||
if (global_id != null && node_select_value.indexOf("tcp") == 0) {
|
||||
var d = global_id + "-tcp_node";
|
||||
d = d.replace("cbi-", "cbid-").replace(new RegExp("-", 'g'), ".");
|
||||
var dom = document.getElementsByName(d)[0];
|
||||
var _node_select_value = dom.value;
|
||||
if (_node_select_value && _node_select_value != "nil") {
|
||||
node_select_value = _node_select_value;
|
||||
try {
|
||||
var row = rows[i];
|
||||
var id = row.id;
|
||||
if (!id) continue;
|
||||
var dom_id = id + "-node";
|
||||
var node = document.getElementById(dom_id);
|
||||
var dom_id = dom_id.replace("cbi-", "cbid-").replace(new RegExp("-", 'g'), ".");
|
||||
var node_select = document.getElementsByName(dom_id)[0];
|
||||
var node_select_value = node_select.value;
|
||||
if (node_select_value && node_select_value != "nil") {
|
||||
var v = document.getElementById(dom_id + "-" + node_select_value);
|
||||
if (v) {
|
||||
node_select.title = v.text;
|
||||
} else {
|
||||
node_select.title = node_select.options[node_select.options.selectedIndex].text;
|
||||
}
|
||||
|
||||
var new_a = document.createElement("a");
|
||||
new_a.innerHTML = "<%:Edit%>";
|
||||
new_a.href = "#";
|
||||
new_a.setAttribute("onclick","location.href='" + '<%=api.url("node_config")%>' + "/" + node_select_value + "'");
|
||||
|
||||
node_select.insertAdjacentHTML("afterend", "  " + new_a.outerHTML);
|
||||
}
|
||||
var v = document.getElementById(dom_id + "-" + node_select_value);
|
||||
if (v) {
|
||||
node_select.title = v.text;
|
||||
} else {
|
||||
node_select.title = node_select.options[node_select.options.selectedIndex].text;
|
||||
}
|
||||
|
||||
var new_a = document.createElement("a");
|
||||
new_a.innerHTML = "<%:Edit%>";
|
||||
new_a.href = "#";
|
||||
new_a.setAttribute("onclick","location.href='" + '<%=api.url("node_config")%>' + "/" + node_select_value + "'");
|
||||
|
||||
node_select.insertAdjacentHTML("afterend", "  " + new_a.outerHTML);
|
||||
} catch(err) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4,6 +4,7 @@ config global
|
||||
option socks_enabled '0'
|
||||
option tcp_node 'nil'
|
||||
option udp_node 'nil'
|
||||
option tcp_node_socks_port '1070'
|
||||
option dns_mode 'dns2tcp'
|
||||
option remote_dns '1.1.1.1'
|
||||
option filter_proxy_ipv6 '0'
|
||||
|
@ -658,12 +658,12 @@ run_redir() {
|
||||
[ "$tcp_node_socks" = "1" ] && {
|
||||
tcp_node_socks_flag=1
|
||||
_v2ray_args="${_v2ray_args} socks_port=${tcp_node_socks_port}"
|
||||
config_file=$(echo $config_file | sed "s/TCP/TCP_SOCKS_$tcp_node_socks_id/g")
|
||||
config_file=$(echo $config_file | sed "s/TCP/TCP_SOCKS/g")
|
||||
}
|
||||
[ "$tcp_node_http" = "1" ] && {
|
||||
tcp_node_http_flag=1
|
||||
_v2ray_args="${_v2ray_args} http_port=${tcp_node_http_port}"
|
||||
config_file=$(echo $config_file | sed "s/TCP/TCP_HTTP_$tcp_node_http_id/g")
|
||||
config_file=$(echo $config_file | sed "s/TCP/TCP_HTTP/g")
|
||||
}
|
||||
[ "$TCP_UDP" = "1" ] && {
|
||||
UDP_REDIR_PORT=$local_port
|
||||
@ -767,12 +767,12 @@ run_redir() {
|
||||
[ "$tcp_proxy_way" = "tproxy" ] && _extra_param="${_extra_param} -tcp_tproxy true"
|
||||
[ "$tcp_node_socks" = "1" ] && {
|
||||
tcp_node_socks_flag=1
|
||||
config_file=$(echo $config_file | sed "s/TCP/TCP_SOCKS_$tcp_node_socks_id/g")
|
||||
config_file=$(echo $config_file | sed "s/TCP/TCP_SOCKS/g")
|
||||
_extra_param="${_extra_param} -local_socks_port ${tcp_node_socks_port}"
|
||||
}
|
||||
[ "$tcp_node_http" = "1" ] && {
|
||||
tcp_node_http_flag=1
|
||||
config_file=$(echo $config_file | sed "s/TCP/TCP_HTTP_$tcp_node_http_id/g")
|
||||
config_file=$(echo $config_file | sed "s/TCP/TCP_HTTP/g")
|
||||
_extra_param="${_extra_param} -local_http_port ${tcp_node_http_port}"
|
||||
}
|
||||
[ "$TCP_UDP" = "1" ] && {
|
||||
@ -788,12 +788,12 @@ run_redir() {
|
||||
local _extra_param="-local_tcp_redir_port $local_port"
|
||||
[ "$tcp_node_socks" = "1" ] && {
|
||||
tcp_node_socks_flag=1
|
||||
config_file=$(echo $config_file | sed "s/TCP/TCP_SOCKS_$tcp_node_socks_id/g")
|
||||
config_file=$(echo $config_file | sed "s/TCP/TCP_SOCKS/g")
|
||||
_extra_param="${_extra_param} -local_socks_port ${tcp_node_socks_port}"
|
||||
}
|
||||
[ "$tcp_node_http" = "1" ] && {
|
||||
tcp_node_http_flag=1
|
||||
config_file=$(echo $config_file | sed "s/TCP/TCP_HTTP_$tcp_node_http_id/g")
|
||||
config_file=$(echo $config_file | sed "s/TCP/TCP_HTTP/g")
|
||||
_extra_param="${_extra_param} -local_http_port ${tcp_node_http_port}"
|
||||
}
|
||||
[ "$TCP_UDP" = "1" ] && {
|
||||
@ -826,16 +826,20 @@ run_redir() {
|
||||
[ -z "$tcp_node_socks_flag" ] && {
|
||||
[ "$tcp_node_socks" = "1" ] && {
|
||||
local port=$tcp_node_socks_port
|
||||
local config_file="SOCKS_$tcp_node_socks_id.json"
|
||||
local log_file="SOCKS_$tcp_node_socks_id.log"
|
||||
local config_file="SOCKS_TCP.json"
|
||||
local log_file="SOCKS_TCP.log"
|
||||
local http_port=0
|
||||
local http_config_file="HTTP2SOCKS_$tcp_node_http_id.json"
|
||||
local http_config_file="HTTP2SOCKS_TCP.json"
|
||||
[ "$tcp_node_http" = "1" ] && [ -z "$tcp_node_http_flag" ] && {
|
||||
http_port=$tcp_node_http_port
|
||||
}
|
||||
run_socks flag=$tcp_node_socks_id node=$node bind=0.0.0.0 socks_port=$port config_file=$config_file http_port=$http_port http_config_file=$http_config_file
|
||||
run_socks flag=TCP node=$node bind=0.0.0.0 socks_port=$port config_file=$config_file http_port=$http_port http_config_file=$http_config_file
|
||||
}
|
||||
}
|
||||
|
||||
[ "$tcp_node_socks" = "1" ] && {
|
||||
echo "127.0.0.1:$tcp_node_socks_port" > $TMP_PATH/TCP_SOCKS_server
|
||||
}
|
||||
;;
|
||||
esac
|
||||
unset tcp_node_socks_flag tcp_node_http_flag
|
||||
@ -856,26 +860,6 @@ node_switch() {
|
||||
local log_file="${FLAG}.log"
|
||||
local port=$(cat $TMP_PORT_PATH/${FLAG})
|
||||
|
||||
[ "$SOCKS_ENABLED" = "1" ] && {
|
||||
local ids=$(uci show $CONFIG | grep "=socks" | awk -F '.' '{print $2}' | awk -F '=' '{print $1}')
|
||||
for id in $ids; do
|
||||
[ "$(config_n_get $id enabled 0)" = "0" ] && continue
|
||||
[ "$(config_n_get $id node nil)" != "tcp" ] && continue
|
||||
local socks_port=$(config_n_get $id port)
|
||||
local http_port=$(config_n_get $id http_port 0)
|
||||
pgrep -af "${TMP_PATH}.*${id}" | awk 'BEGIN{IGNORECASE=1}/SOCKS/{print $1}' | xargs kill -9 >/dev/null 2>&1
|
||||
tcp_node_socks=1
|
||||
tcp_node_socks_port=$socks_port
|
||||
tcp_node_socks_id=$id
|
||||
[ "$http_port" != "0" ] && {
|
||||
tcp_node_http=1
|
||||
tcp_node_http_port=$http_port
|
||||
tcp_node_http_id=$id
|
||||
}
|
||||
break
|
||||
done
|
||||
}
|
||||
|
||||
[ "$shunt_logic" != "0" ] && {
|
||||
local node=$(config_t_get global ${flag}_node nil)
|
||||
[ "$(config_n_get $node protocol nil)" = "_shunt" ] && {
|
||||
@ -939,6 +923,10 @@ start_redir() {
|
||||
}
|
||||
|
||||
start_socks() {
|
||||
tcp_node_socks=1
|
||||
tcp_node_socks_port=$(config_t_get global tcp_node_socks_port 1070)
|
||||
tcp_node_http_port=$(config_t_get global tcp_node_http_port 0)
|
||||
[ "$tcp_node_http_port" != "0" ] && tcp_node_http=1
|
||||
[ "$SOCKS_ENABLED" = "1" ] && {
|
||||
local ids=$(uci show $CONFIG | grep "=socks" | awk -F '.' '{print $2}' | awk -F '=' '{print $1}')
|
||||
[ -n "$ids" ] && {
|
||||
@ -953,17 +941,6 @@ start_socks() {
|
||||
local log_file="SOCKS_${id}.log"
|
||||
local http_port=$(config_n_get $id http_port 0)
|
||||
local http_config_file="HTTP2SOCKS_${id}.json"
|
||||
[ "$node" == "tcp" ] && {
|
||||
tcp_node_socks=1
|
||||
tcp_node_socks_port=$port
|
||||
tcp_node_socks_id=$id
|
||||
[ "$http_port" != "0" ] && {
|
||||
tcp_node_http=1
|
||||
tcp_node_http_port=$http_port
|
||||
tcp_node_http_id=$id
|
||||
}
|
||||
continue
|
||||
}
|
||||
run_socks flag=$id node=$node bind=0.0.0.0 socks_port=$port config_file=$config_file http_port=$http_port http_config_file=$http_config_file
|
||||
echo $node > $TMP_ID_PATH/SOCKS_${id}
|
||||
done
|
||||
|
@ -1137,10 +1137,6 @@ add_firewall_rule() {
|
||||
msg="Socks 服务 [:${port}]"
|
||||
if [ "$node" == "nil" ] || [ "$port" == "0" ]; then
|
||||
msg="${msg} 未配置完全,略过"
|
||||
elif [ "$(echo $node | grep ^tcp)" ]; then
|
||||
#eval "node=\${TCP_NODE}"
|
||||
#msg="${msg} 使用与 TCP 代理自动切换${num} 相同的节点,延后处理"
|
||||
continue
|
||||
else
|
||||
filter_node $node TCP > /dev/null 2>&1 &
|
||||
filter_node $node UDP > /dev/null 2>&1 &
|
||||
@ -1155,7 +1151,7 @@ add_firewall_rule() {
|
||||
eval "node=\${${stream}_NODE}"
|
||||
eval "port=\${${stream}_REDIR_PORT}"
|
||||
#echolog "分析 $stream 代理自动切换..."
|
||||
[ "$node" == "tcp" ] && [ "$stream" == "UDP" ] && {
|
||||
[ "$stream" == "UDP" ] && [ "$node" == "tcp" ] && {
|
||||
eval "node=\${TCP_NODE}"
|
||||
eval "port=\${TCP_REDIR_PORT}"
|
||||
}
|
||||
|
@ -1143,10 +1143,6 @@ add_firewall_rule() {
|
||||
msg="Socks 服务 [:${port}]"
|
||||
if [ "$node" == "nil" ] || [ "$port" == "0" ]; then
|
||||
msg="${msg} 未配置完全,略过"
|
||||
elif [ "$(echo $node | grep ^tcp)" ]; then
|
||||
#eval "node=\${TCP_NODE}"
|
||||
#msg="${msg} 使用与 TCP 代理自动切换${num} 相同的节点,延后处理"
|
||||
continue
|
||||
else
|
||||
filter_node $node TCP > /dev/null 2>&1 &
|
||||
filter_node $node UDP > /dev/null 2>&1 &
|
||||
@ -1161,7 +1157,7 @@ add_firewall_rule() {
|
||||
eval "node=\${${stream}_NODE}"
|
||||
eval "port=\${${stream}_REDIR_PORT}"
|
||||
#echolog "分析 $stream 代理自动切换..."
|
||||
[ "$node" == "tcp" ] && [ "$stream" == "UDP" ] && {
|
||||
[ "$stream" == "UDP" ] && [ "$node" == "tcp" ] && {
|
||||
eval "node=\${TCP_NODE}"
|
||||
eval "port=\${TCP_REDIR_PORT}"
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user