برای اینکه بازیکنان بتوانند به سرور MTA متصل شوند، فایلهای Resource را دریافت کنند و سرور در فهرست عمومی نمایش داده شود، پورتهای موردنیاز باید هم در تنظیمات MTA و هم در فایروال سیستمعامل باز باشند.
باز بودن اشتباه یک پورت با پروتکل نامناسب، بسته بودن فایروال دیتاسنتر، تنظیم نادرست mtaserver.conf یا استفاده از IP اشتباه میتواند باعث خطاهایی مانند Connection Timed Out، Unable to Connect و دیده نشدن سرور در Server Browser شود.
در این آموزش پورتهای اصلی MTA، تنظیم serverport و httpport، بازکردن پورتها با UFW و firewalld، بررسی سرویسهای در حال Listen و رفع مشکلات اتصال را بررسی میکنیم.
پورتهای موردنیاز سرور MTA
در تنظیمات پیشفرض MTA سه پورت اصلی وجود دارد:
| کاربرد | پورت پیشفرض | پروتکل | ضرورت |
|---|---|---|---|
| اتصال بازیکنان به سرور | 22003 | UDP | ضروری |
| دانلود Resource و رابط HTTP | 22005 | TCP | درصورت فعال بودن HTTP |
| نمایش در فهرست عمومی MTA یا ASE | 22126 | UDP | درصورت فعال بودن ASE |
پورت ASE همیشه با فرمول زیر محاسبه میشود:
ASE Port = Server Port + 123
با پورت اصلی پیشفرض:
22003 + 123 = 22126
بازکردن پورت 22003 با TCP کافی نیست. پورت اصلی اتصال بازیکنان باید با پروتکل UDP باز شود.
تفاوت TCP و UDP در پورتهای MTA
شماره پورت بهتنهایی کافی نیست و پروتکل نیز باید صحیح باشد.
- پورت اصلی بازی برای انتقال اطلاعات بازیکنان از UDP استفاده میکند.
- پورت HTTP برای دانلود فایلها و رابط وب از TCP استفاده میکند.
- پورت ASE برای معرفی سرور به فهرست عمومی از UDP استفاده میکند.
TCP و UDP فضای پورت جداگانه دارند؛ بنابراین از نظر فنی میتوان یک شماره یکسان را یکبار برای TCP و یکبار برای UDP استفاده کرد. بااینحال برای مدیریت سادهتر بهتر است تنظیمات پیشفرض یا پورتهای مشخص و مستند انتخاب شوند.
مسیر فایل تنظیمات پورت MTA
تنظیمات شبکه سرور در فایل زیر قرار دارد:
mods/deathmatch/mtaserver.conf
اگر سرور در پوشه multitheftauto_linux_x64 نصب شده باشد، مسیر کامل میتواند مشابه زیر باشد:
/home/mta/multitheftauto_linux_x64/mods/deathmatch/mtaserver.conf
مسیر دقیق به محل نصب سرور بستگی دارد.
قبل از تغییر پورتها بکاپ بگیرید
پیش از ویرایش فایل تنظیمات، از آن نسخه پشتیبان تهیه کنید:
cp mods/deathmatch/mtaserver.conf \
mods/deathmatch/mtaserver.conf.backup
اگر ساختار XML فایل خراب شود، سرور ممکن است با خطای تنظیمات اجرا نشود.
تنظیم پورت اصلی سرور
سرور را متوقف و فایل mtaserver.conf را باز کنید:
nano mods/deathmatch/mtaserver.conf
خط serverport را پیدا کنید:
<serverport>22003</serverport>
این مقدار پورت UDP دریافت اتصال بازیکنان است.
درصورت تغییر پورت، برای نمونه:
<serverport>23003</serverport>
باید پورت 23003 با پروتکل UDP در تمام فایروالها باز شود. پورت ASE نیز در این حالت برابر با 23126 خواهد بود.
23003 + 123 = 23126
تنظیم HTTP Server و پورت دانلود
برای استفاده از HTTP داخلی MTA، مقدار httpserver باید فعال باشد:
<httpserver>1</httpserver>
سپس پورت HTTP را بررسی کنید:
<httpport>22005</httpport>
این پورت با پروتکل TCP کار میکند و برای دانلود فایلهای Resource و سرویسهای HTTP داخلی استفاده میشود.
اگر HTTP داخلی غیرفعال باشد:
<httpserver>0</httpserver>
پورت httpport توسط HTTP داخلی MTA استفاده نخواهد شد. در این حالت ممکن است پروژه از یک وبسرور خارجی و مقدار httpdownloadurl استفاده کند.
فعالکردن نمایش سرور در فهرست عمومی
برای فعالبودن معرفی سرور به فهرست عمومی، مقدار ase را بررسی کنید:
<ase>1</ase>
در این وضعیت باید پورت UDP مربوط به ASE نیز باز باشد.
با تنظیمات پیشفرض:
Server Port: 22003/UDP
HTTP Port: 22005/TCP
ASE Port: 22126/UDP
اگر مقدار ase روی صفر باشد، سرور ممکن است با اتصال مستقیم IP در دسترس باشد اما در فهرست عمومی نمایش داده نشود.
تنظیم serverip
در بیشتر سرورها مقدار serverip باید روی auto باقی بماند:
<serverip>auto</serverip>
قرار دادن یک IP اشتباه در این بخش ممکن است باعث ثبت نادرست سرور یا بروز مشکل در دسترسی شود.
serverip را فقط زمانی تغییر دهید که توپولوژی شبکه، چند IP عمومی یا تنظیمات خاص دیتاسنتر را دقیق میشناسید.
نمونه تنظیم کامل پورتهای پیشفرض
<serverip>auto</serverip>
<serverport>22003</serverport>
<httpserver>1</httpserver>
<httpport>22005</httpport>
<ase>1</ase>
تگهای موجود فایل را حذف یا جابهجا نکنید. فقط مقدار داخل تگهای مربوط را ویرایش کنید.
بازکردن پورت MTA با UFW
در Ubuntu و Debian ممکن است برای مدیریت ساده فایروال از UFW استفاده شود.
ابتدا وضعیت فایروال را بررسی کنید:
sudo ufw status verbose
پورت اصلی MTA را با UDP باز کنید:
sudo ufw allow 22003/udp
پورت HTTP را با TCP باز کنید:
sudo ufw allow 22005/tcp
پورت ASE را با UDP باز کنید:
sudo ufw allow 22126/udp
سپس قوانین را بررسی کنید:
sudo ufw status numbered
فعالکردن UFW بدون قطع SSH
اگر UFW هنوز غیرفعال است، قبل از فعالکردن آن باید پورت SSH سرور باز شود.
برای SSH پیشفرض:
sudo ufw allow 22/tcp
اگر SSH روی پورت دیگری تنظیم شده است، همان پورت واقعی را جایگزین کنید.
پس از ثبت قانون SSH و پورتهای MTA:
sudo ufw enable
فعالکردن UFW بدون بازکردن پورت SSH ممکن است دسترسی مدیریتی شما به VPS را قطع کند.
دستور کامل UFW برای پورتهای پیشفرض
sudo ufw allow 22/tcp
sudo ufw allow 22003/udp
sudo ufw allow 22005/tcp
sudo ufw allow 22126/udp
sudo ufw status numbered
اگر پورت SSH شما 22 نیست، خط اول را با مقدار واقعی جایگزین کنید.
حذف یک قانون اشتباه در UFW
قوانین را همراه شماره نمایش دهید:
sudo ufw status numbered
سپس قانون موردنظر را با شماره حذف کنید:
sudo ufw delete RULE-NUMBER
برای نمونه:
sudo ufw delete 4
پس از حذف هر قانون، شماره قوانین باقیمانده ممکن است تغییر کند.
بازکردن پورت MTA با firewalld
در توزیعهایی مانند Rocky Linux، AlmaLinux، CentOS یا Fedora ممکن است firewalld فعال باشد.
وضعیت سرویس را بررسی کنید:
sudo firewall-cmd --state
Zone فعال را مشاهده کنید:
sudo firewall-cmd --get-active-zones
پورتهای MTA را در Zone عمومی بهصورت دائمی باز کنید:
sudo firewall-cmd --permanent --zone=public --add-port=22003/udp
sudo firewall-cmd --permanent --zone=public --add-port=22005/tcp
sudo firewall-cmd --permanent --zone=public --add-port=22126/udp
سپس تنظیمات دائمی را بارگذاری کنید:
sudo firewall-cmd --reload
فهرست پورتهای باز را ببینید:
sudo firewall-cmd --zone=public --list-ports
اگر Zone فعال public نیست
ممکن است رابط شبکه سرور در Zone دیگری مانند external یا trusted قرار گرفته باشد.
ابتدا Zone فعال را پیدا کنید:
sudo firewall-cmd --get-active-zones
سپس بهجای public نام همان Zone را در دستورات قرار دهید:
sudo firewall-cmd --permanent \
--zone=ACTIVE-ZONE \
--add-port=22003/udp
ثبت قانون در Zone اشتباه باعث میشود پورت همچنان از اینترنت در دسترس نباشد.
حذف پورت از firewalld
sudo firewall-cmd --permanent \
--zone=public \
--remove-port=22003/udp
sudo firewall-cmd --reload
بررسی اینکه MTA روی پورت Listen میکند
بازبودن فایروال کافی نیست. خود برنامه MTA نیز باید روی پورت تنظیمشده در حال Listen باشد.
برای بررسی پورت UDP اصلی:
sudo ss -lunp | grep 22003
برای بررسی پورت HTTP:
sudo ss -ltnp | grep 22005
برای بررسی پورت ASE:
sudo ss -lunp | grep 22126
درصورت اجرا بودن MTA باید خروجی مرتبط با پورت و Process سرور دیده شود.
بررسی همه پورتهای MTA با یک دستور
sudo ss -lntup | grep -E '22003|22005|22126'
اگر هیچ خروجی نمایش داده نشود، ممکن است سرور اجرا نشده، فایل تنظیمات اشتباه باشد یا MTA نتوانسته روی پورت موردنظر Bind شود.
آزمایش پورتها با دستور openports
پس از اجرای سرور، در کنسول اصلی MTA دستور زیر را وارد کنید:
openports
این دستور وضعیت دسترسی پورتهای سرور را بررسی میکند.
اگر پورت بسته گزارش شد، موارد زیر را بررسی کنید:
- فایروال سیستمعامل
- فایروال پنل VPS یا دیتاسنتر
- Security Group سرویس ابری
- Port Forwarding روتر
- پروتکل TCP یا UDP
- پورت ثبتشده در mtaserver.conf
- در حال اجرا بودن Process سرور
فایروال پنل VPS یا سرویس ابری
بعضی سرویسدهندگان علاوه بر فایروال لینوکس، یک فایروال شبکه در پنل مدیریت دارند.
در این حالت باید قوانین ورودی زیر را در پنل نیز ایجاد کنید:
| نوع قانون | پورت | پروتکل | منبع |
|---|---|---|---|
| Inbound | 22003 | UDP | بازیکنان یا اینترنت |
| Inbound | 22005 | TCP | بازیکنان یا IPهای لازم |
| Inbound | 22126 | UDP | اینترنت |
بازکردن پورت فقط در UFW یا firewalld زمانی کافی نیست که فایروال شبکه دیتاسنتر همچنان بسته باشد.
Port Forwarding برای سرور خانگی
اگر سرور MTA روی کامپیوتر یا سرور داخل شبکه خانگی اجرا میشود، روتر باید ترافیک ورودی را به IP داخلی دستگاه هدایت کند.
برای نمونه، اگر IP داخلی سرور این باشد:
192.168.1.100
قوانین Port Forwarding باید مشابه زیر باشند:
| پورت خارجی | پورت داخلی | IP مقصد | پروتکل |
|---|---|---|---|
| 22003 | 22003 | 192.168.1.100 | UDP |
| 22005 | 22005 | 192.168.1.100 | TCP |
| 22126 | 22126 | 192.168.1.100 | UDP |
برای جلوگیری از تغییر IP داخلی، بهتر است برای دستگاه سرور DHCP Reservation یا IP ثابت داخلی تنظیم شود.
مشکل CGNAT در اینترنت خانگی
اگر سرویس اینترنت پشت CGNAT باشد، معمولاً Port Forwarding روتر بهتنهایی اتصال ورودی اینترنت را برقرار نمیکند.
نشانههای احتمالی:
- IP نمایشدادهشده در روتر با IP عمومی اینترنت متفاوت است.
- تمام تنظیمات Port Forwarding صحیح است اما پورتها بسته دیده میشوند.
- ارائهدهنده اینترنت IP عمومی اختصاصی ارائه نکرده است.
در چنین شرایطی باید از شرکت اینترنت IP عمومی یا Static IP دریافت شود یا سرور روی VPS دارای IP عمومی اجرا شود.
اتصال مستقیم بازیکن به سرور
بازیکن میتواند در MTA از بخش Direct Connect آدرس زیر را وارد کند:
SERVER-IP:22003
برای نمونه:
203.0.113.10:22003
آدرس نمونه بالا واقعی نیست و باید با IP عمومی سرور جایگزین شود.
چرا سرور روی localhost باز میشود اما از اینترنت نه؟
این حالت نشان میدهد خود سرور احتمالاً اجرا شده اما مسیر شبکه خارجی مشکل دارد.
- پورت در فایروال سیستمعامل بسته است.
- فایروال دیتاسنتر قانون ورودی ندارد.
- Port Forwarding روتر انجام نشده است.
- اینترنت پشت CGNAT قرار دارد.
- IP عمومی اشتباه استفاده شده است.
- پورت با پروتکل نادرست باز شده است.
- سرور فقط روی یک Interface خاص Bind شده است.
چرا بازیکنان Connection Timed Out میگیرند؟
خطای Timeout معمولاً یعنی پاسخ مناسبی از پورت اصلی دریافت نشده است.
- از اجرا بودن Process MTA مطمئن شوید.
- serverport را در mtaserver.conf بررسی کنید.
- همان پورت را با UDP در فایروال باز کنید.
- فایروال پنل VPS را بررسی کنید.
- IP عمومی صحیح را به بازیکن بدهید.
- خروجی ss را بررسی کنید.
- دستور openports را اجرا کنید.
- Log سرور را از نظر خطای Bind بررسی کنید.
چرا Resourceها دانلود نمیشوند؟
اگر بازیکن به سرور متصل میشود اما دانلود Resource متوقف میشود، بخش HTTP را بررسی کنید.
- httpserver روی 1 باشد.
- httpport در فایل تنظیمات صحیح باشد.
- پورت HTTP با TCP باز شده باشد.
- پورت توسط برنامه دیگری اشغال نشده باشد.
- فایروال دیتاسنتر TCP همان پورت را بپذیرد.
- درصورت استفاده از httpdownloadurl، آدرس خارجی صحیح باشد.
- وبسرور خارجی فایلها را در دسترس قرار دهد.
برای بررسی Listen شدن HTTP:
sudo ss -ltnp | grep 22005
چرا سرور در فهرست عمومی دیده نمیشود؟
اگر اتصال مستقیم کار میکند اما سرور در Server Browser دیده نمیشود:
- مقدار ase روی 1 باشد.
- پورت ASE با UDP باز باشد.
- فرمول serverport + 123 درست محاسبه شده باشد.
- serverip بدون دلیل از auto تغییر نکرده باشد.
- اطلاعات تماس مالک در تنظیمات صحیح باشد.
- فایروال شبکه ترافیک UDP را مسدود نکرده باشد.
- مدتی برای بروزرسانی فهرست سرورها صبر کنید.
خطای Address already in use
این خطا نشان میدهد پورت انتخابشده قبلاً توسط برنامه یا نمونه دیگری از MTA استفاده شده است.
برنامه استفادهکننده از پورت UDP را بررسی کنید:
sudo ss -lunp | grep 22003
برای TCP:
sudo ss -ltnp | grep 22005
سپس Process اضافی را متوقف یا یک پورت آزاد برای سرور انتخاب کنید.
اجرای چند سرور MTA روی یک VPS
هر سرور باید مجموعه پورت متفاوتی داشته باشد.
| سرور | پورت اصلی UDP | HTTP TCP | ASE UDP |
|---|---|---|---|
| سرور اول | 22003 | 22005 | 22126 |
| سرور دوم | 23003 | 23005 | 23126 |
| سرور سوم | 24003 | 24005 | 24126 |
برای هر سرور، پورت ASE را با افزودن 123 به پورت اصلی محاسبه کنید.
بازکردن پورتهای سرور دوم با UFW
sudo ufw allow 23003/udp
sudo ufw allow 23005/tcp
sudo ufw allow 23126/udp
بازکردن پورتهای سرور دوم با firewalld
sudo firewall-cmd --permanent --zone=public --add-port=23003/udp
sudo firewall-cmd --permanent --zone=public --add-port=23005/tcp
sudo firewall-cmd --permanent --zone=public --add-port=23126/udp
sudo firewall-cmd --reload
امنیت پورت HTTP و Webadmin
پورت HTTP ممکن است علاوه بر دانلود فایلها، رابطهای مدیریتی Resourceهایی مانند webadmin را نیز در دسترس قرار دهد.
- برای حسابهای مدیریتی رمز قوی انتخاب کنید.
- دسترسی Admin را فقط به افراد ضروری بدهید.
- Resourceهای مدیریتی بلااستفاده را اجرا نکنید.
- نسخه سرور و Resourceها را بروزرسانی نگه دارید.
- پنل مدیریت را بدون بررسی امنیتی عمومی نکنید.
- درصورت امکان دسترسی مدیریتی را به IPهای مشخص محدود کنید.
محدودکردن کامل پورت HTTP به یک IP ممکن است دانلود Resource توسط سایر بازیکنان را مختل کند. قبل از اعمال قانون محدودکننده، کاربرد واقعی پورت HTTP در پروژه را بررسی کنید.
آیا باید تمام پورتها را باز کنیم؟
خیر. بازکردن تمام پورتهای VPS روش مناسبی نیست.
فقط پورتهای موردنیاز را باز کنید:
22003/UDP
22005/TCP
22126/UDP
همچنین پورت SSH و سرویسهای واقعی دیگر باید جداگانه براساس نیاز مدیریت شوند.
اشتباهات رایج در بازکردن پورت MTA
- بازکردن 22003 با TCP بهجای UDP
- بازکردن 22005 با UDP بهجای TCP
- فراموشکردن پورت ASE
- محاسبه اشتباه serverport + 123
- ویرایش یک فایل mtaserver.conf اشتباه
- Restart نکردن سرور بعد از تغییر پورت
- ثبت قانون firewalld در Zone اشتباه
- فراموشکردن firewall-cmd –reload
- فعالکردن UFW پیش از بازکردن SSH
- بررسی نکردن فایروال پنل VPS
- استفاده از IP خصوصی بهجای IP عمومی
- قرار داشتن اینترنت خانگی پشت CGNAT
- اشغال بودن پورت توسط Process دیگر
- تنظیم اشتباه serverip
- بازکردن تمام پورتهای سرور بدون نیاز
ترتیب صحیح راهاندازی پورتها
- سرور MTA را متوقف کنید.
- از mtaserver.conf بکاپ بگیرید.
- serverport را بررسی کنید.
- httpserver و httpport را بررسی کنید.
- مقدار ase را بررسی کنید.
- پورت ASE را با serverport + 123 محاسبه کنید.
- پورت اصلی را با UDP در فایروال باز کنید.
- پورت HTTP را با TCP باز کنید.
- پورت ASE را با UDP باز کنید.
- فایروال پنل VPS را بررسی کنید.
- سرور MTA را اجرا کنید.
- خروجی ss را بررسی کنید.
- دستور openports را در کنسول اجرا کنید.
- اتصال مستقیم با IP و پورت را آزمایش کنید.
- دانلود Resourceها را بررسی کنید.
- نمایش سرور در Server Browser را بررسی کنید.
جدول سریع عیبیابی پورت MTA
| مشکل | علت احتمالی | راهحل |
|---|---|---|
| بازیکن متصل نمیشود | پورت اصلی UDP بسته است | serverport و قانون UDP را بررسی کنید |
| دانلود Resource متوقف میشود | پورت HTTP TCP بسته است | httpserver، httpport و TCP را بررسی کنید |
| سرور در فهرست نیست | ASE یا پورت آن مشکل دارد | ase=1 و serverport+123 را بررسی کنید |
| روی localhost کار میکند | فایروال خارجی یا NAT | پنل VPS یا Port Forwarding را بررسی کنید |
| Address already in use | پورت اشغال است | Process استفادهکننده را با ss پیدا کنید |
| openports پورت را بسته نشان میدهد | فایروال یا شبکه بالادستی | UFW، firewalld و پنل دیتاسنتر را بررسی کنید |
| SSH بعد از UFW قطع شد | پورت SSH باز نشده | از کنسول اضطراری قانون SSH را اضافه کنید |
| قانون firewalld اثر ندارد | Zone اشتباه یا Reload نشده | Active Zone را پیدا و Reload کنید |
| سرور خانگی قابل دسترس نیست | Port Forwarding یا CGNAT | NAT و IP عمومی را بررسی کنید |
چکلیست نهایی
- serverport در mtaserver.conf صحیح است.
- پورت اصلی با UDP باز شده است.
- httpserver درصورت نیاز فعال است.
- httpport با TCP باز شده است.
- مقدار ase درصورت نیاز روی 1 است.
- پورت ASE با فرمول +123 محاسبه شده است.
- قوانین در فایروال لینوکس ثبت شدهاند.
- فایروال پنل VPS نیز بررسی شده است.
- پورت SSH پیش از فعالکردن UFW باز شده است.
- MTA روی پورتها Listen میکند.
- پورت توسط برنامه دیگری اشغال نشده است.
- دستور openports اجرا شده است.
- اتصال مستقیم با IP عمومی آزمایش شده است.
- دانلود Resourceها کار میکند.
- سرور در فهرست عمومی نمایش داده میشود.
جمعبندی
برای اتصال بازیکنان به سرور MTA، پورت اصلی serverport باید با پروتکل UDP باز باشد. در تنظیمات پیشفرض این پورت 22003 است.
درصورت استفاده از HTTP داخلی، پورت 22005 با TCP موردنیاز است. برای نمایش سرور در فهرست عمومی نیز پورت ASE با پروتکل UDP و مقدار serverport + 123 باید در دسترس باشد.
علاوه بر UFW یا firewalld، فایروال پنل VPS، Security Group، NAT روتر و CGNAT نیز باید بررسی شوند. دستور openports و ابزار ss برای تشخیص محل مشکل بسیار کاربردی هستند.
برای نصب اولیه سرور، مقاله آموزش ساخت سرور MTA روی VPS لینوکس را مطالعه کنید.
برای انتخاب سرور مناسب نیز راهنمای VPS مناسب سرور MTA چه مشخصاتی باید داشته باشد؟ را ببینید.
اگر سرور در دسترس است اما عملکرد مناسبی ندارد، مقاله علت لگ سرور MTA و روشهای رفع آن را بررسی کنید.
برای بررسی فایروال، پورتها و مشکلات اتصال میتوانید از خدمات پشتیبانی فنی گیمسرور و راهاندازی و کانفیگ سرور MTA استفاده کنید.
پرسشهای متداول
پورت اصلی سرور MTA چیست؟
پورت اصلی پیشفرض 22003 با پروتکل UDP است. این مقدار از طریق serverport در فایل mtaserver.conf تنظیم میشود.
پورت 22005 برای چیست؟
پورت 22005 پورت پیشفرض HTTP داخلی MTA است و با پروتکل TCP برای دانلود Resourceها و سرویسهای HTTP استفاده میشود.
پورت 22126 چیست؟
این پورت پیشفرض ASE است و از فرمول پورت اصلی بهعلاوه 123 بهدست میآید. برای پورت اصلی 22003، مقدار ASE برابر 22126 است.
برای MTA پورت TCP باز کنیم یا UDP؟
پورت اصلی بازی و ASE باید UDP باشند. پورت HTTP باید با TCP باز شود.
چگونه بفهمیم پورتهای MTA باز هستند؟
در کنسول اصلی سرور دستور openports را اجرا کنید. همچنین با دستور ss میتوان بررسی کرد که Process MTA روی پورتهای تنظیمشده در حال Listen است.
چرا پورت در UFW باز است اما سرور وصل نمیشود؟
ممکن است فایروال پنل VPS، Security Group، NAT، CGNAT، پروتکل اشتباه یا اجرا نبودن MTA باعث مشکل شده باشد.
بعد از تغییر پورت باید سرور Restart شود؟
بله. پس از تغییر serverport یا httpport بهتر است سرور کامل متوقف و دوباره اجرا شود تا روی پورت جدید Listen کند.
آیا میتوان چند سرور MTA روی یک VPS اجرا کرد؟
بله؛ اما هر سرور باید پورت اصلی، HTTP و ASE متفاوتی داشته باشد و تمام پورتهای مربوط در فایروال باز شوند.
