پرش به مطلب اصلی

شبکه‌ی خصوصی بین دو سرور ابری

وقتی برنامه‌تان روی چند سرور اجرا می‌شود (مثلاً وب سرور و پایگاه داده)، بهتر است سرورها از راه شبکه‌ی خصوصی با هم حرف بزنند: پایگاه داده هیچ پورتی روی اینترنت باز نمی‌کند و ترافیک بین سرورهای یک شبکه‌ی خصوصی آریانت هزینه‌ی ترافیک ندارد.

در این آموزش یک شبکه‌ی خصوصی می‌سازید، دو سرور (web-1 و db-1) را به آن وصل می‌کنید، اتصال را آزمایش می‌کنید و MariaDB را فقط روی IP خصوصی در دسترس قرار می‌دهید.

پیش‌نیازها​

در مثال‌ها شبکه 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 گوش می‌دهد.

قدم بعدی​

شبکه‌ی خود را بسازید​

شبکه‌ی خصوصی ابر آریانت ترافیک بین سرورها را بدون هزینه‌ی ترافیک و بیرون از اینترنت جابه‌جا می‌کند. در پنل آریانت به «سرور ابری / Cloud Computing ← شبکه ← شبکه‌های خصوصی» بروید و سرورهای خود را به آن وصل کنید.