UNPKG

js2ray

Version:

The v2ray vmess protocol, based on nodejs javascript which you can use on hosts and servers

317 lines (267 loc) 6.45 kB
# js2ray A Node.js implementation of the V2Ray VMess protocol (plus other protocols like SOCKS and Freedom). Deployable on cPanel Node.js hosts and dedicated servers. ## Install & Run Install with: ```bash npm i js2ray ```` Then create a file at `/root/js2ray/index.js`: ```js var js2ray = require("js2ray"); // your config here ``` Run as a systemd service: ```bash systemctl enable js2ray systemctl restart js2ray ``` It will stay alive forever. ## Debug Mode Stop the systemd service: ```bash systemctl disable js2ray systemctl stop js2ray ``` Then run manually for debugging: ```bash node /root/js2ray/index.js ``` ## Setup ### Server-side ```js var js2ray = require("js2ray"); var config = { inbounds: [ { protocol: "vmess", networks: [ { type: "http", // ws | tcp | http | xhttp address: "0.0.0.0", port: 80, option: { path: "/ws", fake: "hello world" }, } ], users: [ { id: "b87cd5bc-71d1-e7c7-e031-24390995a198", security: "none", // auto | aes-128-gcm | chacha20-poly1305 | none | zero alterId: 0, } ], }, { protocol: "socks", networks: [ { address: "0.0.0.0", port: 1080 } ] } ], debug: function (...e) { // console.log(...e) }, storage: __dirname + "/app.json", } js2ray.config(config).start(); ``` --- ### Client / Bridge Side (Tunnel) ```js var js2ray = require("js2ray"); var config = { inbounds: [ { protocol: "vmess", networks: [ { type: "http", // ws | tcp | http | xhttp address: "0.0.0.0", port: 80, option: { path: ["/", "/data"], fake: "hello world" }, } ], users: [ { id: "b87cd5bc-71d1-e7c7-e031-24390995a155", security: "none", alterId: 0, } ], }, { protocol: "socks", networks: [ { address: "0.0.0.0", port: 1080 } ] } ], outbounds: [ { tag: "outbound", protocol: "vmess", networks: [ { type: "tcp", address: "server.address", port: 1234 } ], users: [ { id: "b87cd5bc-71d1-e7c7-e031-24390995a198", security: "none", alterId: 0, } ], } ], storage: __dirname + "/app.json", debug: function (...e) { // console.log(...e) }, } js2ray.config(config).start(); ``` --- ### API-Enabled Server You can leave `users: []` and instead manage them remotely via the `api` field. ```js var js2ray = require("js2ray"); var fs = require("fs"); var os = require("os"); var config = { inbounds: [ { protocol: "vmess", networks: [ { type: "http", address: "0.0.0.0", port: 80, ip: ["1.1.1.1"] // limit clients ip option: { path: "/ws", fake: "hello world" }, } ], users: [] }, { protocol: "socks", networks: [ { address: "0.0.0.0", port: 1080, ip: ["1.1.1.1"] // limit clients ip } ] } ], api: { address: "0.0.0.0", port: 2050, post: { task: function () { return JSON.stringify({ rmx: Math.round(os.totalmem() / 1024 / 1024), ram: Math.round(os.freemem() / 1024 / 1024), net: 0 // placeholder }) }, backup: function () { return fs.readFileSync(__dirname + "/app.json", "utf-8"); } } }, storage: __dirname + "/app.json", debug: function (...e) { // console.log(...e) }, } js2ray.config(config).start(); ``` --- ## SOCKS Examples ### Minimal SOCKS Proxy with Freedom ```js var js2ray = require("js2ray"); var config = { inbounds: [ { protocol: "socks", networks: [ { address: "0.0.0.0", port: 10805, } ] } ], // if outbounds not defined, "freedom" is used by default storage: __dirname + "/app.json", } js2ray.config(config).start(); ``` ### SOCKS-to-SOCKS Tunnel (SOCKS Inbound + SOCKS Outbound) ```js var js2ray = require("js2ray"); var config = { inbounds: [ { protocol: "socks", networks: [ { address: "0.0.0.0", port: 1080, } ], users: [ { user: "u", pass: "p", } ], } ], outbounds: [ { protocol: "socks", networks: [ { address: "remote.socks.server", port: 1080, } ], users: [ { user: "server-u", pass: "server-p", } ], } ], storage: __dirname + "/app.json", } js2ray.config(config).start(); ``` --- ## License <p> <img width="32px" src="https://raw.githubusercontent.com/seezaara/RocketV2ray/main/doc/logo.png"> <a href="https://www.youtube.com/@seezaara">seezaara YouTube</a><br> <img width="32px" src="https://raw.githubusercontent.com/seezaara/RocketV2ray/main/doc/logo.png"> <a href="https://t.me/seezaara">seezaara Telegram</a> </p>