شبکهی خصوصی بین دو سرور ابری
وقتی برنامهتان روی چند سرور اجرا میشود (مثلاً وب سرور و پایگاه داده)، بهتر است سرورها از راه شبکهی خصوصی با هم حرف بزنند: پایگاه داده هیچ پورتی روی اینترنت باز نمیکند و ترافیک بین سرورهای یک شبکهی خصوصی آریانت هزینهی ترافیک ندارد.
در این آموزش یک شبکهی خصوصی میسازید، دو سرور (web-1 و db-1) را به آن وصل میکنید، اتصال را آزمایش میکنید و MariaDB را فقط روی IP خصوصی در دسترس قرار میدهید.
پیشنیازها
- دو سرور ابری با Ubuntu 24.04 (یا 22.04) در یک دیتاسنتر
- CLI آریانت یا دسترسی به پنل
- آشنایی با ufw و فایروال ابر
در مثالها شبکه 10.0.0.0/16، زیرشبکه 10.0.1.0/24، web-1 با IP 10.0.1.10 و db-1 با IP 10.0.1.11 است.
۱. ساخت شبکهی خصوصی
در پنل: از منوی ابر «شبکه ← شبکههای خصوصی» شبکهی جدید بسازید. هنگام ساخت سرور هم در مرحلهی «۴. شبکه» میتوانید شبکهی خصوصی را انتخاب کنید (راهنمای پنل ابر).
با CLI:
arianet cloud datacenters # datacenter codes, e.g. ovh
arianet cloud networks create --name backend --datacenter ovh \
--ip-range 10.0.0.0/16 --subnet-ip-range 10.0.1.0/24 --wait
ip-range باید یک بازهی خصوصی باشد و subnet-ip-range داخل آن. اگر زیرشبکه ندهید، یکی از روی ip-range ساخته میشود.
۲. اتصال سرورها به شبکه
سرور جدید را میتوانید از همان اول به شبکه وصل بسازید:
arianet cloud servers create --name db-1 --datacenter ovh --plan 3 --image ubuntu-24.04 \
--ssh-key "$(cat ~/.ssh/id_ed25519.pub)" --network <network-id> --wait
یا سرور موجود را وصل کنید و IP خصوصی را خودتان انتخاب کنید (بدون --ip یک IP خودکار داده میشود):
arianet cloud servers attach-network <web-1-id> --network <network-id> --ip 10.0.1.10
arianet cloud servers attach-network <db-1-id> --network <network-id> --ip 10.0.1.11
IP خصوصی، زیرشبکه و MAC هر سرور را از API ببینید:
curl -s https://api.ariaservice.net/cloud/v1/servers/<server-id>/networking \
-H "Authorization: Bearer $ARIANET_TOKEN"
در پاسخ، آرایهی networks برای هر شبکه ip، subnet، mac و ready را دارد.
۳. بررسی کارت شبکه در سرور
روی هر سرور:
ip -br addr
باید یک کارت شبکه با IP خصوصی (مثلاً 10.0.1.10/24) ببینید. اگر کارت جدید دیده میشود ولی آدرس ندارد (معمولاً وقتی شبکه پس از بوت سرور وصل شده است)، آن را با netplan تنظیم کنید. MAC کارت را با mac پاسخ API مقایسه کنید (ip -br link) و این فایل را بسازید:
sudo tee /etc/netplan/60-private.yaml > /dev/null <<'EOF'
network:
version: 2
ethernets:
private0:
match:
macaddress: "fa:16:3e:00:00:00"
addresses:
- 10.0.1.10/24
EOF
sudo chmod 600 /etc/netplan/60-private.yaml
sudo netplan try
- MAC و IP را با مقادیر سرور خودتان عوض کنید. روی
db-1آدرس10.0.1.11/24را بگذارید. netplan tryتنظیمات را موقتاً اعمال میکند و اگر تا ۱۲۰ ثانیه Enter نزنید، برمیگرداند؛ اگر اتصال SSH ماند، Enter را بزنید.- برای این زیرشبکه به gateway نیاز نیست؛ سرورهای یک زیرشبکه مستقیم هم را میبینند.
۴. آزمایش اتصال
از web-1:
ping -c 3 10.0.1.11
اگر ping جواب نداد، ufw روی db-1 ممکن است ICMP یا ترافیک شبکهی خصوصی را ببندد. ترافیک کل شبکهی خصوصی را روی هر دو سرور مجاز کنید:
sudo ufw allow from 10.0.0.0/16
۵. نمونه: MariaDB فقط روی شبکهی خصوصی
روی db-1:
sudo apt install -y mariadb-server
sudo tee /etc/mysql/mariadb.conf.d/60-private.cnf > /dev/null <<'EOF'
[mysqld]
bind-address = 10.0.1.11
EOF
sudo systemctl restart mariadb
sudo ss -tlnp | grep 3306 # should show 10.0.1.11:3306
sudo mariadb <<'SQL'
CREATE DATABASE app;
CREATE USER 'app'@'10.0.1.%' IDENTIFIED BY 'CHANGE-ME-strong-password';
GRANT ALL PRIVILEGES ON app.* TO 'app'@'10.0.1.%';
SQL
sudo ufw allow from 10.0.1.0/24 to any port 3306 proto tcp
از web-1:
sudo apt install -y mariadb-client
mariadb -h 10.0.1.11 -u app -p app -e 'SELECT 1;'
پایگاه داده حالا فقط از شبکهی خصوصی در دسترس است. از کامپیوتر خودتان nc -zv -w 3 <db-1-public-ip> 3306 باید timeout شود.
سرور بدون IP عمومی
برای امنیت بیشتر میتوانید پایگاه داده را با گزینهی «فقط شبکهٔ خصوصی» در پنل (یا --no-ipv4 --no-ipv6 در CLI) بسازید. چنین سروری از اینترنت در دسترس نیست؛ برای دسترسی به آن از سرور دیگری در همان شبکه SSH بزنید (مثلاً ssh -J deploy@WEB1_PUBLIC_IP deploy@10.0.1.11). سرور بدون IP عمومی برای دسترسی به اینترنت (مثلاً apt update) به یک مسیر خروجی نیاز دارد؛ ابر آریانت برای این کار روتر و NAT gateway دارد (منوی «شبکه ← روترها» و /nat-gateways در وب سرویس ابر).
خطاهای رایج
| مشکل | راهحل |
|---|---|
| شبکه در فهرست ساخت سرور دیده نمیشود | شبکه و سرور باید در یک دیتاسنتر باشند. |
| کارت شبکهی دوم آدرس ندارد | مرحلهی ۳ (netplan) را انجام دهید. |
netplan هشدار Permissions ... are too open میدهد | sudo chmod 600 /etc/netplan/*.yaml |
Host 'x' is not allowed to connect to this MariaDB server | کاربر را برای 'app'@'10.0.1.%' ساختهاید ولی از IP دیگری وصل میشوید، یا bind-address درست نیست. |
Can't connect to MySQL server on '10.0.1.11' | ufw روی db-1 پورت ۳۳۰۶ را از شبکهی خصوصی باز نکرده یا MariaDB روی 127.0.0.1 گوش میدهد. |
قدم بعدی
- لود بالانسر ابر آریانت جلوی دو وب سرور با هدفهای روی شبکهی خصوصی
- ساخت شبکه و سرورها با Terraform
- شبکههای خصوصی در CLI
شبکهی خود را بسازید
شبکهی خصوصی ابر آریانت ترافیک بین سرورها را بدون هزینهی ترافیک و بیرون از اینترنت جابهجا میکند. در پنل آریانت به «سرور ابری / Cloud Computing ← شبکه ← شبکههای خصوصی» بروید و سرورهای خود را به آن وصل کنید.