Skip to content

Instantly share code, notes, and snippets.

@mahmoud-eskandari
Last active February 28, 2024 00:27
Show Gist options
  • Save mahmoud-eskandari/960899f3494a1bffa1a29631dbaf0aee to your computer and use it in GitHub Desktop.
Save mahmoud-eskandari/960899f3494a1bffa1a29631dbaf0aee to your computer and use it in GitHub Desktop.
Install v2ray on Bridge:(Ubuntu +18 via systemd) - Upstream (Ubuntu +18/CentOS +7 via docker)

پنل x-ui

پنل تحت وب مدیریت V2ray و ساخت کاربر و مدیریت سرور

mkdir x-ui && cd x-ui
docker run -itd --network=host \
    -v $PWD/db/:/etc/x-ui/ \
    -v $PWD/cert/:/root/cert/ \
    --name x-ui --restart=unless-stopped \
    enwaiax/x-ui:latest

بعدش بزنید docker logs x-ui

یه پورت نشون میده مثلا: 54321

توی مرورگر بزنید

FOREIGN_IP:PORT

یه پنل وب میده که چینیه میتونید با گوگل ترنزلیت هم ترجمش کنید پسورد پیشفرض admin:admin بعدش حتما عوضش کنید.

میتونید یوزر تعریف کنید دسترسی های جدید و کانکشن جدید بسازید برای کاربرانتون

