Netplan basic tutorials

  • پیش گفتار
  • مقدمه
  • واژگان
  • پیکربندی عمومی
  • تخصیص آدرس IP توسط خادم DHCP
  • تخصیص آدرس IP توسط خادم DHCP ویندوزی
  • تنظیم آدرس IP به صورت دستی
  • تنظیم چندین آدرس IP به صورت دستی
  • تنظیم آدرس IP برای چندین کارت شبکه
  • استفاده از چندین gateway
  • بررسی تنظیمات bonding
  • بررسی تنظیمات bridges
  • اتصال VLAN به کارت شبکه
  • اتصال مستقیم به gateway
  • اتصال دست نوشته توسط ابزار networkd-dispatcher

  • پیش گفتار

    • مخاطب این مستند تمامی عزیزانی است که به صورت مستقیم در پیکربندی توزیع‌های مختلف سیستم عامل گنو-لینوکس فعالیت می‌کنند.
    • پیش نیاز مطالعه‌ی این مستند حداقل آشنایی با دوره‌ی LPIC-1 و مباحث شبکه می‌باشد.

  • مقدمه

    • netplan راه‌کاری برای رهایی از شیوه‌های مختلف تنظیمات کارت شبکه‌ی توزیع‌های مختلف می‌باشد.
    • در همین راستا، پرونده‌های تنظیمات netplan به زبان Yaml نگارش می‌شوند.
    • تنظیمات نگارش شده توسط مفسر متناسب با توزیع و سیستم عامل، در سطح کرنل اجرا و پیاده‌سازی می‌شوند.
    • netplan توسط شرکت chronicle توسعه داده شده است.
    • تمامی موارد گفته شده در این مستند در سیستم عامل گنو-لینوکس توزیع Ubuntu 18.04 بررسی و آزمایش شده است.

  • واژگان

    • لغات انگلیسی استفاده شده در متن مستند، ترجمه و تمامی لغات به صورت پر رنگ مشخص شده است.
    • همچنین لیست لغات ترجمه شده به شرح زیر است :
      • خادم = Server
      • پرونده = File
      • کارت شبکه = Network Interface
      • پوشه = Directory
      • توزیع = Distribution
      • بسته‌ها = Packets
      • مسیریاب = Router
      • مقاصد = Destinations
      • دست نوشته = script

  • پیکربندی عمومی

    • به منظور ساخت پرونده‌ای برای درج تنظیمات، ابتدا وارد پوشه‌ی زیر شوید :
# cd /etc/netplan/
    • به صورت پیش‌فرض یک پرونده با نام 01-netcfg.yaml در مسیر بالا قرار دارد که فاقد تنظیمات خاصی است.
    • پیشنهاد می‌شود یک پرونده متناسب با کارت شبکه‌‌ای که قصد تنظیمات آن را دارید، ایجاد کنید.
    • به عنوان مثال :
# touch ens160.yaml
    • در نهایت کافیست پرونده‌ی ساخته شده را با یک ویرایشگر (مثلا nano) باز کنید.
# nano ens160.yaml
    • نکته: می‌توان از ساخت پرونده‌ای جدید صرف نظر کرد و از همان پرونده‌ی پیش‌فرض (01-netcfg.yaml) استفاده نمود.

  • تخصیص آدرس IP توسط خادم DHCP

    • به منظور دریافت تنظیمات مربوط به شبکه (آدرس IP ، subnet ، DNS ، gateway و …) از طریق خادم DHCP ، پرونده‌ی تنظیمات را به شکل زیر ویرایش کنید :
network:
  version: 2
  renderer: networkd
  ethernets:
    ens160:
      dhcp4: true
    • مقدار کلید dhcp4 می‌تواند به چهار صورت زیر در نظر گرفته شود :
      • true : به منظور تایید
      • yes : به منظور تایید
      • false : به منظور عدم تایید
      • no : به منظور عدم تایید
    • به منظور عدم دریافت تنظیمات مربوط به آدرس IPv6 می‌توان از مقدار no یا false برای کلید dhcp6 استفاده کرد.
    • به عنوان مثال :
network:
  version: 2
  renderer: networkd
  ethernets:
    ens160:
      dhcp4: true
      dhcp6: true
    • در نهایت کافیست پرونده‌ی تنظیمات را ذخیره و دستور زیر را به منظور اعمال تنظیمات وارد کنید :
# netplan apply
    • در صورتی که دستور بالا به صورت موفقیت آمیز اجرا شود، خروجی‌ای نمایش داده نمی‌شود.

  • تخصیص آدرس IP توسط خادم DHCP ویندوزی

    • به منظور دریافت تنظیمات مربوط به شبکه (آدرس IP ، subnet ، DNS ، gateway و …) از طریق خادم DHCP ویندوزی، پرونده‌ی تنظیمات را به شکل زیر ویرایش کنید :
network:
  version: 2
  renderer: networkd
  ethernets:
    ens160:
      dhcp4: true
      dhcp-identifier: mac
      dhcp6: true
    • در نهایت کافیست پرونده‌ی تنظیمات را ذخیره و دستور زیر را به منظور اعمال تنظیمات وارد کنید :
# netplan apply
    • در صورتی که دستور بالا به صورت موفقیت آمیز اجرا شود، خروجی‌ای نمایش داده نمی‌شود.

  • تنظیم آدرس IP به صورت دستی

    • به منظور اعمال تنظیمات مربوط به شبکه (آدرس IP ، subnet ، DNS ، gateway و …) به صورت دستی، پرونده‌ی تنظیمات را به شکل زیر ویرایش کنید :
network:
  version: 2
  renderer: networkd
  ethernets:
    ens160:
      addresses:
        - 10.10.10.2/24
      gateway4: 10.10.10.1
      nameservers:
          search: [mydomain, otherdomain]
          addresses: [10.10.10.1, 1.1.1.1]
    • با توجه به ساختار زبان Yaml ، مقدار کلید addresses را به شکل زیر نیز می‌توان وارد کرد :
network:
  version: 2
  renderer: networkd
  ethernets:
    ens160:
      addresses: 10.10.10.2/24
      gateway4: 10.10.10.1
      nameservers:
          search: [mydomain, otherdomain]
          addresses: [10.10.10.1, 1.1.1.1]
    • در نهایت کافیست پرونده‌ی تنظیمات را ذخیره و دستور زیر را به منظور اعمال تنظیمات وارد کنید :
# netplan apply
    • در صورتی که دستور بالا به صورت موفقیت آمیز اجرا شود، خروجی‌ای نمایش داده نمی‌شود.

  • تنظیم چندین آدرس IP به صورت دستی

    • یکی از قابلیت‌های خوب راه کار netplan ، امکان در نظر گرفتن چندین آدرس IP برای یک کارت شبکه می‌باشد.
    • به عنوان مثال می‌توان دو آدرس IP مجزا را برای یک کارت شبکه در نظر گرفت. برای این منظور پرونده‌ی تنظیمات را به شکل زیر ویرایش کنید :
network:
 version: 2
 renderer: networkd
 ethernets:
  ens160:
   dhcp4: false
   dhcp6: false
   addresses: [172.16.0.1/24, 172.16.0.2/24]
   gateway4: 172.16.0.251
   nameservers:
    addresses: [8.8.8.8, 8.8.4.4]
    • تنظیمات بالا باعث می‌شود تا آدرس 172.16.0.1 و 172.16.0.2 برای کارت شبکه‌ی ens160 در نظر گرفته شود.
    • بدین صورت که امکان اتصال به هر دوی این آدرس‌ها امکان‌پذیر خواهد بود.
    • در نهایت کافیست پرونده‌ی تنظیمات را ذخیره و دستور زیر را به منظور اعمال تنظیمات وارد کنید :
# netplan apply
    • در صورتی که دستور بالا به صورت موفقیت آمیز اجرا شود، خروجی‌ای نمایش داده نمی‌شود.
    • خروجی تغییرات و تنظیمات اعمال شده، توسط دستور ip a قابل رویت خواهد بود. برای این منظور :
# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:b9:8c:75 brd ff:ff:ff:ff:ff:ff
    inet 172.16.0.1/24 brd 172.16.0.255 scope global ens160
       valid_lft forever preferred_lft forever
    inet 172.16.0.2/24 brd 172.16.0.255 scope global secondary ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:feb9:8c75/64 scope link
       valid_lft forever preferred_lft forever
    • همان طور که در خروجی دستور بالا مشاهده می‌کنید، دو آدرس IP برای کارت شبکه‌ی ens160 در نظر گرفته شده است.

  • تنظیم آدرس IP برای چندین کارت شبکه

    • بر روی بسیاری از خادم‌های عملیاتی چندین کارت شبکه موجود است. تنظیم هر یک از این کارت‌ها را می‌توان در پرونده‌هایی جدا از هم انجام داد.
    • همچنین می‌توان تنظیمات مربوط به تمام کارت‌ها را در یک پرونده انجام داد.
    • برای این منظور پرونده‌ی تنظیمات را به شکل زیر ویرایش کنید :
network:
 version: 2
 renderer: networkd
 ethernets:
  ens160:
   dhcp4: false
   dhcp6: false
   addresses: [172.16.0.1/24, 172.16.0.2/24]
   gateway4: 172.16.0.251
   nameservers:
    addresses: [8.8.8.8, 8.8.4.4]
  ens192:
   dhcp4: false
   dhcp6: false
   addresses: [192.168.88.73/24, 192.168.88.74/24]
   gateway4: 192.168.88.100
   nameservers:
    addresses: [1.1.1.1, 192.168.88.100]
    • تنظیمات بالا باعث می‌شود تا دو آدرس 192.168.88.73 و 192.168.88.74 برای کارت شبکه‌ی ens192 و دو آدرس 172.16.0.1 و 172.16.0.2 برای کارت شبکه‌ی ens160 در نظر گرفته شود.
    • در نهایت کافیست پرونده‌ی تنظیمات را ذخیره و دستور زیر را به منظور اعمال تنظیمات وارد کنید :
# netplan apply
    • در صورتی که دستور بالا به صورت موفقیت آمیز اجرا شود، خروجی‌ای نمایش داده نمی‌شود.

  • استفاده از چندین gateway

    • فرضا ممکن است درون یک شبکه دو gateway وجود داشته باشد. یکی از gateway ها اصلی و برای مسیریابی اصلی در نظر گرفته شده و یکی دیگر برای اتصال به شبکه‌ای دیگر
    • در این حالت نیاز است تا دو gateway برای کارت شبکه در نظر گرفته شود.
    • برای این منظور پرونده‌ی تنظیمات را به شکل زیر ویرایش کنید :
network:
 version: 2
 renderer: networkd
 ethernets:
  ens160:
   dhcp4: false
   dhcp6: false
   addresses: [172.16.0.1/24]
   nameservers:
    addresses: [8.8.8.8, 8.8.4.4]
   routes:
   - to: 0.0.0.0/0
     via: 172.16.0.251
     metric: 100
   - to: 192.168.100.0/24
     via: 172.16.0.100
     metric: 100
    • همان طور که در کد بالا مشخص شده است، برای اتصال به شبکه‌ی 192.168.100.0/24 از مسیریاب با آدرس 172.16.0.100 استفاده شده است.
    • یعنی در صورتی که قصد اتصال به یک سیستم با آدرس 192.168.100.200 را داشته باشیم، بسته‌ها به سمت مسیریاب 172.16.0.100 هدایت می‌شوند.
    • همچنین برای باقی مقاصد (یعنی 0.0.0.0/24) پکت‌ها به سمت مسیریاب 172.16.0.251 سوق داده می‌شوند.
    • در نهایت کافیست پرونده‌ی تنظیمات را ذخیره و دستور زیر را به منظور اعمال تنظیمات وارد کنید :
# netplan apply
    • در صورتی که دستور بالا به صورت موفقیت آمیز اجرا شود، خروجی‌ای نمایش داده نمی‌شود.

  • بررسی تنظیمات bonding

    • با استفاده از قابلیت bonding می‌توان چند کارت شبکه را در یک گروه قرار داد تا در صورتی که هر یک از کارت‌های شبکه از مدار خارج شدند، ارتباط با شبکه قطع نشود.
    • این عمل را می‌توان مثل Raid در نظر گرفت.
    • به عنوان مثال فرض کنید دو کارت شبکه بر روی خادم موجود بوده و هر دوی این کارت‌ها به یک مسیریاب یا یک سویچ متصل شده‌اند.
    • با استفاده از قابلیت bonding می‌توان این دو کارت شبکه را در یک گروه قرار داد و یک آدرس IP برای این گروه در نظر گرفت تا در صورتی که به هر دلیلی یکی از کارت‌های شبکه از مدار خارج شد، دیگری بدون هیچ وقفه‌ای اتصال با شبکه را برقرار کند.
    • برای این منظور ابتدا پرونده‌ی 01-netcfg.yaml را به شکل زیر ویرایش کنید :
network:
    version: 2
    renderer: networkd
    ethernets:
        ens160:
            dhcp4: false
            optional: true
        ens192:
            dhcp4: false
            optional: true
    •  سپس پرونده‌ی 02-bondings.yaml را به شکل زیر ویرایش کنید :
network:
    version: 2
    renderer: networkd
    bonds:
        bond0:
            interfaces: [ens160, ens192]
            addresses: [172.16.0.244/24]
            gateway4: 172.16.0.251
            parameters:
                mode: 802.3ad
            nameservers:
                search: [subdomain.example.com]
                addresses: [1.1.1.1, 8.8.8.8]
            dhcp4: false
            optional: true
    • لطفا توجه فرمایید که نام‌های ens160 و ens192 فرضی بوده و باید متناسب با نام‌های موجود در خادم تغییر یابند.
    • لطفا توجه فرمایید که آدرس‌های IP فرضی بوده و باید متناسب با شبکه‌ تغییر یابند.
    • در نهایت کافیست پرونده‌ی تنظیمات را ذخیره و دستور زیر را به منظور اعمال تنظیمات وارد کنید :
# netplan apply
    • در صورتی که دستور بالا به صورت موفقیت آمیز اجرا شود، خروجی‌ای نمایش داده نمی‌شود.
    • در نهایت می‌توان خروجی تغییرات را در دستور ifconfig مشاهده نمود :
# ifconfig
bond0: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST>  mtu 1500
        inet 172.16.0.244  netmask 255.255.255.0  broadcast 172.16.0.255
        inet6 fe80::48aa:67ff:fe56:80d  prefixlen 64  scopeid 0x20<link>
        ether 4a:aa:67:56:08:0d  txqueuelen 1000  (Ethernet)
        RX packets 4505  bytes 4890079 (4.8 MB)
        RX errors 0  dropped 19  overruns 0  frame 0
        TX packets 3369  bytes 285280 (285.2 KB)
        TX errors 0  dropped 3 overruns 0  carrier 0  collisions 0

ens160: flags=6147<UP,BROADCAST,SLAVE,MULTICAST>  mtu 1500
        ether 4a:aa:67:56:08:0d  txqueuelen 1000  (Ethernet)
        RX packets 225  bytes 20889 (20.8 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 241  bytes 30376 (30.3 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens192: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST>  mtu 1500
        ether 4a:aa:67:56:08:0d  txqueuelen 1000  (Ethernet)
        RX packets 4280  bytes 4869190 (4.8 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3128  bytes 254904 (254.9 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    • همان طور که مشاهده می‌کنید یک کارت با نام bond0 در خادم ایجاد شده است.
    • برای بررسی بیشتر می‌توان به صورت زیر عمل کرد :
# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)

Bonding Mode: IEEE 802.3ad Dynamic link aggregation
Transmit Hash Policy: layer2 (0)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

802.3ad info
LACP rate: slow
Min links: 0
Aggregator selection policy (ad_select): stable
System priority: 65535
System MAC address: 4a:aa:67:56:08:0d
Active Aggregator Info:
        Aggregator ID: 1
        Number of ports: 1
        Actor Key: 15
        Partner Key: 1
        Partner Mac Address: 00:00:00:00:00:00

Slave Interface: ens192
MII Status: up
Speed: 10000 Mbps
Duplex: full
Link Failure Count: 3
Permanent HW addr: 00:0c:29:b9:8c:7f
Slave queue ID: 0
Aggregator ID: 1
Actor Churn State: none
Partner Churn State: churned
Actor Churned Count: 0
Partner Churned Count: 1
details actor lacp pdu:
    system priority: 65535
    system mac address: 4a:aa:67:56:08:0d
    port key: 15
    port priority: 255
    port number: 1
    port state: 77
details partner lacp pdu:
    system priority: 65535
    system mac address: 00:00:00:00:00:00
    oper key: 1
    port priority: 255
    port number: 1
    port state: 1

Slave Interface: ens160
MII Status: down
Speed: Unknown
Duplex: Unknown
Link Failure Count: 7
Permanent HW addr: 00:0c:29:b9:8c:75
Slave queue ID: 0
Aggregator ID: 2
Actor Churn State: none
Partner Churn State: churned
Actor Churned Count: 0
Partner Churned Count: 1
details actor lacp pdu:
    system priority: 65535
    system mac address: 4a:aa:67:56:08:0d
    port key: 0
    port priority: 255
    port number: 2
    port state: 77
details partner lacp pdu:
    system priority: 65535
    system mac address: 00:00:00:00:00:00
    oper key: 1
    port priority: 255
    port number: 1
    port state: 1
    • لطفا به مقادیر Link Failure Count برای کارت‌های ens192 و ens160 دقت کنید.
    • لطفا به دو مقدار Up Delay و Down Delay توجه کنید.
    • نکته: حتما یک بار اتصال کارت‌ها را قطع و سپس وصل کنید.

  • بررسی تنظیمات bridges

    • یکی از فواید ایجاد یک کارت شبکه به صورت bridge این است که می‌توان از آن کارت به صورت مستقیم در کانتینرهای LXD و … استفاده نمود.
    • برای این منظور ابتدا پرونده‌ی تنظیمات را به شکل زیر ویرایش کنید :
network:
  version: 2
  renderer: networkd
  ethernets:
    enp3s0:
      dhcp4: no
  bridges:
    br0:
      dhcp4: yes
      interfaces:
        - enp3s0
    • در نهایت کافیست پرونده‌ی تنظیمات را ذخیره و دستور زیر را به منظور اعمال تنظیمات وارد کنید :
# netplan apply
    • در صورتی که دستور بالا به صورت موفقیت آمیز اجرا شود، خروجی‌ای نمایش داده نمی‌شود.

  • اتصال VLAN به کارت شبکه

    • به منظور اختصاص vlan ID به یک کارت شبکه، ابتدا پرونده‌ی تنظیمات را به شکل زیر ویرایش کنید :
network:
  version: 2
  renderer: networkd
  ethernets:
    mainif:
      match:
        macaddress: "de:ad:be:ef:ca:fe"
      set-name: mainif
      addresses: [ "10.3.0.5/23" ]
      gateway4: 10.3.0.1
      nameservers:
        addresses: [ "8.8.8.8", "8.8.4.4" ]
        search: [ example.com ]
  vlans:
    vlan15:
      id: 15
      link: mainif
      addresses: [ "10.3.99.5/24" ]
    vlan10:
      id: 10
      link: mainif
      addresses: [ "10.3.98.5/24" ]
      nameservers:
        addresses: [ "127.0.0.1" ]
        search: [ domain1.example.com, domain2.example.com ]
    • در نهایت کافیست پرونده‌ی تنظیمات را ذخیره و دستور زیر را به منظور اعمال تنظیمات وارد کنید :
# netplan apply
    • در صورتی که دستور بالا به صورت موفقیت آمیز اجرا شود، خروجی‌ای نمایش داده نمی‌شود.

  • اتصال مستقیم به gateway

    • در صورتی که آدرس IP مسیریاب با آدرس IP در نظر گرفته شده برای کارت شبکه، در یک رنج و دامنه نباشد، امکان اتصال وجود نخواهد داشت.
    • برای حل این مشکل اصطلاحا می‌توان خادم را به صورت مستقیم به مسیریاب متصل نمود.
    • برای این منظور ابتدا پرونده‌ی تنظیمات را به شکل زیر ویرایش کنید :
network:
  version: 2
  renderer: networkd
  ethernets:
    addresses: [ "10.10.10.1/24" ]
    routes:
      - to: 0.0.0.0/0
        via: 9.9.9.9
        on-link: true
    • در نهایت کافیست پرونده‌ی تنظیمات را ذخیره و دستور زیر را به منظور اعمال تنظیمات وارد کنید :
# netplan apply
    • در صورتی که دستور بالا به صورت موفقیت آمیز اجرا شود، خروجی‌ای نمایش داده نمی‌شود.

  • اتصال دست نوشته توسط ابزار networkd-dispatcher

    • به منظور استفاده از دست نوشته‌های نگارش شده برای ابزارهای ethtool و ip می‌توان از سرویس networkd-dispatcher استفاده نمود.
    • همان طور که می‌دانید تنظیمات شبکه در توزیع Ubuntu 18.04 نسبت به گذشته تغییر یافته است.
    • به عنوان مثال کدهای زیر را در نظر بگیرید :
ip l s dev $IFACE mtu 9000
ip l s dev $IFACE promisc on
ethtool -L $IFACE combined 4
ethtool -G $IFACE rx 4096 tx 4096
    • برای استفاده از کدهای بالا حتما نیاز می‌باشد که آن‌ها به صورت دست نوشته تهیه کنید. برای این منظور کافیست پرونده‌ای با نامی دلخواه در مسیر زیر ایجاد کنید :
/etc/networkd-dispatcher/routable.d/
    • نکته: انتخاب سطح دسترسی اجرا برای دست نوشته ضروری می‌باشد. برای این منظور :
chmod +x /etc/networkd-dispatcher/routable.d/script
    • در نهایت کدها را به صورت زیر وارد کنید :
#! /bin/bash

/sbin/ip l s dev $IFACE mtu 9000
/sbin/ip l s dev $IFACE promisc on
/sbin/ethtool -G $IFACE rx 4096 tx 4096

  • منابع

https://gist.github.com/PhilipSchmid/54e17f53c15e3bd2c922ec6ff9ee434f
https://netplan.io/examples
https://michael.mulqueen.me.uk/2018/08/disable-offloading-netplan-ubuntu/

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *