การตั้งชื่อ network interface ใน netplan บน ubuntu 18.04 server

จาก Wiki Opensource

บันทึกนี้ปรับปรุงล่าสุดเมื่อวันที่ 26-11-2561
ดูแลโดย WIBOON

  • มี server อยู่ 2 เครื่อง เราอาจจะพบว่า network interface name แตกต่างกัน ทำให้เมื่อจะตั้งค่า network interface เป็น static หรือ bridge หรือ vlan นั้นเราจะต้องคอยเช็คชื่อ physical network interface ที่ใช้ มันจะไม่สะดวก เรามาดูตัวอย่างกันครับ
  • netplan version 0.36.3 ขึ้นไป (เวอร์ขั่นนี้จะพบใน ubuntu 18.04.1 LTS)
  • ไฟล์ config ของ netplan จะอยู่ที่นี่ /etc/netplan/01-netcfg.yaml
  • แก้ไขแล้วต้องใช้คำสั่ง sudo netplan apply


server ที่ 1 มี physical network interface คือ enp2s0 เราจะตั้งค่า fix ip 192.168.6.17 subnet 255.255.255.128

network:
  version: 2
  renderer: networkd
  ethernets:
    enp2s0:
      addresses: [ 192.168.6.17/25 ]
      gateway4: 192.168.6.1
      nameservers:
          addresses:
              - "192.100.77.10"


server ที่ 2 มี physical network interface คือ enp0s25 เราจะตั้งค่า fix ip 192.168.6.19 subnet 255.255.255.128

network:
  version: 2
  renderer: networkd
  ethernets:
    enp0s25:
      addresses: [ 192.168.6.19/25 ]
      gateway4: 192.168.6.1
      nameservers:
          addresses:
              - "192.100.77.10"


ตอนนี้มันก็ยังดูเหมือนไม่ค่อยยุ่งสักเท่าไหร มาดูกันต่อ

server ที่ 1 มี physical network interface คือ enp2s0 ต้องการให้เป็น bridges และ ตั้งค่า fix ip 192.168.6.17 subnet 255.255.255.128

network:
  version: 2
  renderer: networkd
  ethernets:
    enp2s0:
      dhcp4: no
      dhcp6: no

  bridges:
    br0:
      dhcp4: no
      dhcp6: no
      interfaces:
        - enp2s0
      addresses: [ 192.168.6.17/25 ]
      gateway4: 192.168.6.1
      nameservers:
          addresses:
              - "192.100.77.10"


server ที่ 2 มี physical network interface คือ enp0s25 ต้องการให้เป็น bridges และ ตั้งค่า fix ip 192.168.6.19 subnet 255.255.255.128

network:
  version: 2
  renderer: networkd
  ethernets:
    enp0s25:
      dhcp4: no
      dhcp6: no

  bridges:
    br0:
      dhcp4: no
      dhcp6: no
      interfaces:
        - enp0s25
      addresses: [ 192.168.6.19/25 ]
      gateway4: 192.168.6.1
      nameservers:
          addresses:
              - "192.100.77.10"


จะเห็นได้ว่า physical network interface ของ server ที่ 1 และ server ที่ 2 ต่างกัน enp2s0 และ enp0s25 ตามลำดับ มีการอ้างถึงตั้ง 2 แห่ง

ต่อไปเรามาดูวิธีตั้งชื่อ network interface เป็น vif1 ใช้แทน physical network interface ของ server ทั้ง 2 เครื่อง (จะทำได้สำเร็จก็ต่อเมื่อ netplan version 0.36.3 ขึ้นไป)

server ที่ 1

network:
  version: 2
  renderer: networkd
  ethernets:
    vif1:
      match:
        macaddress: "44:bb:33:85:91:08"
      set-name: vif1
      dhcp4: no
      dhcp6: no

  bridges:
    br0:
      dhcp4: no
      dhcp6: no
      interfaces:
        - vif1
      addresses: [ 192.168.6.17/25 ]
      gateway4: 192.168.6.1
      nameservers:
          addresses:
              - "192.100.77.10"

server ที่ 2

network:
  version: 2
  renderer: networkd
  ethernets:
    vif1:
      match:
        macaddress: "11:c1:ee:95:89:30"
      set-name: vif1
      dhcp4: no
      dhcp6: no

  bridges:
    br0:
      dhcp4: no
      dhcp6: no
      interfaces:
        - vif1
      addresses: [ 192.168.6.19/25 ]
      gateway4: 192.168.6.1
      nameservers:
          addresses:
              - "192.100.77.10"


จะเห็นได้ว่า สะดวกขึ้นเมื่อตั้งค่าสำหรับ br0 ด้วย interface ชื่อ vif1 เหมือนกันทั้ง 2 เครื่อง ก็ไม่ต้องจดจำว่า เครื่อง server ที่กำลังทำนี้ใช้ physical network interface name อะไร

รู้วิธีตั้งชื่อแล้วได้อะไร
มาดูต่อกันครับ ตอนนี้ server ทั้ง 2 เครื่อง เราใช้งาน network เดียว คือ vlan 6 ต้องการให้ server รองรับ vlan 7 ด้วย จะต้องทำอย่างไรบ้าง ก่อนอื่นเราไปตั้งค่า port ที่ L3 หรือ L2 manage switch ของ server ทั้ง 2 เครื่องให้มี vlan 6 (untagged) และ vlan 7 (tagged) เสร็จแล้วเราก็นำท่อนข้างล่างนี้เพิ่มต่อท้ายทั้ง 2 เครื่อง เพื่อให้มี vlan 7 สังเกตที่คำว่า link: จะใช้เป็น vif1 จะสะดวกมาก

  vlans:
    vlan7:
      id: 7
      link: vif1

และหากต้องการทำ bridge (br1) on top of vlan ก็เพิ่มดังนี้

  bridges:
    br1:
      dhcp4: no
      dhcp6: no
      interfaces:
        - vlan7


ถ้าหากเรากำลังใช้งานโปรแกรมจัดการจำพวก Cloud Management (Build Clouds and Manage Data Center Virtualization) เช่น ที่ผมทดสอบคือ OpenNebula จะมีความสามารถในโปรแกรมให้เลือกว่า VM ที่จะสร้างใหม่นั้นจะสร้างไว้ที่ server ใด และจะให้ VM นั้นเป็น vlan อะไร เช่น ถ้าจะให้เป็น vlan 7 ทำได้ง่าย ๆ โดยให้เลือกตั้งค่า 802.1q สำหรับ vlan7 และจะมีการสร้าง bridge interface br1 ให้เองเมื่อมี VM เปิดทำงาน โดยเราไม่ต้องเพิ่มทั้ง vlans: (vlan7) และ bridges: (br1) ด้วยตัวเองเหมือนตัวอย่างข้างบนครับ แค่เราตั้งชื่อ network interface ให้เป็นชื่อเดียวกัน เช่น vif1 เป็นต้น จะทำให้ OpenNebula สามารถสร้าง VM ไปที่ KVM server เครื่องใดก็ได้ เช่น server ที่ 1 และ server ที่ 2 ที่เราตั้งชื่อเรียบร้อยแล้ว