#!/bin/bash
if [ "$EUID" -ne 0 ]
then echo "Please run as root user or run with sudo"
exit
fi
cd /tmp/
rm -rf ./v2ray && mkdir ./v2ray
cd ./v2ray
## x86_64
## Source: https://github.com/v2fly/v2ray-core/releases/tag/v4.31.0
curl -L https://v2rayv2ray.s3.ir-thr-at1.arvanstorage.ir/v2ray-$(uname -m).tar.gz -o v2ray.tar.gz
tar -xvf v2ray.tar.gz
## make directories
rm -rf /var/log/v2ray/ && mkdir -p /var/log/v2ray/
rm -rf /usr/local/share/v2ray/ && mkdir -p /usr/local/share/v2ray/
rm -rf /usr/local/etc/v2ray/ && mkdir -p /usr/local/etc/v2ray/
## Get an UUID
UUID=$(cat /proc/sys/kernel/random/uuid)
if [ $? -ne 0 ]
then
UUID= $(curl -s "https://www.uuidgenerator.net/api/version4" )
fi
SSPASS=$(tr -dc A-Za-z0-9 </dev/urandom | head -c 13 )
SOPASS=$(tr -dc A-Za-z0-9 </dev/urandom | head -c 8 )
MTPORTO=$(tr -dc A-Za-z0-9 </dev/urandom | head -c 32 | md5sum | head -c 32)
## Write config file
cat <<EOF > /usr/local/etc/v2ray/config.json
{
"log": {
"access": "/var/log/v2ray/access.log",
"error": "/var/log/v2ray/error.log",
"loglevel": "warning"
},
"inbounds": [
{
"listen": "0.0.0.0",
"port": 9007,
"protocol": "socks",
"settings": {
"auth": "password",
"accounts": [
{
"user": "user",
"pass": "$SOPASS"
}
],
"udp": true
}
},
{
"port": 9006,
"protocol": "mtproto",
"settings": {
"users": [{"secret": "$MTPORTO"}]
}
},
{
"listen": "0.0.0.0",
"port": 9008,
"protocol": "shadowsocks",
"settings": {
"password": "$SSPASS",
"timeout":60,
"method":"chacha20-ietf-poly1305"
}
},
{
"listen": "0.0.0.0",
"port": 9009,
"protocol": "vmess",
"settings": {
"clients": [
{
"id": "$UUID",
"alterId": 0,
"security": "auto"
}
]
}
}
],
"outbound": {
"tag": "proxy",
"protocol": "vmess",
"settings": {
"vnext": [
{
"address": "$1",
"port": $2,
"users": [
{
"id": "$3",
"alterId": 0,
"security": "chacha20-poly1305"
}
]
}
]
},
"streamSettings": {
"network": "ws"
},
"mux": {
"enabled": true
}
},
"inboundDetour": null,
"outboundDetour": [
{
"protocol": "freedom",
"tag": "freedom"
},
{
"protocol": "blackhole",
"tag": "blackhole"
}
],
"dns": {
"servers": [
"8.8.8.8",
"8.8.4.4",
"localhost"
]
},
"routing": {
"domainStrategy": "IPIfNonMatch",
"settings": {
"rules": [
{
"type": "field",
"outboundTag": "blackhole",
"ip": [
"geoip:private"
]
},
{
"type": "field",
"outboundTag": "freedom",
"ip": [
"geoip:ir"
],
"domain": [
"regexp:^*\\\\.ir$",
"iran:ir"
]
}
]
}
}
}}
EOF
cp ./systemd/system/v2ray.service /etc/systemd/system/
cp ./systemd/system/v2ray@.service /etc/systemd/system/
## create log files
touch /var/log/v2ray/access.log
touch /var/log/v2ray/error.log
## copy binaries
cp ./v2ray /usr/local/bin/v2ray
cp ./v2ctl /usr/local/bin/v2ctl
chmod +x /usr/local/bin/v2ray
chmod +x /usr/local/bin/v2ctl
## copy dat files
cp ./iran.dat /usr/local/share/v2ray/iran.dat
cp ./geosite.dat /usr/local/share/v2ray/geosite.dat
cp ./geoip.dat /usr/local/share/v2ray/geoip.dat
chown -R nobody /usr/local/share/v2ray/
systemctl daemon-reload
systemctl enable v2ray
systemctl restart v2ray
cd /tmp/
rm -rf ./v2ray
IP=$(curl -s "https://api.ipify.org/" )
## Fallback interanet
if [ "$IP" = ""]
then
IP=$(curl -s "https://dzy.ir/ip.txt" )
fi
VMESS=$(echo "{\"add\":\"$IP\",\"aid\":\"0\",\"host\":\"\",\"id\":\"$UUID\",\"net\":\"tcp\",\"path\":\"\",\"port\":\"9009\",\"ps\":\"Iran-$IP\",\"scy\":\"auto\",\"sni\":\"\",\"tls\":\"\",\"type\":\"none\",\"v\":\"2\"}" | base64)
VMESS=$(sed "s/\=//g" <<<"$VMESS")
VMESS=$(sed ':a; N; s/[[:space:]]//g; ta' <<<"$VMESS")
SHADOW=$(echo "chacha20-ietf-poly1305:$SSPASS" | base64)
SHADOW=$(sed "s/\=//g" <<<"$SHADOW")
SHADOW=$(sed ':a; N; s/[[:space:]]//g; ta' <<<"$SHADOW")
cat <<EOF > ./v2ray-install.log
Output saved into >>>
/tmp/v2ray-install.log
Your Internal IP is: $IP , by api.ipify.org
If your ip is not correct (because of proxy affect etc.) change it manualy in connection configs.
===============================
ShadowSoocks Connection:
ss://$SHADOW@$IP:9008#Iran-$IP
Password:$SSPASS
Port:9008
Encryption:"chacha20-ietf-poly1305"
===============================
V2ray vmess Connection:
vmess://$VMESS
ID/UUID: $UUID
Port: 9009
alterId: 0
===============================
Telegram Socks:
https://t.me/socks?server=$IP&port=9007&user=user&pass=$SOPASS
Telegram MtProto:
https://t.me/proxy?server=$IP&port=9006&secret=$MTPORTO
===============================
Socks5:
IP: $IP
Port: 9007
Username: user
Password: $SOPASS
===============================
EOF
cat ./v2ray-install.log
echo "For check v2ray helth run: systemctl status v2ray"
#!/bin/bash
if [ "$EUID" -ne 0 ]
then echo "Please run as root user or run with sudo"
exit
fi
## Check for docker
docker --version
if [ $? -ne 0 ]
then
curl -fsSL https://get.docker.com | sh
fi
## Check for docker compose
docker-compose --version
if [ $? -ne 0 ]
then
curl -L "https://github.com/docker/compose/releases/download/$(curl --silent "https://api.github.com/repos/docker/compose/releases/latest" | grep -Po '"tag_name": "\K.*?(?=")')/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
fi
rm -f docker-compose.yml
rm -f config.json
rm -rf log
mkdir log
## Get an UUID
UUID=$(cat /proc/sys/kernel/random/uuid)
if [ $? -ne 0 ]
then
UUID= $(curl -s "https://www.uuidgenerator.net/api/version4" )
fi
## Write compose file
cat <<EOF > ./docker-compose.yml
version: "3"
services:
v2ray:
image: v2fly/v2fly-core@sha256:51934d93f10451ed416725943e804038fccf18e1756456bacdecdafb3e84486b
container_name: v2ray
restart: always
ports:
- $1:$1
- 8080:8080
volumes:
- ./config.json:/etc/v2ray/config.json
- ./log/:/var/log/v2ray/
EOF
## Write config file
cat <<EOF > ./config.json
{
"log": {
"access": "/var/log/v2ray/access.log",
"error": "/var/log/v2ray/error.log",
"loglevel": "warning"
},
"inbounds": [
{
"listen": "0.0.0.0",
"port": 8080,
"protocol": "vmess",
"settings": {
"clients": [
{
"id": "$UUID",
"alterId": 64,
"security": "chacha20-poly1305"
}
]
},
"streamSettings": {
"network": "tcp",
"tcpSettings": {
"header": {
"type": "http",
"response": {
"version": "1.1",
"status": "200",
"reason": "OK",
"headers": {
"Content-Type": ["application/octet-stream", "application/x-msdownload", "text/html", "application/x-shockwave-flash"],
"Transfer-Encoding": ["chunked"],
"Connection": ["keep-alive"],
"Pragma": "no-cache"
}
}
}
}
}
},{
"listen": "0.0.0.0",
"port": $1,
"protocol": "vmess",
"settings": {
"clients": [
{
"id": "$UUID",
"alterId": 0,
"security": "chacha20-poly1305"
}
]
},
"streamSettings": {
"network": "ws"
}
}],
"outbound": {
"protocol": "freedom",
"tag": "freedom"
},
"inboundDetour": null,
"outboundDetour": [
{
"protocol": "blackhole",
"tag": "blackhole"
}
],
"routing": {
"domainStrategy": "IPIfNonMatch",
"settings": {
"rules": [
{
"type": "field",
"outboundTag": "blackhole",
"ip": [
"geoip:private"
]
}
]
}
}
}
EOF
docker-compose up -d
IP=$(curl -s "https://api.ipify.org/" )
VMESS=$(echo "{\"add\":\"$IP\",\"aid\":\"0\",\"host\":\"digikala.com\",\"id\":\"$UUID\",\"net\":\"ws\",\"path\":\"\",\"port\":\"$1\",\"ps\":\"Foreign-$IP\",\"scy\":\"chacha20-poly1305\",\"sni\":\"\",\"tls\":\"\",\"type\":\"none\",\"v\":\"2\"}" | base64)
VMESS=$(sed "s/\=//g" <<<"$VMESS")
VMESS=$(sed ':a; N; s/[[:space:]]//g; ta' <<<"$VMESS")
VMESSOBFS=$(echo "{\"add\":\"$IP\",\"aid\":\"64\",\"host\":\"\",\"id\":\"$UUID\",\"net\":\"tcp\",\"path\":\"\",\"port\":\"8080\",\"ps\":\"OBFS-Foreign-$IP\",\"scy\":\"auto\",\"sni\":\"\",\"tls\":\"\",\"type\":\"http\",\"v\":\"2\"}" | base64)
VMESSOBFS=$(sed "s/\=//g" <<<"$VMESSOBFS")
VMESSOBFS=$(sed ':a; N; s/[[:space:]]//g; ta' <<<"$VMESSOBFS")
cat <<EOF > ./bridge-install-by-curl.log
## Run this command on your bridge(interanet) server:
sudo curl -s https://gist.githubusercontent.com/mahmoud-eskandari/960899f3494a1bffa1a29631dbaf0aee/raw/f0b012c43e68468e7683c3e4c2a104dd11841eb7/install-bridge.sh | bash -s $IP $1 $UUID
## If your internal server hasn't access to foreign internet you can also use internal mirror:
sudo curl -s https://v2rayv2ray.s3.ir-thr-at1.arvanstorage.ir/run.sh | bash -s $IP $1 $UUID
####### External Vmess connections ######
============ Diffrent vmess for diffrent ISPs.
WS foreign vmess (v2ray):
vmess://$VMESS
Server: $IP
Port: $1
ID: $UUID
alterId: 0
security: chacha20-poly1305
head type: none
network: ws
domain: [An internal website domain like: digikala.com]
======== ======== ======== ========
Obfoscated TCP foreign vmess (v2ray):
vmess://$VMESSOBFS
Server: $IP
Port: 8080
ID: $UUID
alterId: 64
security: chacha20-poly1305
network: tcp
head type: http
domain: [An internal website domain like: digikala.com]
EOF
cat ./bridge-install-by-curl.log

