پرش به محتویات

آموزش IPv6؛ شب چهاردهم: انتشار Web Service به‌صورت Dual Stack

یک Web Service را روی هر دو Address Family Listen می‌کنیم، Recordهای A و AAAA هماهنگ می‌سازیم و مسیر IPv4 و IPv6 را جداگانه می‌آزماییم.

IPv4 client -> A record    -> public IPv4 -> IPv4 NAT/firewall -> server
IPv6 client -> AAAA record -> server GUA  -> IPv6 firewall ----> server

IPv6 معمولاً Port Forward ندارد. خود Server مالک آدرس موجود در AAAA است؛ RouterOS آن را Route می‌کند و فقط Traffic انتخاب‌شده را می‌پذیرد.

web01 IPv4: 192.0.2.80 (illustrative; real IPv4/NAT varies)
web01 IPv6: 2001:db8:1200:ab20::80
name:       www.example.net

تنظیم Server

Server Block مربوط به NGINX برای هر دو Family به Listener نیاز دارد:

server {
    listen 80;
    listen [::]:80;
    server_name www.example.net;

    root /var/www/www.example.net;
    index index.html;
}

پیش از Reload اعتبارسنجی کنید:

sudo nginx -t
sudo systemctl reload nginx
ss -lntp | grep -E '(:80|:443)'
curl -4 -H 'Host: www.example.net' 'http://127.0.0.1/'
curl -6 -H 'Host: www.example.net' 'http://[::1]/'

در Apache، Listen 80، Virtual Hostها و خروجی ss را ببینید. Defaultهای Package اغلب هر دو Family را پوشش می‌دهند، اما باید اثبات شوند. در AlmaLinux:

sudo firewall-cmd --add-service=http --add-service=https --permanent
sudo firewall-cmd --reload

Policy در RouterOS

مجوز را پیش از Drop نهایی Chain فوروارد قرار دهید:

/ipv6 firewall filter add chain=forward in-interface-list=WAN \
    dst-address=2001:db8:1200:ab20::80 protocol=tcp dst-port=80,443 \
    connection-state=new action=accept \
    comment="publish web01 IPv6"

اگر Drop نهایی بالاتر است، Rule را به جای درست Move و ترتیب را با /ipv6 firewall filter print بررسی کنید.

انتشار DNS

در DNS Authoritative:

www.example.net.  300  IN  A     192.0.2.80
www.example.net.  300  IN  AAAA  2001:db8:1200:ab20::80

برای Migration برنامه‌ریزی‌شده TTL را پایین و پس از پایداری بالا ببرید. پیش از عملکرد درست مسیر IPv6، AAAA منتشر نکنید؛ Clientهای Dual Stack ممکن است IPv6 را ترجیح دهند و نقص آن شبیه قطعی کامل سایت دیده شود.

TLS و ماتریس آزمایش

ACME Validation باید از تمام مسیرهای منتشرشده و مرتبط با Challenge عبور کند. پس از کار کردن DNS و Firewall Certificate را صادر یا Renew و Dry Run مربوط به Client را آزمایش کنید.

dig A www.example.net +short
dig AAAA www.example.net +short
curl -4 -v https://www.example.net/
curl -6 -v https://www.example.net/
openssl s_client -connect '[2001:db8:1200:ab20::80]:443' \
  -servername www.example.net </dev/null

از شبکه‌های واقعاً IPv4-only و IPv6-capable جداگانه آزمایش کنید. موفقیت Browser روی یک Client دوپشته می‌تواند به‌دلیل Fallback، خرابی یک Family را پنهان کند. Log درخواست را بر اساس Address Family و نتیجهٔ Renewal گواهی Monitor کنید.