- این پروژه در راستای یادگیری زبان C++ بوده است و از زبان های html. js و پایتون و فریم ورک flask هم استفاده شده است. در این برنامه به صورت realtime از مانیتورینگ و ربات تلگرام پشتیبانی میشود. میتوان مقدار رم و cpu مصرفی و ترافیک هر پورت را مشاهده کرد. سیستم لاگ و لاگ های تانل هم قابل مشاهده هستند. ایپی های متصل به این برنامه قابل مشاهده است و میتوان ان ها را بست و از API هم پشتیبانی میکند
- از تجربه به دست امده در این برنامه برای نوشتن پنل وایرگارد فارسی با حجم و زمان و ربات استفاده خواهد شد که base کد ها در دست خودم باشد.
- باید به یک سری نکات توجه داشته باشید که اگر در udp سرور شما محدودیت داشت باید توسط لوکال ایپی geneve این مشکل را حل کنید. پرایوت ایپی شما باید ورژن 4 باشد
- پورت فوروارد
- پشتیبانی از مانیتورینگ ( مقدار cpu و ram، حجم ترافیکی هر پورت، اپتایم سیستم، سیستم لاگ، لاگ تانل، ایپی های متصل به برنامه)
- دارای Api و telegram bot برای مانیتورینگ و سایر موارد
- ترافیک مصرفی هر پورت در json file ذخیره میشود
- بستن یا باز کردن ایپی های متصل به برنامه
- داری thread pool
- دارای پورت رنج و پورت به صورت single
- پشتیبانی از tcp و udp
- دارای tcpnodelay و tcp keepalive
- دارای tcp health check
- دارای لاگ های info,debug,trace,error,warn و ذخیره آن در لاگ فایل
- دارای max connection برای tcp
- دارای buffer size برای tcp و udp
- دارای retry و delay in between برای tcp
- دارای timeout برای stale connections
- دارای اسکریپت نصب پایتون , flask و کامپایل پروژه
- امکان استفاده از برنامه با و بدون مانیتورینگ
- دارای لاگ سیستم و flask لاگ
- پشتیبانی از arm64 / amd64
آموزش استفاده از برنامه با و بدون اسکریپت
نمونه config.yaml
- نمونه کانفیگ tcp
#TCP USAGE
forwarders:
- listen_address: "0.0.0.0" #ادرسی لوکال سرور که به همین صورت وارد میکنید
listen_port: 8080 # پورتی که در لوکال سرور باید انتخاب کنید
target_address: "192.168.1.10" # ادرس سرور خارج
target_port: 8080 # پورت سرور خارج
- listen_address: "::" # این همان نمونه برای ایپی 6 میباشد
listen_port: 7070 # پورت ایران
target_address: "2001:db8::1" # ادرس سرور خارج ایپی 6
target_port: 7070 # پورت سرور خارج
# port range
- listen_address: "0.0.0.0" # الوکال سرور که باید به همین صورت وارد نمایید
target_address: "192.168.1.10" # ایپی سرور خارج
port_range:
start: 8080 # پورت شروع
end: 8085 # پورت پایان
- listen_address: "::" # IPv6 address
target_address: "fe80::1" # IPv6 سرور خارج
port_range:
start: 9090 پورت شروع
end: 9095 پورت پایانی
thread_pool:
threads: 2 # threads for cpu cores بستگی به تعداد هسته پردارشگر شما دارد
max_connections: 200 # تعداد نهایی کانکشن هم زمان
retry_attempts: 5 # مقدار تلاش دوباره برای برقرار ارتباط
retry_delay: 10 # وقفه به ثانیه بین هر تلاش مجدد برای برقراری ارتباط
tcp_no_delay: false # Disable Nagle's algorithm for low latency
buffer_size: 8092 #بافر سایز . میتوانید حتی بیشترین مقدار 65535 بذارید. باید بررسی کنید
monitoring_port: 8080 # پورت مانیتور
timeout:
connection: 3000 # Timeout for connections in seconds
health_check:
enabled: true #true or false
interval: 300 # Interval for performing health checks in seconds
tcp_keep_alive:
enabled: true # enable or disable TCP keepalive
idle: 60 # time in seconds the connection is idle before keepalive goods are sent
interval: 10 # time in seconds between individual keep-alive probes
count: 5 # number of keepalive goods sent before the connection is dropped
logging:
enabled: true # Enable or disable logging (true/false)
file: "logfile.log" # Name of the file
level: "INFO" # Options: "TRACE", "DEBUG", "INFO", "WARN", "ERROR", "ALL"
- نمونه کانفیگ udp
#UDP USAGE
srcAddrPorts:
- "0.0.0.0:1150" #only ipv4 USE Geneve local ip if your server is limited
- "0.0.0.0:1151"
dstAddrPorts:
- "66.200.1.1:1150"
- "66.200.1.2:1151"
timeout: 3000 # Timeout for idle connections (in seconds)
buffer_size: 8092 #buffer size or max 65530
thread_pool:
threads: 2
logging:
enabled: true # Enable/disable logging
file: "logfile.log" #log file directory
level: "INFO" # Log level: TRACE, DEBUG, INFO, WARN, ERROR
monitroing_port: 8080 # or whatever port you want
نحوه استفاده از اسکریپت برای tcp یا Udp
- نخست دستورات پایین را اجرا میکنم
apt update -y
apt install git -y
git clone https://github.com/Azumi67/proxyforwarder.git
cd proxyforwarder/src
- سپس فایل config.yaml را طبق اموزش اماده میکنم و سپس پیش نیاز ها را نصب میکنم و بسته به نیاز tcp یا udp را start میکنم. برنامه اجرا میشود و سپس میتوانم از طریق ipserveriran:port به مانیتورینگ دسترسی پیدا کنم و بعد از ساختن یوزر نیم و پسورد به داخل صفحه اصلی مانیتورینگ میشوم
chmod +x forwarder.sh
./forwarder.sh /root/proxyforwarder/src/config.yaml
- برای اینکه هر دفعه برای اجرای این برنامه وارد این اسکریپت نشوم، یک سرویس درست میکنم و مسیر اسکریپت tcp.sh یا udp.sh را در داخلش قرار میدهم. مانند نمونه زیر
chmod +x /root/proxyforwarder/src/tcp.sh
nano /etc/systemd/system/tcpforwarder.service
- برای tcp
[Unit]
Description=TCP Forwarder and Flask Server
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/root/proxyforwarder/src
ExecStart=/root/proxyforwarder/src/tcp.sh /root/proxyforwarder/src/config.yaml
Restart=on-failure
Environment="PATH=/root/proxyforwarder/src/venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable tcpforwarder.service
sudo systemctl start tcpforwarder.service
sudo systemctl status tcpforwarder.service
- برای udp
chmod +x /root/proxyforwarder/src/udp.sh
nano /etc/systemd/system/udpforwarder.service
[Unit]
Description=UDP Forwarder and Flask Server
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/root/proxyforwarder/src
ExecStart=/root/proxyforwarder/src/udp.sh /root/proxyforwarder/src/config.yaml
Restart=on-failure
Environment="PATH=/root/proxyforwarder/src/venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable udpforwarder.service
sudo systemctl start udpforwarder.service
sudo systemctl status udpforwarder.service
اجرای برنامه بدون مانیتورینگ
- نخست این دستورات را اجرا کنید تا بعدا binary های arch های مختلف را اماده کنم
apt update -y
apt install git -y
git clone https://github.com/Azumi67/proxyforwarder.git
cd proxyforwarder/src
sudo apt install -y build-essential g++ cmake libboost-all-dev libyaml-cpp-dev
#amd64
g++ tcp_forwarder.cpp -o tcp_forwarder -std=c++17 -pthread -lboost_system -lyaml-cpp
#arm64
g++ tcp_forwarder.cpp -o tcp_forwarder -std=c++17 -pthread -lboost_system -lyaml-cpp
- برای udp
apt update -y
apt install git -y
git clone https://github.com/Azumi67/proxyforwarder.git
cd proxyforwarder/src
sudo apt install -y build-essential g++ libboost-system-dev libyaml-cpp-dev
#amd64
g++ udp_forwarder.cpp -o udp_forwarder -std=c++17 -pthread -lboost_system -lyaml-cpp
#arm64
g++ udp_forwarder.cpp -o udp_forwarder -std=c++17 -pthread -lboost_system -lyaml-cpp
- سپس طبق اموزش فایل config.yaml را ویرایش میکنم
nano /root/proxyforwarder/src/config.yaml
- سرویس برای برنامه
nano /etc/systemd/system/tcpforwarder.service
[Unit]
Description=TCP Forwarder Service
After=network.target
[Service]
Type=simple
ExecStart=/root/proxyforwarder/src/tcp_forwarder /root/proxyforwarder/src/config.yaml
Restart=always
User=root
WorkingDirectory=/root/proxyforwarder/src
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=tcp_forwarder
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
</details>
</div>
sudo systemctl daemon-reload
sudo systemctl start tcpforwarder.service
sudo systemctl enable tcpforwarder.service
sudo systemctl status tcpforwarder.service
ulimit -n 65536
sudo nano /etc/security/limits.conf
root hard nofile 65536
root soft nofile 65536
sudo nano /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
CTRL+X و Y
sudo sysctl -p
نحوه استفاده از ربات
- نخست داخل یک سرور خارج، ربات را دانلود میکنم
#not externally managed
-----------------------
apt update -y
apt install git -y
git clone https://github.com/Azumi67/proxyforwarder.git
cd proxyforwarder/telegramBot
sudo apt install -y python3 python3-pip python3-venv
python3 -m venv venv
source venv/bin/activate
pip install --upgrade pip
pip install python-telegram-bot requests pyyaml
pip freeze
#externally managed
-----------------------
apt update -y
apt install git -y
git clone https://github.com/Azumi67/proxyforwarder.git
cd proxyforwarder/telegramBot
sudo apt install -y python3 python3-pip python3-venv
apt install python3.11-venv -y
python3 -m venv ~/telegram_bot_env
source ~/telegram_bot_env/bin/activate
pip install -r requirements.txt
deactivate
python3 robot.py
- سپس از شما توکن بات و صفحه مانیتورینگ را میخواهد. به طور مثال ایپی ایران شما 2.2.2.2 میباشد و پورت مانیتورینگ 8080 است . پس url برای شما 2.2.2.2:8080 است
- سپس از شما api key را میخواهد که از قبل باید داخل قسمت api key management در داخل 2.2.2.2:8080 ساخته باشید و paste کنید
- سپس میتوانید از ربات برای مانیتورینگ استفاده نمایید
- دقت نمایید api key management را از قبل بسازید و قبلا ربات خود را از botfather داخل تلگرام دریافت کرده باشید.
- میتوانید ربات را داخل سرویس قرار بدید که برای همیشه فعال باشد
nano /etc/systemd/system/telegram_bot.service
-------------------------------
[Unit]
Description=Telegram Bot Service
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/root/proxyforwarder/telegramBot
ExecStart=/root/telegram_bot_env/bin/python /root/proxyforwarder/telegramBot/robot.py
Restart=always
RestartSec=5
Environment="PYTHONUNBUFFERED=1"
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=telegram_bot
[Install]
WantedBy=multi-user.target
---------------
sudo systemctl daemon-reload
sudo systemctl enable telegram_bot
sudo systemctl start telegram_bot
sudo systemctl status telegram_bot