پنل x-ui

پنل تحت وب مدیریت V2ray و ساخت کاربر و مدیریت سرور

mkdir x-ui && cd x-ui
docker run -itd --network=host \
    -v $PWD/db/:/etc/x-ui/ \
    -v $PWD/cert/:/root/cert/ \
    --name x-ui --restart=unless-stopped \
    enwaiax/x-ui:latest

بعدش بزنید docker logs x-ui

یه پورت نشون میده مثلا: 54321

توی مرورگر بزنید

FOREIGN_IP:PORT

یه پنل وب میده که چینیه میتونید با گوگل ترنزلیت هم ترجمش کنید پسورد پیشفرض admin:admin بعدش حتما عوضش کنید.

میتونید یوزر تعریف کنید دسترسی های جدید و کانکشن جدید بسازید برای کاربرانتون

@dozheiny
Copy link

به خاطر آخرین آپدیتی که v2fly انجام داده این کانفیگ دیگه کار نمیکنه. برای حل این مشکل میتونید ورژن کانتینتر v2ray رو بیارید عقب تر که درست کار کنه.

@behtashfa1
Copy link

behtashfa1 commented Nov 24, 2022

سلام
در مورد تانل سرور ایران و خارج بیشتر توضیح میدید

@pourhosaini
Copy link

