آموزش 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:
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:
برای 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 کنید.