ziwork / bypass_keenetic

Установка обхода блокировок на роутерах Keenetic с установленной средой Entware, управление через телеграм бот!
https://github.com/ziwork/bypass_keenetic/discussions/
38 stars 6 forks source link

Поддержка vless #23

Open Yurbos opened 3 months ago

Yurbos commented 3 months ago

Так как большинство протоколов уже научились обнаруживать и блокировать, необходимо поддержать протокол vless.

У меня получилось добавить поддержку самостоятельно, посредством подмены одного из существующих впн(не было желания разбираться как добавить штатно)

Выкладываю примерный порядок действий, чтобы можно было проще интегрировать новый протокол.

  1. opkg install xray

  2. Получаем конфиг стрингу вида vless://{{{{{ID}}}}}}}@{{{{{{{IP}}}}}}}:443?type=tcp&security=reality&fp=firefox&pbk={{{{{{{KEY}}}}}}}}&sni={{{{{{{SNI}}}}}}}}&sid=ffffffffff&spx=%2F#{{{{{{{NAME}}}}}}}}}

  3. vi /opt/etc/xray/config.json Не осилил сам собрать конфиг, сделал странную компиляцию из всякого, но оно работает. config.json

  4. так как в конфиге выше я поднял xray но том же порту что и vmess, просто прибиваю vmess mv /opt/etc/init.d/S24v2ray /opt/root/S24v2ray

Мне было лень править под себя кнопки в боте, поэтому и подменил один из прописанных впн. В моём случае список для vmess пробрасывается в демона с vless.

Единственное что сделал это в боте поправил рестарт сервисов и там вписал /opt/etc/init.d/S24xray для рестарта

Yurbos commented 1 month ago

Накидал очень плохо пахнущий код, но он работает для xray

def vless(key):

global password, localportvless

encodedkey = key
vless_raw_conf  = encodedkey
vless_id = vless_raw_conf.split("&")[0].split("?")[0].split("@")[0].split("//")[1]
vless_ip =  vless_raw_conf.split("&")[0].split("?")[0].split("@")[1].split(":")[0]
vless_port = vless_raw_conf.split("&")[0].split("?")[0].split("@")[1].split(":")[1]
vless_type = vless_raw_conf.split("&")[0].split("?")[1].split("=")[1]
vless_conf = vless_raw_conf.split("&")
vless_conf.pop(0)
vless_security = vless_conf[0].split("=")[1]
vless_fp = vless_conf[1].split("=")[1]
vless_pbk = vless_conf[2].split("=")[1]
vless_sni = vless_conf[3].split("=")[1]
vless_sid = vless_conf[4].split("=")[1]
vless_spx = vless_conf[5].split("=")[1]
f = open('/opt/etc/xray/config.json', 'w')
sh = '{\n' \
          '"dns": {\n' \
          '    "disableFallback": true,\n' \
          '    "servers": [\n' \
          '      {\n' \
          '        "address": "https://8.8.8.8/dns-query",\n' \
          '        "domains": [],\n' \
          '        "queryStrategy": ""\n' \
          '      },\n' \
          '      {\n' \
          '        "address": "localhost",\n' \
          '        "domains": [],\n' \
          '        "queryStrategy": ""\n' \
          '      }\n' \
          '    ],\n' \
          '    "tag": "dns"\n' \
          '  },\n' \
          '  "inbounds": [\n' \
          '    {\n' \
          '        "port": 10810,\n' \
          '        "listen": "::",\n' \
          '        "protocol": "dokodemo-door",\n' \
          '        "settings": {\n' \
          '          "network": "tcp",\n' \
          '          "followRedirect": true\n' \
          '        },\n' \
          '        "sniffing": {\n' \
          '          "enabled": true,\n' \
          '          "destOverride": [\n' \
          '            "http",\n' \
          '            "tls"\n' \
          '          ]\n' \
          '        }\n' \
          '      },\n' \
          '    {\n' \
          '      "listen": "127.0.0.1",\n' \
          '      "port": 2081,\n' \
          '      "protocol": "http",\n' \
          '      "sniffing": {\n' \
          '        "destOverride": [\n' \
          '          "http",\n' \
          '          "tls",\n' \
          '          "quic"\n' \
          '        ],\n' \
          '        "enabled": true,\n' \
          '        "metadataOnly": false,\n' \
          '        "routeOnly": true\n' \
          '      },\n' \
          '      "tag": "http-in"\n' \
          '    }\n' \
          '  ],\n' \
          '  "log": {\n' \
          '    "loglevel": "warning"\n' \
          '  },\n' \
          '  "outbounds": [\n' \
          '    {\n' \
          '      "domainStrategy": "AsIs",\n' \
          '      "flow": null,\n' \
          '      "protocol": "vless",\n' \
          '      "settings": {\n' \
          '        "vnext": [\n' \
          '          {\n' \
          '            "address": "' + str(vless_ip) + '",\n' \
          '            "port": ' + str(vless_port) + ',\n' \
          '            "users": [\n' \
          '              {\n' \
          '                "encryption": "none",\n' \
          '                "flow": "",\n' \
          '                "id": "' + str(vless_id) +'"\n' \
          '              }\n' \
          '            ]\n' \
          '          }\n' \
          '        ]\n' \
          '      },\n' \
          '      "streamSettings": {\n' \
          '        "network": "' + str(vless_type) + '",\n' \
          '        "realitySettings": {\n' \
          '          "fingerprint": "' + str(vless_fp) + '",\n' \
          '          "publicKey": "' + str(vless_pbk) + '",\n' \
          '          "serverName": "' + str(vless_sni) + '",\n' \
          '          "shortId": "' + str(vless_sid) + '",\n' \
          '          "spiderX": "/"\n' \
          '        },\n' \
          '        "security": "' + str(vless_security) + '"\n' \
          '      },\n' \
          '      "tag": "proxy"\n' \
          '    },\n' \
          '    {\n' \
          '      "domainStrategy": "",\n' \
          '      "protocol": "freedom",\n' \
          '      "tag": "direct"\n' \
          '    },\n' \
          '    {\n' \
          '      "domainStrategy": "",\n' \
          '      "protocol": "freedom",\n' \
          '      "tag": "bypass"\n' \
          '    },\n' \
          '    {\n' \
          '      "protocol": "blackhole",\n' \
          '      "tag": "block"\n' \
          '    },\n' \
          '    {\n' \
          '      "protocol": "dns",\n' \
          '      "proxySettings": {\n' \
          '        "tag": "proxy",\n' \
          '        "transportLayer": true\n' \
          '      },\n' \
          '      "settings": {\n' \
          '        "address": "8.8.8.8",\n' \
          '        "network": "tcp",\n' \
          '        "port": 53,\n' \
          '        "userLevel": 1\n' \
          '      },\n' \
          '      "tag": "dns-out"\n' \
          '    }\n' \
          '  ],\n' \
          '  "policy": {\n' \
          '    "levels": {\n' \
          '      "1": {\n' \
          '        "connIdle": 30\n' \
          '      }\n' \
          '    },\n' \
          '    "system": {\n' \
          '      "statsOutboundDownlink": true,\n' \
          '      "statsOutboundUplink": true\n' \
          '    }\n' \
          '  },\n' \
          '  "routing": {\n' \
          '    "domainStrategy": "AsIs",\n' \
          '    "rules": [\n' \
          '      {\n' \
          '        "inboundTag": [\n' \
          '          "socks-in",\n' \
          '          "http-in"\n' \
          '        ],\n' \
          '        "outboundTag": "dns-out",\n' \
          '        "port": "53",\n' \
          '        "type": "field"\n' \
          '      },\n' \
          '      {\n' \
          '        "outboundTag": "proxy",\n' \
          '        "port": "0-65535",\n' \
          '        "type": "field"\n' \
          '      }\n' \
          '    ]\n' \
          '  },\n' \
          '  "stats": {}\n' \
          '}\n' \
          ''
f.write(sh)
f.close()
Yurbos commented 1 month ago

да, мне было лень сворачивать json да, оно громоздкое

желающие могут поправить