سلام. من سرور x-ui رو در خارج راه اندازی کردم و کاربر هام فعالن
طبق همین روش و با اجرای کامند زیر، کار رو ادامه بدم؟
sudo curl -s https://gist.githubusercontent.com/mahmoud-eskandari/960899f3494a1bffa1a29631dbaf0aee/raw/3f5d4e934006a412fea2d31ca51aa8fc76cb17cc/install-upstream.sh | bash -s 2083

@mansouraminii
Copy link

دوستان من مراحل رو انجام دادم الان وقتی به گوشی کیو آر کود رو اسکن میکنم کانفیگ رو پیدا و کانکت هم میشه اما کار نمیکنه . انواع پروتوکل و اکستنشن هم تغییر دادم نمیشه . چیکار کنم ؟

@ali-foroughi
Copy link

دوستان من مراحل رو انجام دادم الان وقتی به گوشی کیو آر کود رو اسکن میکنم کانفیگ رو پیدا و کانکت هم میشه اما کار نمیکنه . انواع پروتوکل و اکستنشن هم تغییر دادم نمیشه . چیکار کنم ؟

چه خطایی داره‌؟ لاگش رو بفرستید

@meheydari
Copy link

با این کانفیگ جدیدا سرعت آپلود خیلی پایینه. کسی راه حلی داره؟

@kiosfun
Copy link

kiosfun commented Dec 12, 2022

