تعداد آدرسهای IPv4 تمام شده و هر روز گرانتر میشود، ولی IPv6 عملاً بیپایان است. برای سرور یعنی دسترسی مستقیم از شبکههایی که فقط IPv6 دارند؛ برای ISP یعنی میتوانید به هر مشترک یک رنج کامل بدهید بدون اینکه پشت NAT بماند. در این راهنما قدمبهقدم IPv6 را اول روی سرور لینوکس و بعد روی میکروتیک راه میاندازیم.
پیش از شروع: از دیتاسنتر چه بگیرید
قبل از هر تنظیمی این سه مورد را از پنل دیتاسنتر یا بالادستی بگیرید:
- آدرس یا رنج: معمولاً یک
/64برای سرور، و برای روتر ISP یک رنج بزرگتر مثل/48یا/40. - گیتوی: یا یک آدرس سراسری مثل
2001:db8:1234::1یا آدرس لینکلوکال مثلfe80::1. - روش تحویل: استاتیک، SLAAC (خودکار با Router Advertisement) یا DHCPv6-PD (تحویل پیشوند).
در این مقاله فرض میکنیم سرور آدرس 2001:db8:1234::10/64 و گیتوی 2001:db8:1234::1 دارد و کارت شبکه eth0 است (نام کارت خودتان را با ip link ببینید).
لینوکس: تست موقت با دستور ip
اول بدون تغییر دائمی امتحان کنید؛ با ریاستارت این تنظیم پاک میشود و اگر اشتباهی شود دسترسیتان نمیپرد:
# IPv6 must not be disabled (should print 0)
sysctl net.ipv6.conf.all.disable_ipv6
sudo ip -6 addr add 2001:db8:1234::10/64 dev eth0
sudo ip -6 route add default via 2001:db8:1234::1 dev eth0
ping -6 -c 4 2606:4700:4700::1111اگر پینگ جواب داد، تنظیم را دائمی کنید. روش آن به توزیع بستگی دارد:
اوبونتو: Netplan
فایل تنظیم شبکه را در /etc/netplan/ باز کنید (معمولاً 50-cloud-init.yaml یا 01-netcfg.yaml) و آدرس و مسیر IPv6 را کنار تنظیمات IPv4 اضافه کنید:
network:
version: 2
ethernets:
eth0:
addresses:
- 203.0.113.10/24
- 2001:db8:1234::10/64
routes:
- to: default
via: 203.0.113.1
- to: "::/0"
via: "2001:db8:1234::1"
nameservers:
addresses: [1.1.1.1, 2606:4700:4700::1111]sudo netplan try # reverts automatically if not confirmed within 120s
sudo netplan applyدبیان: ifupdown
در دبیانی که از /etc/network/interfaces استفاده میکند، زیر تنظیمات IPv4 همان کارت این بلوک را اضافه کنید:
iface eth0 inet6 static
address 2001:db8:1234::10/64
gateway 2001:db8:1234::1sudo systemctl restart networkingآلما، راکی و CentOS: NetworkManager
nmcli con show # find the connection name, e.g. eth0
sudo nmcli con mod eth0 ipv6.method manual \
ipv6.addresses 2001:db8:1234::10/64 \
ipv6.gateway 2001:db8:1234::1 \
ipv6.dns "2606:4700:4700::1111"
sudo nmcli con up eth0اگر گیتوی fe80::1 است
بعضی دیتاسنترها گیتوی را با آدرس لینکلوکال میدهند. این آدرس فقط روی همان کارت معنا دارد، پس حتماً نام کارت را همراهش بیاورید؛ در Netplan هم همان via: "fe80::1" کافی است:
sudo ip -6 route add default via fe80::1 dev eth0بررسی و فایروال لینوکس
ip -6 addr show dev eth0
ip -6 route
ping -6 -c 4 google.com
curl -6 https://ifconfig.co # should print the server IPv6 address- UFW: در فایل
/etc/default/ufwمقدارIPV6=yesباشد؛ بعدsudo ufw reload. قوانینی که باufw allowساختهاید برای هر دو نسخه اعمال میشوند. - ICMPv6 را نبندید. برخلاف IPv4، کشف همسایه (NDP) و Path MTU روی ICMPv6 کار میکنند؛ بستن کامل آن یعنی قطع شدن IPv6.
- سرویسها را بررسی کنید که روی IPv6 هم گوش میدهند؛ مثلاً در Nginx خط
listen [::]:443 ssl;لازم است. - بعد از اطمینان، رکورد
AAAAدامنه را به آدرس IPv6 سرور بدهید.
میکروتیک: آدرس و مسیر سمت بالادستی
دستورها برای RouterOS 7 است؛ IPv6 در نسخهٔ ۷ داخل خود سیستم است و بستهٔ جدا لازم ندارد. فرض: پورت بالادستی ether1 و شبکهٔ داخلی bridge.
/ipv6 settings set disable-ipv6=no
# static setup
/ipv6 address add address=2001:db8:1234::2/64 interface=ether1 advertise=no
/ipv6 route add dst-address=::/0 gateway=2001:db8:1234::1اگر بالادستی پیشوند را با DHCPv6-PD میدهد، بهجای آدرس استاتیک یک کلاینت بسازید تا پیشوند در یک pool قرار بگیرد:
/ipv6 dhcp-client add interface=ether1 request=address,prefix \
pool-name=wan6 pool-prefix-length=64 add-default-route=yes
/ipv6 dhcp-client printمیکروتیک: IPv6 برای شبکهٔ داخلی
یک /64 از رنجتان به شبکهٔ داخلی بدهید و Router Advertisement را روشن کنید تا دستگاهها خودشان (SLAAC) آدرس بگیرند:
/ipv6 address add address=2001:db8:abcd:1::1/64 interface=bridge advertise=yes
/ipv6 nd set [find default=yes] advertise-dns=yes
/ip dns set servers=1.1.1.1,2606:4700:4700::1111 allow-remote-requests=yesISPها: تحویل پیشوند به مشترکان PPPoE
برای هر مشترک یک /56 (یا /60) در نظر بگیرید تا روتر خانگی بتواند چند شبکهٔ داخلی بسازد. از یک رنج /40 حدود ۶۵ هزار پیشوند /56 درمیآید.
/ipv6 pool add name=pppoe-pd prefix=2001:db8:ab00::/40 prefix-length=56
/ipv6 pool add name=pppoe-wan prefix=2001:db8:ac00::/40 prefix-length=64
/ppp profile set [find name=default] \
remote-ipv6-prefix-pool=pppoe-wan dhcpv6-pd-pool=pppoe-pdremote-ipv6-prefix-pool: یک/64برای خود لینک PPPoE (روتر مشترک با SLAAC آدرس میگیرد).dhcpv6-pd-pool: پیشوندی که روتر مشترک با DHCPv6-PD برای شبکهٔ داخلیاش میگیرد.- اگر احراز هویت با RADIUS است، میتوانید پیشوند ثابت هر کاربر را از سرور RADIUS بفرستید (ویژگیهای
Framed-IPv6-PrefixوDelegated-IPv6-Prefix) تا مشترک همیشه همان رنج را بگیرد.
میکروتیک: فایروال پایهٔ IPv6
در IPv6 خبری از NAT نیست و هر دستگاه داخلی آدرس عمومی دارد؛ پس فایروال forward خیلی مهمتر از IPv4 است. این مجموعه، اتصالهای جدید از بیرون را میبندد و ICMPv6 و DHCPv6 را باز میگذارد:
/ipv6 firewall filter
add chain=input action=accept connection-state=established,related,untracked
add chain=input action=drop connection-state=invalid
add chain=input action=accept protocol=icmpv6
add chain=input action=accept protocol=udp dst-port=546 src-address=fe80::/10 comment="DHCPv6 client"
add chain=input action=drop in-interface=ether1 comment="drop rest from WAN"
add chain=forward action=accept connection-state=established,related,untracked
add chain=forward action=drop connection-state=invalid
add chain=forward action=accept protocol=icmpv6
add chain=forward action=drop in-interface=ether1 connection-state=new comment="no new from WAN"بررسی روی میکروتیک
/ipv6 address print
/ipv6 route print where dst-address=::/0
/ping 2606:4700:4700::1111 count=4
/ipv6 neighbor printعیبیابی سریع
- آدرس هست ولی به بیرون نمیرود: مسیر پیشفرض
::/0را چک کنید و اینکه گیتوی دقیقاً همان است که دیتاسنتر داده. - با ریاستارت پاک میشود: تنظیم فقط با
ipانجام شده؛ آن را در Netplan، interfaces یا nmcli دائمی کنید. - پینگ با IP جواب میدهد ولی با نام نه: مشکل DNS است؛ یک DNS با آدرس IPv6 اضافه کنید.
- دستگاههای داخلی آدرس نمیگیرند:
advertise=yesروی آدرس bridge و باز بودن ICMPv6 در فایروال را بررسی کنید. - سایت روی IPv6 باز نمیشود: سرویس روی
[::]گوش نمیدهد یا فایروال سرور پورت را فقط برای IPv4 باز کرده.
منابع
- مستندات Netplan netplan.readthedocs.io
- مستندات رسمی RouterOS (میکروتیک) help.mikrotik.com/docs
- RFC 3849: رنج 2001:db8::/32 برای مستندسازی www.rfc-editor.org/rfc/rfc3849
- RFC 4861: کشف همسایه در IPv6 (NDP) www.rfc-editor.org/rfc/rfc4861
- RFC 8415: DHCPv6 و تحویل پیشوند www.rfc-editor.org/rfc/rfc8415