ثبت سفارش آنلاین به‌زودی فعال می‌شود. تا آن موقع برای سفارش با ما تماس بگیرید.Online ordering is coming soon. Until then, please contact us to order.تماس با ماContact us
JolfaCLOUD

مرکز آموزش / شبکه و میکروتیک

افزودن IPv6 به سرور لینوکس و روتر میکروتیک

از گرفتن رنج IPv6 تا تنظیم روی اوبونتو، دبیان، آلما و RouterOS 7؛ به‌همراه تحویل پیشوند به مشترکان PPPoE و فایروال پایه.

۱۲ دقیقه مطالعه · به‌روزرسانی آبان ۱۴۰۵

This guide is available in Persian for now. Switch to FA to read it.

تعداد آدرس‌های 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

اول بدون تغییر دائمی امتحان کنید؛ با ری‌استارت این تنظیم پاک می‌شود و اگر اشتباهی شود دسترسی‌تان نمی‌پرد:

bash
# 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 اضافه کنید:

yaml
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]
bash
sudo netplan try     # reverts automatically if not confirmed within 120s
sudo netplan apply

دبیان: ifupdown

در دبیانی که از /etc/network/interfaces استفاده می‌کند، زیر تنظیمات IPv4 همان کارت این بلوک را اضافه کنید:

interfaces
iface eth0 inet6 static
    address 2001:db8:1234::10/64
    gateway 2001:db8:1234::1
bash
sudo systemctl restart networking

آلما، راکی و CentOS: NetworkManager

bash
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" کافی است:

bash
sudo ip -6 route add default via fe80::1 dev eth0

بررسی و فایروال لینوکس

bash
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.

RouterOS
/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 قرار بگیرد:

RouterOS
/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) آدرس بگیرند:

RouterOS
/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=yes

ISPها: تحویل پیشوند به مشترکان PPPoE

برای هر مشترک یک /56 (یا /60) در نظر بگیرید تا روتر خانگی بتواند چند شبکهٔ داخلی بسازد. از یک رنج /40 حدود ۶۵ هزار پیشوند /56 درمی‌آید.

RouterOS
/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-pd
  • remote-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 را باز می‌گذارد:

RouterOS
/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"

بررسی روی میکروتیک

RouterOS
/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 باز کرده.
برای سرویس‌هایتان هاست پایدار لازم دارید؟دیدن پلن‌های هاست

منابع

  1. مستندات Netplan netplan.readthedocs.io
  2. مستندات رسمی RouterOS (میکروتیک) help.mikrotik.com/docs
  3. RFC 3849: رنج 2001:db8::/32 برای مستندسازی www.rfc-editor.org/rfc/rfc3849
  4. RFC 4861: کشف همسایه در IPv6 (NDP) www.rfc-editor.org/rfc/rfc4861
  5. RFC 8415: DHCPv6 و تحویل پیشوند www.rfc-editor.org/rfc/rfc8415