من x-ui انگلیسی و نصب کردم ولی وقتی کد های SSL Certificate رو میزنم تو سرور با موفقیت پیش میره ولی سایت امن نمیشه لطفاااااااااااااا کمکم کنییییییییید من خیلی علاقه دارم ب این کار و تازه شروع کردم با ویدیو های یوتیوبی و 2 روزه دارم تحقیق میکنم اینجوری بگم ک ار غزا افتادم لطفا اگ توی این کار چیزی بلدین کمکم کنید ممنون میشم :(((((((((((
https://t.me/tahagolzarr

@r-zand
Copy link

r-zand commented Dec 12, 2022

سلام من سرورمو راه اندازی کردم ولی از گوشی های ایفون نمیتونم کانکت شم و همش ارور io read/write on closed pipe میده ولی از طریق گوشی اندروید به راحتی کانکت میشم میتونید کمکم کنید

من همین مشکل رو با اندروید دارم و اصلا نمیتونم وصل بشم. مراحل نصب به درستی انجام شده و مشکلی نداشتم ولی متوجه نمیشم چه مشکلی با اندروید وجود داره. پشنهادی دارید که چه چیزی رو باید چک کنم؟

برای اندروید من از v2rayNG استفاده میکنم وارد قسمت تنظیمات سرور بشین و آخرین آپشن allowInsecure رو بگذارید روی true شاید کمک کنه

منم این مشکل رو داخل اندروید برای بعضی یوزرما داشتم تا اینکه داخل اندروید و اپل v2ray پرمیژن کارت حافظه و غیره رو بهش بدین یبار ریست کنین ، برای من حل شد فقط با اینترنت ایرانسل

@1ov137
Copy link

1ov137 commented Dec 15, 2022

Dear Mahmoud, Please update the upstream server's docker-compose.yml to reflect the latest changes made to v2fly-core image:

...
image: v2fly/v2fly-core:latest
container_name: v2ray
command: run -c "/etc/v2ray/config.json"
...

Also, Two more feature-rich alternatives to ShadowLink for iOS:
Fair VPN: https://apps.apple.com/us/app/fair-vpn/id1533873488
NapsternetV: https://apps.apple.com/us/app/napsternetv/id1629465476

@mohaxray
Copy link

سلام وقت همگی بخیر
چطوری می تونم بفهمم روی یک کانفیگ چندتا یوزر کانکت شدن به سرور .
#user count

@idotnetdev
Copy link

سلام وقت بخیر
سرویس v2ray انگار روی سرور من نصب نشده هر بار هم که میزنم دوباره نصب کنه اتفاق خاصی نمیفته و فقط کانکشن ها رو چاپ میکنه.
وقتی دستور systemctl status v2ray رو میزنم این پیغام رو نشون میده.

Failed to restart v2ray.service: Unit v2ray.service not found.

چیکار باید بکنم؟
ممنون میشم راهنمایی کنید.

@akbarazimifar
Copy link

سلام . متاسفانه کار نمیکنه .

@kmohsenk
Copy link

به خاطر آخرین آپدیتی که v2fly انجام داده این کانفیگ دیگه کار نمیکنه. برای حل این مشکل میتونید ورژن کانتینتر v2ray رو بیارید عقب تر که درست کار کنه.

میتونی بیشتر توضیح بدی؟

@dozheiny
Copy link

متاسفانه به خاطر آپدیت جدید v2fly دیگه این کانفیگ کار نمیکنه
اگر میخواید از این کانفیگ استفاده کنید قبل از اینکه بش اسکریپت رو ران کنید. این دو کامند رو بزنید:
docker pull v2fly/v2fly-core@sha256:51934d93f10451ed416725943e804038fccf18e1756456bacdecdafb3e84486b
docker image tag 0e75a60ce4c9 v2fly/v2fly-core:latest
سپس اسکریپت آقای اسکندری پور رو اجرا کنید.

@prshiraz
Copy link

این error بر میگرده بعد از احرای کامند اول:

Error response from daemon: error parsing HTTP 408 response body: invalid character '<' looking for beginning of value: "

408 Request Time-out

\nYour browser didn't send a complete request in time.\n\n"

@alirezarezamand
Copy link

alirezarezamand commented Jan 2, 2023

@Decurse
Copy link

Decurse commented Jan 25, 2023

سلام خسته نباشی ، دمت گرم با این اسکریپتت
من الان نصب کردم همچی عالی داره کار میکنه فقط access log خالیه نمیشه لیمیت کرد هر یوزر مثلا ۳تا بیشتر وصل نشه
میخواستم بدونم مشکل از کجاس
ممنون نیشم راهنمایی کنی مرسی

@kmohsenk
Copy link

سلام خسته نباشی ، دمت گرم با این اسکریپتت من الان نصب کردم همچی عالی داره کار میکنه فقط access log خالیه نمیشه لیمیت کرد هر یوزر مثلا ۳تا بیشتر وصل نشه میخواستم بدونم مشکل از کجاس ممنون نیشم راهنمایی کنی مرسی

چند تا سوال داشتم ازت .
سرورت رو از کجا گرفتی؟
همین بش اسکریپت رو اجرا کردی یا قبلش ورژن رو آوردی پایین؟
با چه اینترنت‌هایی تست کردی؟

@Decurse
Copy link

Decurse commented Jan 25, 2023

سلام ،
سرور hetzner
همین بش رو اجرا کردم دست نزدم
همه اینترنتا جوابه

@kmohsenk
Copy link

سلام ، سرور hetzner همین بش رو اجرا کردم دست نزدم همه اینترنتا جوابه

ممنون. لطف کردی.

سرور ایران رو از کجا گرفتی؟

@szsite
Copy link

szsite commented Jan 27, 2023

منم براسایت بیلدر میخام سرور بگیرم به نظرتون میشه همزمان روش هم v2ray ران کرد و هم سایتو بالا بیارم؟

@idotnetdev
Copy link

مشکلی نداره من خودمم به همین صورت استفاده میکنم.

@hanimur
Copy link

hanimur commented Jan 30, 2023

سلام این روش هنوز کار میکنه؟ من هر کاری میکنم نمیتونم وصل بشم میخوام از یوتیوب فیلم دانلود کنم

@idotnetdev
Copy link

تا جایی که میدونم نه
برای جستجو و دانلود فیلم از یوتیوب از ربات تلگرام fileiranbot استفاده کن

https://t.me/fileiranbot

@hadimousavi79
Copy link

متاسفانه به خاطر آپدیت جدید v2fly دیگه این کانفیگ کار نمیکنه اگر میخواید از این کانفیگ استفاده کنید قبل از اینکه بش اسکریپت رو ران کنید. این دو کامند رو بزنید: docker pull v2fly/v2fly-core@sha256:51934d93f10451ed416725943e804038fccf18e1756456bacdecdafb3e84486b docker image tag 0e75a60ce4c9 v2fly/v2fly-core:latest سپس اسکریپت آقای اسکندری پور رو اجرا کنید.

سلام
من این روش رو هم انجام دادم بازم نشد ممکنه یه اموزش ویدیویی لطف کنید تهیه کنید یا ایمیل یا ایدیتون رو بهم ارسال کنید لطف کنید بنده رو راهنمایی کنید؟

@x-coode
Copy link

x-coode commented Mar 8, 2023

سلام در x-ui چطور میشه از طریق ترمینال سرور به اطلاعات کانفیگ ها دسترسی داشت
مثلا بخوام ببینم یه کانفیگ چقدر از حجمش مونده

@azarean97
Copy link

azarean97 commented Mar 15, 2023

سلام
همچنان مشکل سرعت اپلود داره ... کسی راه حل یا روش جایگزینی براش پیدا نکرده ؟

@ZahraMalamir
Copy link

salam 2024/01/06 07:47:57 92.242.193.62:42152 rejected v2ray.com/core/proxy/vmess/encoding: connection drained DrainSize = 256 17 2 > v2ray.com/core/proxy/vmess/encoding: invalid user > v2ray.com/core/proxy/vmess: Not Found
این ارور رو چیکار باید کرد ؟

@hrgh1985
Copy link

سلام
چطوری میتونم خطای
2024/01/15 23:26:36 WARNING - X-UI: access.log doesn't exist in your config.json
را در پنل رفع کنم؟

@hadimousavi79
Copy link

سلام چطوری میتونم خطای 2024/01/15 23:26:36 WARNING - X-UI: access.log doesn't exist in your config.json را در پنل رفع کنم؟

سلام میگه فایل access.log تو فایل config.json نیست ببین اگه این فایل تو مسیر x-ui باشه برو تنظیمات پنل و اونجا access.log رو بهش اضافه کن

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment