kuoruan / luci-app-v2ray

LuCI support for V2Ray
1.16k stars 284 forks source link

增加VLESS支持 #294

Open Aaronwang81 opened 3 years ago

Aaronwang81 commented 3 years ago

v2ray现在支持一种新协议VLESS,速度上快了不少,希望增加一下支持。

WordsWorthLess commented 3 years ago

安装完插件,用winscp编辑以下文件

/usr/lib/lua/luci/model/cbi/v2ray/outbound-detail.lua

找到

o = s:option(ListValue, "protocol", translate("Protocol"))

在下面的o:value("vmess", "VMess")这一行下面加入以下一段代码

o:value("vless", "VLESS")

-- Settings - VLESS
o = s:option(Value, "s_vless_address", "%s - %s" % { "VLESS", translate("Address") })
o:depends("protocol", "vless")
o.datatype = "host"

o = s:option(Value, "s_vless_port", "%s - %s" % { "VLESS", translate("Port") })
o:depends("protocol", "vless")
o.datatype = "port"

o = s:option(Value, "s_vless_user_id", "%s - %s" % { "VLESS", translate("User ID") })
o:depends("protocol", "vless")

o = s:option(ListValue, "s_vless_user_encryption", "%s - %s" % { "VLESS", translate("Encryption") })
o:depends("protocol", "vless")
o:value("none", "none")

o = s:option(Value, "s_vless_user_level", "%s - %s" % { "VLESS", translate("User level") })
o:depends("protocol", "vless")
o.datatype = "uinteger"

保存文件退出

然后再编辑这个文件

/etc/init.d/v2ray

找到以下这一行

uci_validate_section "$NAME" "outbound" "$1" \

另起一行添加如下代码

        's_vless_address:host' \
        's_vless_port:port' \
        's_vless_user_id:string' \
        's_vless_user_encryption:or("none")' \
        's_vless_user_level:uinteger' \

然后再次查找到 add_outbound_setting() 这一个过程下的 "vmess")"vmess") 和上一行的 ;; 之间插入以下代码

        "vless")
            json_add_object "settings"

            json_add_array "vnext"
            json_add_object ""

            json_add_string "address" "$s_vless_address"
            append_server_address "$s_vless_address"

            json_add_int "port" "$s_vless_port"

            json_add_array "users"
            json_add_object ""
            json_add_string "id" "$s_vless_user_id"
            test -n "$s_vless_user_level" && \
                json_add_int "level" "$s_vless_user_level"
            json_add_string "encryption" "$s_vless_user_encryption"
            json_close_object
            json_close_array # users

            json_close_object

            json_close_array # vnext
            json_close_object # settings
            ;;

保存文件然后刷新一下路由器管理界面, 已经可以支持vless协议了

Aaronwang81 commented 3 years ago

界面上OK了,谢谢!!

youland commented 3 years ago
/usr/lib/lua/luci/model/cbi/v2ray

我的cbi目录下面,竟然没有v2目录:/usr/lib/lua/luci/model/cbi/v2ray 软路由,OpenWrt 19.07.3 不知道是啥情况。

WordsWorthLess commented 3 years ago
/usr/lib/lua/luci/model/cbi/v2ray

我的cbi目录下面,竟然没有v2目录:/usr/lib/lua/luci/model/cbi/v2ray 软路由,OpenWrt 19.07.3 不知道是啥情况。

插件安装成功了吗?能进入web管理界面吗?我用的最新的1.56-1,其它版本不知道

youland commented 3 years ago
/usr/lib/lua/luci/model/cbi/v2ray

我的cbi目录下面,竟然没有v2目录:/usr/lib/lua/luci/model/cbi/v2ray 软路由,OpenWrt 19.07.3 不知道是啥情况。

插件安装成功了吗?能进入web管理界面吗?我用的最新的1.56-1,其它版本不知道

我用的是2.0的插件,因为我的软路由是19.07.03版本的,我找找看2.0的配置文在哪。

WordsWorthLess commented 3 years ago
/usr/lib/lua/luci/model/cbi/v2ray

我的cbi目录下面,竟然没有v2目录:/usr/lib/lua/luci/model/cbi/v2ray 软路由,OpenWrt 19.07.3 不知道是啥情况。

插件安装成功了吗?能进入web管理界面吗?我用的最新的1.56-1,其它版本不知道

我用的是2.0的插件,因为我的软路由是19.07.03版本的,我找找看2.0的配置文在哪。

2.0的插件要修改

/www/luci-static/resources/view/v2ray/outbounds.js /etc/init.d/v2ray (这个文件的修改方法不变)

outbound.js的代码有点辣眼睛... 搜索以下内容:

s.value("vmess","VMess")

s.value 前插入如下代码:

s.value("vless","VLess"),

继续搜索

(s=t.taboption("general",form.Value,"s_vmess_address"

然后在 (s=t.taboption 前插入如下代码

(s=t.taboption("general",form.Value,"s_vless_address","%s - %s".format("VLESS",_("Address")))).modalonly=!0,s.depends("protocol","vless"),s.datatype="host",(s=t.taboption("general",form.Value,"s_vless_port","%s - %s".format("VLESS",_("Port")))).modalonly=!0,s.depends("protocol","vless"),s.datatype="port",(s=t.taboption("general",form.Value,"s_vless_user_id","%s - %s".format("VLESS",_("User ID")))).modalonly=!0,s.depends("protocol","vless"),(s=t.taboption("general",form.Value,"s_vless_user_level","%s - %s".format("VLESS",_("User Level")))).modalonly=!0,s.depends("protocol","vless"),s.datatype="and(uinteger, max(10))",(s=t.taboption("general",form.ListValue,"s_vless_user_encryption","%s - %s".format("VLESS",_("Encryption")))).modalonly=!0,s.depends("protocol","vless"),s.value("none","none"),

保存文件 然后刷新一下,已经可以支持VLESS的配置编辑了,按照类似的方法,可以应该添加trojan的配置,不过我不用trojan,就不深入研究了

youland commented 3 years ago
/usr/lib/lua/luci/model/cbi/v2ray

我的cbi目录下面,竟然没有v2目录:/usr/lib/lua/luci/model/cbi/v2ray 软路由,OpenWrt 19.07.3 不知道是啥情况。

插件安装成功了吗?能进入web管理界面吗?我用的最新的1.56-1,其它版本不知道

我用的是2.0的插件,因为我的软路由是19.07.03版本的,我找找看2.0的配置文在哪。

2.0的插件要修改

/www/luci-static/resources/view/v2ray/outbounds.js /etc/init.d/v2ray (这个文件的修改方法不变)

outbound.js的代码有点辣眼睛... 搜索以下内容:

s.value("vmess","VMess")

s.value 前插入如下代码:

s.value("vless","VLess"),

继续搜索

(s=t.taboption("general",form.Value,"s_vmess_address"

然后在 (s=t.taboption 前插入如下代码

(s=t.taboption("general",form.Value,"s_vless_address","%s - %s".format("VLESS",_("Address")))).modalonly=!0,s.depends("protocol","vless"),s.datatype="host",(s=t.taboption("general",form.Value,"s_vless_port","%s - %s".format("VLESS",_("Port")))).modalonly=!0,s.depends("protocol","vless"),s.datatype="port",(s=t.taboption("general",form.Value,"s_vless_user_id","%s - %s".format("VLESS",_("User ID")))).modalonly=!0,s.depends("protocol","vless"),(s=t.taboption("general",form.Value,"s_vless_user_level","%s - %s".format("VLESS",_("User Level")))).modalonly=!0,s.depends("protocol","vless"),s.datatype="and(uinteger, max(10))",(s=t.taboption("general",form.ListValue,"s_vless_user_encryption","%s - %s".format("VLESS",_("Encryption")))).modalonly=!0,s.depends("protocol","vless"),s.value("none","none"),

保存文件 然后刷新一下,已经可以支持VLESS的配置编辑了,按照类似的方法,可以应该添加trojan的配置,不过我不用trojan,就不深入研究了

谢谢,已成功配置,但无法运行,很是奇怪,应该是tls那里的配置不齐全。我服务器运行的是xtls,理论上客户端运行tls也可以,但就是不行。在debian里安装了透明代理,可以用,在软路由上却不行。

WordsWorthLess commented 3 years ago

谢谢,已成功配置,但无法运行,很是奇怪,应该是tls那里的配置不齐全。我服务器运行的是xtls,理论上客户端运行tls也可以,但就是不行。在debian里安装了透明代理,可以用,在软路由上却不行。

xtls貌似可以直接兼容tls的设定,无需额外的修改 进入v2ray页面的全局设置页面看看v2ray的状态是 服务正在运行 还是 服务未运行

如果 服务正在运行 : 看看全局设置页面的 启用的出站连接 里面有没有把刚才添加的出站连接给勾选上 还要看看 路由页面,有没有添加正确的路由规则并且启用,(也可以直接关闭路由功能,直接用透明代理把筛选过的流量转发到dokodemo-door),最后打开关于页面,看看你的v2ray的配置文件里面有没有体现到上面的设置,如果有,就是配置成功了.如果没有,有可能就是还没有修改 /etc/init.d/v2ray 这个文件

如果 服务未运行 : 可以打开系统日志页面,看看v2ray启动失败的原因

youland commented 3 years ago

谢谢,已成功配置,但无法运行,很是奇怪,应该是tls那里的配置不齐全。我服务器运行的是xtls,理论上客户端运行tls也可以,但就是不行。在debian里安装了透明代理,可以用,在软路由上却不行。

xtls貌似可以直接兼容tls的设定,无需额外的修改 进入v2ray页面的全局设置页面看看v2ray的状态是 服务正在运行 还是 服务未运行 如果 服务未运行 可以打开系统日志页面,看看v2ray启动失败的原因 如果 服务正在运行 , 浏览器打开关于页面,看看你的v2ray的配置文件里面有没有刚才配置的outbounds对象。如果有,就是配置成功了,如果没有,有可能就是还没有修改 /etc/init.d/v2ray 这个文件

非常感谢!! 配置是成功的,tls也有了,负载均衡也试了,单个的也试了,切换到vmess就ok,切换到vless就不行。v2是运行状态,我看了关于里面的json的配置表,outbound也生效了。 另外关于vless的配置,我试过启用tls,不启用tls,下面的几个选项全部试过了,都不行,连不通。我怀疑是路由策略设置的问题。

"outbounds": [ { "protocol": "vless", "settings": { "vnext": [ { "address": "domain.com", "port": 443, "users": [ { "id": "UUID", "level": 0, "encryption": "none" } ] } ] }, "streamSettings": { "network": "tcp", "security": "tls", "tlsSettings": { "serverName": "domain.com", "allowInsecure": false, "allowInsecureCiphers": false, "disableSystemRoot": false, "certificates": [
] }, "tcpSettings": { "header": { "type": "none" } }, "sockopt": { "mark": 255 } }, "tag": "vless-domain.com" } ] } "routing": { "domainStrategy": "IPOnDemand", "rules": [ { "type": "field", "ip": [ "geoip:private", "geoip:cn" ], "outboundTag": "direct" }, { "type": "field", "domain": [ "geosite:cn" ], "outboundTag": "direct" }, { "type": "field", "protocol": [ "bittorrent" ], "outboundTag": "direct" }, { "type": "field", "port": "53", "network": "udp", "inboundTag": [ "transparent" ], "outboundTag": "dns_out" }, { "type": "field", "ip": [ "114.114.114.114", "223.5.5.5" ], "outboundTag": "direct" }, { "type": "field", "ip": [ "1.1.1.1", "8.8.8.8", "208.67.222.222" ], "outboundTag": "proxy" }, { "type": "field", "port": "123", "network": "udp", "outboundTag": "direct" } ] },

WordsWorthLess commented 3 years ago

单个的也试了

大哥,你还没有添加对应的路由规则呢,你添加的vless协议的tag是

"vless-domain.com"

但是路由规则里面都没有指定什么流量走 "vless-domain.com" 我建议你把路由规则关了, 直接用透明代理转发到任意门,规则就选gfwlist吧

youland commented 3 years ago

单个的也试了

大哥,你还没有添加对应的路由规则呢,你添加的vless协议的tag是

"vless-domain.com"

但是路由规则里面都没有指定什么流量走 "vless-domain.com" 我建议你把路由规则关了, 直接用透明代理转发到任意门,规则就选gfwlist吧

非常感谢,好了。 原来是我把域名填错了。三个vps,一直把错的那个在测试,现在ok了。

再次感谢!!

dalton-chiou commented 3 years ago

用这种办法修改后,uuid没有写入当前配置文件。在“关于”里看,id是空串。不能连接。请教这是哪里出了问题。

WordsWorthLess commented 3 years ago

用这种办法修改后,uuid没有写入当前配置文件。在“关于”里看,id是空串。不能连接。请教这是哪里出了问题。

/etc/init.d/v2ray 这个文件没有修改好啊 先在 然后再编辑这个文件

/etc/init.d/v2ray 找到以下这一行

uci_validate_section "$NAME" "outbound" "$1" \ 另起一行添加如下代码


        's_vless_address:host' \
        's_vless_port:port' \
        's_vless_user_id:string' \
        's_vless_user_encryption:or("none")' \
        's_vless_user_level:uinteger' \

然后再次查找到 add_outbound_setting() 这一个过程下的 " 在 "vmess") 和上一行的 ;; 之间插入以下代码


        "vless")
            json_add_object "settings"

            json_add_array "vnext"
            json_add_object ""

            json_add_string "address" "$s_vless_address"
            append_server_address "$s_vless_address"

            json_add_int "port" "$s_vless_port"

            json_add_array "users"
            json_add_object ""
            json_add_string "id" "$s_vless_user_id"
            test -n "$s_vless_user_level" && \
                json_add_int "level" "$s_vless_user_level"
            json_add_string "encryption" "$s_vless_user_encryption"
            json_close_object
            json_close_array # users

            json_close_object

            json_close_array # vnext
            json_close_object # settings
            ;;

保存文件然后刷新一下路由器管理界面, 已经可以支持vless协议了

dalton-chiou commented 3 years ago

谢谢。是我粗心,代码放错位置了。现在已经好了。

hathlife commented 3 years ago

@WordsWorthLess 可以整理成pr发出来

dalton-chiou commented 3 years ago

能增加xtls支持吗?

youland commented 3 years ago

能增加xtls支持吗?

最新版本的v2ray已把xtls去掉了

dalton-chiou commented 3 years ago

能增加xtls支持吗?

最新版本的v2ray已把xtls去掉了

是的。而且看过他们的争论后,我放弃xtls。

uestcNaldo commented 3 years ago

希望作者再加一加VLESS、XTLS

mifarelight commented 1 year ago

我严格按照上面列出的方法,修改/etc/init.d/v2ray和/www/luci-static/resources/view/v2ray/outbounds.js后,刷新路由器的V2ray服务界面的【出站连接】页,并未出现VLess的相关选项。我的操作哪里不对?

我的是【OpenWrt 21.02.2】,在【小米R3G】路由器上运行,V2ray是【服务正在运行/版本:V2Ray 4.42.2 (OpenWrt) R1 (go1.17.1 linux/mipsle)】

WordsWorthLess commented 1 year ago

我严格按照上面列出的方法,修改/etc/init.d/v2ray和/www/luci-static/resources/view/v2ray/outbounds.js后,刷新路由器的V2ray服务界面的【出站连接】页,并未出现VLess的相关选项。我的操作哪里不对?

我的是【OpenWrt 21.02.2】,在【小米R3G】路由器上运行,V2ray是【服务正在运行/版本:V2Ray 4.42.2 (OpenWrt) R1 (go1.17.1 linux/mipsle)】

试试删除路由器的luci界面的缓存,又或者重启路由器 rm -rf /tmp/luci-index* && reboot