mirror of
https://github.com/coolsnowwolf/lede.git
synced 2025-04-19 14:13:30 +00:00
Add reverse config for V2Ray Pro
* add reverse add reverse use io write ,fix sequence(cjson.encode's sequence , reverse can't work ) * fix v2ray rule bug
This commit is contained in:
parent
a4cc14dc85
commit
9e5b35c867
109
package/lean/luci-app-v2ray-pro/luasrc/model/cbi/v2raypro.lua
Normal file → Executable file
109
package/lean/luci-app-v2ray-pro/luasrc/model/cbi/v2raypro.lua
Normal file → Executable file
@ -174,7 +174,116 @@ tls.rmempty = false
|
||||
|
||||
mux = s:taboption("main",Flag, "mux", translate("Mux"))
|
||||
mux.rmempty = false
|
||||
------------------------------------------------
|
||||
s:tab("reverse", translate("Severse Setting"))
|
||||
risen = s:taboption("reverse",Flag, "risen", translate("Enable"))
|
||||
risen.rmempty = false
|
||||
|
||||
rserver = s:taboption("reverse",Value, "raddress", translate("Server Address"))
|
||||
rserver.datatype = "host"
|
||||
rserver.rmempty = ture
|
||||
|
||||
rserver_domain = s:taboption("reverse",Value, "rserver_domain", translate("Server domain"))
|
||||
rserver_domain.datatype = "host"
|
||||
rserver_domain.rmempty = ture
|
||||
|
||||
rserver_port = s:taboption("reverse",Value, "rport", translate("Server Port"))
|
||||
rserver_port.datatype = "range(0,65535)"
|
||||
rserver_port.rmempty = ture
|
||||
|
||||
rid = s:taboption("reverse",Value, "rid", translate("ID"))
|
||||
rid.password = true
|
||||
|
||||
ralterId = s:taboption("reverse",Value, "ralterId", translate("Alter ID"))
|
||||
ralterId.datatype = "range(1,65535)"
|
||||
ralterId.rmempty = ture
|
||||
|
||||
rsecurity = s:taboption("reverse",ListValue, "rsecurity", translate("Security"))
|
||||
rsecurity:value("none")
|
||||
rsecurity:value("auto")
|
||||
rsecurity:value("aes-128-cfb")
|
||||
rsecurity:value("aes-128-gcm")
|
||||
rsecurity:value("chacha20-poly1305")
|
||||
|
||||
rnetwork_type = s:taboption("reverse",ListValue, "rnetwork_type", translate("Network Type"))
|
||||
rnetwork_type:value("tcp")
|
||||
rnetwork_type:value("kcp")
|
||||
rnetwork_type:value("ws")
|
||||
rnetwork_type:value("h2")
|
||||
|
||||
-- tcp settings
|
||||
rtcp_obfs = s:taboption("reverse",ListValue, "rtcp_obfs", translate("TCP Obfs"))
|
||||
rtcp_obfs:value("none")
|
||||
rtcp_obfs:value("http")
|
||||
rtcp_obfs:depends("rnetwork_type", "tcp")
|
||||
|
||||
rtcp_path = s:taboption("reverse",DynamicList, "rtcp_path", translate("TCP Obfs Path"))
|
||||
rtcp_path:depends("rtcp_obfs", "http")
|
||||
|
||||
rtcp_host = s:taboption("reverse",DynamicList, "rtcp_host", translate("TCP Obfs Header"))
|
||||
rtcp_host:depends("rtcp_obfs", "http")
|
||||
rtcp_host.datatype = "host"
|
||||
|
||||
-- kcp settings
|
||||
rkcp_obfs = s:taboption("reverse",ListValue, "rkcp_obfs", translate("KCP Obfs"))
|
||||
rkcp_obfs:value("none")
|
||||
rkcp_obfs:value("srtp")
|
||||
rkcp_obfs:value("utp")
|
||||
rkcp_obfs:value("wechat-video")
|
||||
rkcp_obfs:value("dtls")
|
||||
rkcp_obfs:value("wireguard")
|
||||
rkcp_obfs:depends("rnetwork_type", "kcp")
|
||||
|
||||
rkcp_mtu = s:taboption("reverse",Value, "rkcp_mtu", translate("KCP MTU"))
|
||||
rkcp_mtu.datatype = "range(576,1460)"
|
||||
rkcp_mtu:depends("rnetwork_type", "kcp")
|
||||
|
||||
rkcp_tti = s:taboption("reverse",Value, "rkcp_tti", translate("KCP TTI"))
|
||||
rkcp_tti.datatype = "range(10,100)"
|
||||
rkcp_tti:depends("rnetwork_type", "kcp")
|
||||
|
||||
rkcp_uplink = s:taboption("reverse",Value, "rkcp_uplink", translate("KCP uplinkCapacity"))
|
||||
rkcp_uplink.datatype = "range(0,1000)"
|
||||
rkcp_uplink:depends("rnetwork_type", "kcp")
|
||||
|
||||
rkcp_downlink = s:taboption("reverse",Value, "rkcp_downlink", translate("KCP downlinkCapacity"))
|
||||
rkcp_downlink.datatype = "range(0,1000)"
|
||||
rkcp_downlink:depends("rnetwork_type", "kcp")
|
||||
|
||||
rkcp_readbuf = s:taboption("reverse",Value, "rkcp_readbuf", translate("KCP readBufferSize"))
|
||||
rkcp_readbuf.datatype = "range(0,100)"
|
||||
rkcp_readbuf:depends("rnetwork_type", "kcp")
|
||||
|
||||
rkcp_writebuf = s:taboption("reverse",Value, "rkcp_writebuf", translate("KCP writeBufferSize"))
|
||||
rkcp_writebuf.datatype = "range(0,100)"
|
||||
rkcp_writebuf:depends("rnetwork_type", "kcp")
|
||||
|
||||
rkcp_congestion = s:taboption("reverse",Flag, "rkcp_congestion", translate("KCP Congestion"))
|
||||
rkcp_congestion:depends("rnetwork_type", "kcp")
|
||||
|
||||
-- websocket settings
|
||||
rws_path = s:taboption("reverse",Value, "rws_path", translate("WebSocket Path"))
|
||||
rws_path:depends("rnetwork_type", "ws")
|
||||
|
||||
rws_headers = s:taboption("reverse",Value, "rws_headers", translate("WebSocket Header"))
|
||||
rws_headers:depends("rnetwork_type", "ws")
|
||||
rws_headers.datatype = "host"
|
||||
|
||||
-- http/2 settings
|
||||
rh2_path = s:taboption("reverse",Value, "rh2_path", translate("HTTP Path"))
|
||||
rh2_path:depends("rnetwork_type", "h2")
|
||||
|
||||
rh2_domain = s:taboption("reverse",Value, "rh2_domain", translate("HTTP Domain"))
|
||||
rh2_domain:depends("rnetwork_type", "h2")
|
||||
rh2_domain.datatype = "host"
|
||||
|
||||
-- others
|
||||
rtls = s:taboption("reverse",Flag, "rtls", translate("TLS"))
|
||||
rtls.rmempty = false
|
||||
|
||||
rmux = s:taboption("reverse",Flag, "rmux", translate("Mux"))
|
||||
rmux.rmempty = false
|
||||
--------------------------------------------------
|
||||
s:tab("list", translate("User-defined GFW-List"))
|
||||
gfwlist = s:taboption("list", TextValue, "conf")
|
||||
gfwlist.description = translate("<br />(!)Note: When the domain name is entered and will automatically merge with the online GFW-List. Please manually update the GFW-List list after applying.")
|
||||
|
6
package/lean/luci-app-v2ray-pro/po/zh-cn/v2raypro.po
Normal file → Executable file
6
package/lean/luci-app-v2ray-pro/po/zh-cn/v2raypro.po
Normal file → Executable file
@ -114,3 +114,9 @@ msgstr "文件已保存到"
|
||||
|
||||
msgid "No specify upload file."
|
||||
msgstr "未指定上传文件"
|
||||
|
||||
msgid "Severse Setting"
|
||||
msgstr "反向代理设置"
|
||||
|
||||
msgid "Server domain"
|
||||
msgstr "反向代理域名"
|
||||
|
25
package/lean/luci-app-v2ray-pro/root/etc/config/v2raypro
Normal file → Executable file
25
package/lean/luci-app-v2ray-pro/root/etc/config/v2raypro
Normal file → Executable file
@ -9,10 +9,23 @@ config v2raypro 'v2raypro'
|
||||
option id '00755892-0921-4433-bd92-04242abd92af'
|
||||
option alterId '64'
|
||||
option security 'aes-128-gcm'
|
||||
option network_type 'ws'
|
||||
option tls '1'
|
||||
option mux '1'
|
||||
option ws_path '/v2ray'
|
||||
option ws_headers 'www.baidu.com'
|
||||
option enabled '0'
|
||||
option network_type 'tcp'
|
||||
option tcp_obfs 'none'
|
||||
option tls '0'
|
||||
option mux '0'
|
||||
option raddress '4.4.4.4'
|
||||
option rport '455'
|
||||
option ralterId '64'
|
||||
option rsecurity 'none'
|
||||
option rnetwork_type 'tcp'
|
||||
option rtcp_obfs 'none'
|
||||
option rtls '0'
|
||||
option rmux '0'
|
||||
option rid '00755892-0921-4433-bd92-04242abd92af'
|
||||
option enabled '1'
|
||||
option renable '1'
|
||||
option rdomain 'abcd.com'
|
||||
option renabled '0'
|
||||
option risen '0'
|
||||
option rserver_domain 'abc.com'
|
||||
|
||||
|
337
package/lean/luci-app-v2ray-pro/root/etc/v2ray/gen_config.lua
Normal file → Executable file
337
package/lean/luci-app-v2ray-pro/root/etc/v2ray/gen_config.lua
Normal file → Executable file
@ -1,6 +1,10 @@
|
||||
--[[
|
||||
Auto generate config for Project V
|
||||
Author: @libc0607
|
||||
add reverse
|
||||
use io write ,fix sequence(cjson.encode's sequence , reverse can't work )
|
||||
@tqsi
|
||||
|
||||
]]--
|
||||
|
||||
local conf_path, json_path = ...
|
||||
@ -8,13 +12,14 @@ conf_path = conf_path or "v2raypro"
|
||||
json_path = json_path or "/tmp/config.json"
|
||||
|
||||
local local_listen_port = 7070
|
||||
|
||||
local cjson = require "cjson.safe"
|
||||
local ucursor = require "luci.model.uci".cursor()
|
||||
local lip = require "luci.ip"
|
||||
|
||||
|
||||
local v2ray_stream_mode = ucursor:get(conf_path, "v2raypro", "network_type") -- tcp/kcp/ws
|
||||
|
||||
local v2ray_enReverse = ucursor:get(conf_path, "v2raypro", "risen")=="1" and true or false
|
||||
function v2ray_get_conf_list(op)
|
||||
local t = {}
|
||||
for k, v in pairs(ucursor:get_list(conf_path, 'v2ray', op)) do
|
||||
@ -47,122 +52,232 @@ function get_ip_list_by_domain(domain)
|
||||
return domain_list
|
||||
end
|
||||
|
||||
local v2ray = {
|
||||
log = {
|
||||
access = "",
|
||||
error = "",
|
||||
loglevel = "none"
|
||||
},
|
||||
inbound = {
|
||||
protocol = "dokodemo-door",
|
||||
port = local_listen_port,
|
||||
domainOverride = {"tls", "http"},
|
||||
address = "",
|
||||
settings = {
|
||||
network = "tcp,udp",
|
||||
timeout = 30,
|
||||
followRedirect = true
|
||||
},
|
||||
},
|
||||
outbound = {
|
||||
protocol = "vmess",
|
||||
settings = {
|
||||
vnext = {
|
||||
[1] = {
|
||||
address = ucursor:get(conf_path, "v2raypro", "address"),
|
||||
port = tonumber(ucursor:get(conf_path, "v2raypro", "port")),
|
||||
users = {
|
||||
[1] = {
|
||||
id = ucursor:get(conf_path, "v2raypro", "id"),
|
||||
alterId = tonumber(ucursor:get(conf_path, "v2raypro", "alterId")),
|
||||
security = ucursor:get(conf_path, "v2raypro", "security")
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
streamSettings = {
|
||||
network = ucursor:get(conf_path, "v2raypro", "network_type"),
|
||||
security = (ucursor:get(conf_path, "v2raypro", "tls") == '1') and "tls" or "none",
|
||||
tcpSettings = (v2ray_stream_mode == "tcp" and ucursor:get(conf_path, "v2raypro", "tcp_obfs") == "http") and {
|
||||
connectionReuse = true,
|
||||
header = {
|
||||
type = ucursor:get(conf_path, "v2raypro", "tcp_obfs"),
|
||||
request = {
|
||||
version = "1.1",
|
||||
method = "GET",
|
||||
path = v2ray_get_conf_list('tcp_path'),
|
||||
headers = {
|
||||
Host = v2ray_get_conf_list('tcp_host'),
|
||||
User_Agent = {
|
||||
"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36",
|
||||
"Mozilla/5.0 (iPhone; CPU iPhone OS 10_0_2 like Mac OS X) AppleWebKit/601.1 (KHTML, like Gecko) CriOS/53.0.2785.109 Mobile/14A456 Safari/601.1.46"
|
||||
},
|
||||
Accept_Encoding = {"gzip, deflate"},
|
||||
Connection = {"keep-alive"},
|
||||
Pragma = "no-cache"
|
||||
},
|
||||
},
|
||||
response = {
|
||||
version = "1.1",
|
||||
status = "200",
|
||||
reason = "OK",
|
||||
headers = {
|
||||
Content_Type = {"application/octet-stream","video/mpeg"},
|
||||
Transfer_Encoding = {"chunked"},
|
||||
Connection= {"keep-alive"},
|
||||
Pragma = "no-cache"
|
||||
},
|
||||
},
|
||||
}
|
||||
} or nil,
|
||||
|
||||
kcpSettings = (v2ray_stream_mode == "kcp") and {
|
||||
mtu = tonumber(ucursor:get(conf_path, "v2raypro", "kcp_mtu")),
|
||||
tti = tonumber(ucursor:get(conf_path, "v2raypro", "kcp_tti")),
|
||||
uplinkCapacity = tonumber(ucursor:get(conf_path, "v2raypro", "kcp_uplink")),
|
||||
downlinkCapacity = tonumber(ucursor:get(conf_path, "v2raypro", "kcp_downlink")),
|
||||
congestion = (ucursor:get(conf_path, "v2raypro", "kcp_congestion") == "1") and true or false,
|
||||
readBufferSize = tonumber(ucursor:get(conf_path, "v2raypro", "kcp_readbuf")),
|
||||
writeBufferSize = tonumber(ucursor:get(conf_path, "v2raypro", "kcp_writebuf")),
|
||||
header = {
|
||||
type = ucursor:get(conf_path, "v2raypro", "kcp_obfs")
|
||||
}
|
||||
} or nil,
|
||||
|
||||
wsSettings = (v2ray_stream_mode == "ws") and {
|
||||
connectionReuse = true,
|
||||
path = ucursor:get(conf_path, "v2raypro", "ws_path"),
|
||||
headers = (ucursor:get(conf_path, "v2raypro", "ws_headers") ~= nil) and {
|
||||
Host = ucursor:get(conf_path, "v2raypro", "ws_headers")
|
||||
} or nil,
|
||||
} or nil,
|
||||
|
||||
httpSettings = (v2ray_stream_mode == "h2") and {
|
||||
path = ucursor:get(conf_path, "v2raypro", "h2_path"),
|
||||
host = (ucursor:get(conf_path, "v2raypro", "h2_domain") ~= nil) and {
|
||||
ucursor:get(conf_path, "v2raypro", "h2_domain")
|
||||
} or nil,
|
||||
} or nil,
|
||||
},
|
||||
mux = {
|
||||
enabled = (ucursor:get(conf_path, "v2raypro", "mux") == "1") and true or false
|
||||
},
|
||||
},
|
||||
dns = {
|
||||
servers = {
|
||||
"localhost"
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
-- Generate config json to <json_path>
|
||||
local json_raw = cjson.encode(v2ray)
|
||||
|
||||
|
||||
local json_file = io.open(json_path, "w+")
|
||||
io.output(json_file)
|
||||
io.write(json_raw)
|
||||
io.write("{\"log\":{\"loglevel\":\"warning\",\"access\":\"\",\"error\":\"\"},\"dns\": {\"servers\": [\"localhost\"]},\"inbounds\":[{\"port\":7070,\"tag\": \"listen\",\"protocol\":\"dokodemo-door\",\"address\":\"\",\"settings\":{\"followRedirect\":true,\"network\":\"tcp,udp\",\"timeout\":50},\"domainOverride\":[\"tls\",\"http\"]}],")
|
||||
if v2ray_enReverse then --reverse set
|
||||
io.write("\"reverse\": {\"bridges\": [{\"tag\": \"bridge\",\"domain\": \"")
|
||||
io.write(ucursor:get(conf_path, "v2raypro", "rserver_domain"))
|
||||
io.write("\"}]},")
|
||||
end
|
||||
|
||||
--outbound
|
||||
v2ray_proxy={
|
||||
tag = "proxy",
|
||||
protocol = "vmess",
|
||||
settings = {
|
||||
vnext = {
|
||||
[1] = {
|
||||
address = ucursor:get(conf_path, "v2raypro", "address"),
|
||||
port = tonumber(ucursor:get(conf_path, "v2raypro", "port")),
|
||||
users = {
|
||||
[1] = {
|
||||
id = ucursor:get(conf_path, "v2raypro", "id"),
|
||||
alterId = tonumber(ucursor:get(conf_path, "v2raypro", "alterId")),
|
||||
security = ucursor:get(conf_path, "v2raypro", "security")
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
streamSettings = {
|
||||
network = ucursor:get(conf_path, "v2raypro", "network_type"),
|
||||
security = (ucursor:get(conf_path, "v2raypro", "tls") == '1') and "tls" or "none",
|
||||
tcpSettings = (v2ray_stream_mode == "tcp" and ucursor:get(conf_path, "v2raypro", "tcp_obfs") == "http") and {
|
||||
connectionReuse = true,
|
||||
header = {
|
||||
type = ucursor:get(conf_path, "v2raypro", "tcp_obfs"),
|
||||
request = {
|
||||
version = "1.1",
|
||||
method = "GET",
|
||||
path = v2ray_get_conf_list('tcp_path'),
|
||||
headers = {
|
||||
Host = v2ray_get_conf_list('tcp_host'),
|
||||
User_Agent = {
|
||||
"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36",
|
||||
"Mozilla/5.0 (iPhone; CPU iPhone OS 10_0_2 like Mac OS X) AppleWebKit/601.1 (KHTML, like Gecko) CriOS/53.0.2785.109 Mobile/14A456 Safari/601.1.46"
|
||||
},
|
||||
Accept_Encoding = {"gzip, deflate"},
|
||||
Connection = {"keep-alive"},
|
||||
Pragma = "no-cache"
|
||||
},
|
||||
},
|
||||
response = {
|
||||
version = "1.1",
|
||||
status = "200",
|
||||
reason = "OK",
|
||||
headers = {
|
||||
Content_Type = {"application/octet-stream","video/mpeg"},
|
||||
Transfer_Encoding = {"chunked"},
|
||||
Connection= {"keep-alive"},
|
||||
Pragma = "no-cache"
|
||||
},
|
||||
},
|
||||
}
|
||||
} or nil,
|
||||
|
||||
kcpSettings = (v2ray_stream_mode == "kcp") and {
|
||||
mtu = tonumber(ucursor:get(conf_path, "v2raypro", "kcp_mtu")),
|
||||
tti = tonumber(ucursor:get(conf_path, "v2raypro", "kcp_tti")),
|
||||
uplinkCapacity = tonumber(ucursor:get(conf_path, "v2raypro", "kcp_uplink")),
|
||||
downlinkCapacity = tonumber(ucursor:get(conf_path, "v2raypro", "kcp_downlink")),
|
||||
congestion = (ucursor:get(conf_path, "v2raypro", "kcp_congestion") == "1") and true or false,
|
||||
readBufferSize = tonumber(ucursor:get(conf_path, "v2raypro", "kcp_readbuf")),
|
||||
writeBufferSize = tonumber(ucursor:get(conf_path, "v2raypro", "kcp_writebuf")),
|
||||
header = {
|
||||
type = ucursor:get(conf_path, "v2raypro", "kcp_obfs")
|
||||
}
|
||||
} or nil,
|
||||
|
||||
wsSettings = (v2ray_stream_mode == "ws") and {
|
||||
connectionReuse = true,
|
||||
path = ucursor:get(conf_path, "v2raypro", "ws_path"),
|
||||
headers = (ucursor:get(conf_path, "v2raypro", "ws_headers") ~= nil) and {
|
||||
Host = ucursor:get(conf_path, "v2raypro", "ws_headers")
|
||||
} or nil,
|
||||
} or nil,
|
||||
|
||||
httpSettings = (v2ray_stream_mode == "h2") and {
|
||||
path = ucursor:get(conf_path, "v2raypro", "h2_path"),
|
||||
host = (ucursor:get(conf_path, "v2raypro", "h2_domain") ~= nil) and {
|
||||
ucursor:get(conf_path, "v2raypro", "h2_domain")
|
||||
} or nil,
|
||||
} or nil,
|
||||
},
|
||||
mux = (v2ray_enReverse==false) and{
|
||||
enabled = (ucursor:get(conf_path, "v2raypro", "mux") == "1") and true or false
|
||||
} or nil,
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
io.write("\"outbounds\": [")
|
||||
|
||||
|
||||
|
||||
if v2ray_enReverse then
|
||||
local v2ray_stream_tunnel_mode = ucursor:get(conf_path, "v2raypro", "rnetwork_type") -- tcp/kcp/ws
|
||||
local v2ray_tunnel= {
|
||||
tag = "tunnel",
|
||||
protocol = "vmess",
|
||||
settings = {
|
||||
vnext = {
|
||||
[1] = {
|
||||
address = ucursor:get(conf_path, "v2raypro", "raddress"),
|
||||
port = tonumber(ucursor:get(conf_path, "v2raypro", "rport")),
|
||||
users = {
|
||||
[1] = {
|
||||
id = ucursor:get(conf_path, "v2raypro", "rid"),
|
||||
alterId = tonumber(ucursor:get(conf_path, "v2raypro", "ralterId")),
|
||||
security = ucursor:get(conf_path, "v2raypro", "rsecurity")
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
streamSettings = {
|
||||
network = ucursor:get(conf_path, "v2raypro", "rnetwork_type"),
|
||||
security = (ucursor:get(conf_path, "v2raypro", "rtls") == '1') and "tls" or "none",
|
||||
tcpSettings = (v2ray_stream_tunnel_mode == "tcp" and ucursor:get(conf_path, "v2raypro", "rtcp_obfs") == "http") and {
|
||||
connectionReuse = true,
|
||||
header = {
|
||||
type = ucursor:get(conf_path, "v2raypro", "rtcp_obfs"),
|
||||
request = {
|
||||
version = "1.1",
|
||||
method = "GET",
|
||||
path = v2ray_get_conf_list('tcp_path'),
|
||||
headers = {
|
||||
Host = v2ray_get_conf_list('tcp_host'),
|
||||
User_Agent = {
|
||||
"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36",
|
||||
"Mozilla/5.0 (iPhone; CPU iPhone OS 10_0_2 like Mac OS X) AppleWebKit/601.1 (KHTML, like Gecko) CriOS/53.0.2785.109 Mobile/14A456 Safari/601.1.46"
|
||||
},
|
||||
Accept_Encoding = {"gzip, deflate"},
|
||||
Connection = {"keep-alive"},
|
||||
Pragma = "no-cache"
|
||||
},
|
||||
},
|
||||
response = {
|
||||
version = "1.1",
|
||||
status = "200",
|
||||
reason = "OK",
|
||||
headers = {
|
||||
Content_Type = {"application/octet-stream","video/mpeg"},
|
||||
Transfer_Encoding = {"chunked"},
|
||||
Connection= {"keep-alive"},
|
||||
Pragma = "no-cache"
|
||||
},
|
||||
},
|
||||
}
|
||||
} or nil,
|
||||
|
||||
kcpSettings = (v2ray_stream_tunnel_mode == "kcp") and {
|
||||
mtu = tonumber(ucursor:get(conf_path, "v2raypro", "rkcp_mtu")),
|
||||
tti = tonumber(ucursor:get(conf_path, "v2raypro", "rkcp_tti")),
|
||||
uplinkCapacity = tonumber(ucursor:get(conf_path, "v2raypro", "rkcp_uplink")),
|
||||
downlinkCapacity = tonumber(ucursor:get(conf_path, "v2raypro", "rkcp_downlink")),
|
||||
congestion = (ucursor:get(conf_path, "v2raypro", "rkcp_congestion") == "1") and true or false,
|
||||
readBufferSize = tonumber(ucursor:get(conf_path, "v2raypro", "rkcp_readbuf")),
|
||||
writeBufferSize = tonumber(ucursor:get(conf_path, "v2raypro", "rkcp_writebuf")),
|
||||
header = {
|
||||
type = ucursor:get(conf_path, "v2raypro", "rkcp_obfs")
|
||||
}
|
||||
} or nil,
|
||||
|
||||
wsSettings = (v2ray_stream_tunnel_mode == "ws") and {
|
||||
connectionReuse = true,
|
||||
path = ucursor:get(conf_path, "v2raypro", "rws_path"),
|
||||
headers = (ucursor:get(conf_path, "v2raypro", "rws_headers") ~= nil) and {
|
||||
Host = ucursor:get(conf_path, "v2raypro", "rws_headers")
|
||||
} or nil,
|
||||
} or nil,
|
||||
|
||||
httpSettings = (v2ray_stream_tunnel_mode == "h2") and {
|
||||
path = ucursor:get(conf_path, "v2raypro", "rh2_path"),
|
||||
host = (ucursor:get(conf_path, "v2raypro", "rh2_domain") ~= nil) and {
|
||||
ucursor:get(conf_path, "v2raypro", "rh2_domain")
|
||||
} or nil,
|
||||
} or nil,
|
||||
},
|
||||
mux = (v2ray_enReverse==false) and{
|
||||
enabled = (ucursor:get(conf_path, "v2raypro", "mux") == "1") and true or false
|
||||
} or nil,
|
||||
}
|
||||
|
||||
json_raw_t = cjson.encode(v2ray_tunnel)
|
||||
io.write(json_raw_t..",")
|
||||
io.write("{\"protocol\": \"freedom\",\"settings\": {},\"tag\": \"out\"},")
|
||||
|
||||
end
|
||||
|
||||
|
||||
local json_raw = cjson.encode(v2ray_proxy)
|
||||
io.write(json_raw.."],")
|
||||
--io.write("]")
|
||||
|
||||
|
||||
io.write("\"routing\": {\"strategy\": \"rules\",\"settings\": {\"rules\": [")--routing set
|
||||
if v2ray_enReverse then
|
||||
io.write("{\"type\": \"field\",\"inboundTag\": [\"bridge\"],\"domain\": [\"full:")
|
||||
io.write(ucursor:get(conf_path, "v2raypro", "rserver_domain"))
|
||||
io.write("\"],\"outboundTag\": \"tunnel\"},{\"type\": \"field\",\"inboundTag\": [\"bridge\"],\"outboundTag\": \"out\"},")
|
||||
end
|
||||
|
||||
io.write("{\"domainStrategy\": \"IPIfNonMatch\",\"type\": \"field\",\"outboundTag\": \"proxy\",\"inboundTag\": [\"listen\"]}]}}")
|
||||
|
||||
|
||||
|
||||
|
||||
io.write("}")--end
|
||||
io.close(json_file)
|
||||
|
||||
|
||||
|
||||
-- change '_' to '-'
|
||||
local keys_including_minus = {"User_Agent", "Content_Type", "Accept_Encoding", "Transfer_Encoding"}
|
||||
local keys_corrected = {"User-Agent", "Content-Type", "Accept-Encoding", "Transfer-Encoding"}
|
||||
|
Loading…
Reference in New Issue
Block a user