js2ray
v3.0.5
Published
The v2ray vmess protocol, based on nodejs javascript which you can use on hosts and servers
Downloads
22
Maintainers
Readme
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:
npm i js2rayThen create a file at /root/js2ray/index.js:
var js2ray = require("js2ray");
// your config hereRun as a systemd service:
systemctl enable js2ray
systemctl restart js2rayIt will stay alive forever.
Debug Mode
Stop the systemd service:
systemctl disable js2ray
systemctl stop js2rayThen run manually for debugging:
node /root/js2ray/index.jsSetup
Server-side
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)
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.
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
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)
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();