Tên giao diện mạng có thể dự đoán phá vỡ di chuyển vm


9

Làm thế nào để bạn thiết lập lại /etc/networking/interfaceskhi sử dụng "tên giao diện mạng dự đoán"?

Các phiên bản Ubuntu cũ hơn 15.10 sử dụng tên bộ điều hợp mạng như:

  • eth0
  • eth1
  • eth2

Việc thay thế card mạng hoặc chuyển vm sang một trình ảo hóa mới sẽ khiến Linux tăng số giao diện. Xóa /etc/udev/rules.d/70-peristent-net.rulessẽ làm cho Linux sử dụng lại eth0.

Ubuntu 15.10 và mới hơn sử dụng ' Tên giao diện mạng có thể dự đoán '. Tên bộ điều hợp mạng được lấy từ địa chỉ mac.

  • ens3
  • ens32
  • ens192

Khi di chuyển một vm, mạng sẽ không bắt đầu vì /etc/network/interfacesvẫn tham chiếu bộ điều hợp mạng không tồn tại cũ.

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto ens32
iface ens32 inet dhcp
pre-up sleep 2

Cách tốt nhất để thiết lập lại tập tin / etc / mạng / giao diện là gì?

Tôi cần thực hiện hành động này trước khi tắt vm và chuyển sang một trình ảo hóa mới vì tôi đang sử dụng trình đóng gói để tạo hình ảnh vàng tự động, dựa trên hình ảnh vàng của đầu bếp / bento .

Tôi đã tìm thấy xóa / etc / mạng / giao diện không hoạt động do tệp không được tự động phục hồi trong lần khởi động tiếp theo sau khi di chuyển.

Tôi đã thử chỉnh sửa tệp grub của mình để trở lại quy ước đặt tên 'eth0'. Mặc dù / etc / network / interface không đề cập đến tên cũ (eth0), vm sẽ không nhận được ip và bất kỳ lần khởi động lại nào cũng sẽ khiến vm sử dụng quy ước đặt tên mới. Ngoài ra, tôi đã tìm thấy systemd sẽ luôn được ưu tiên trừ khi tôi có thể đảm bảo duy biosdevname=0 trì vĩnh viễn trong cấu hình grub . Không chắc chắn làm thế nào để áp dụng vĩnh viễn này

GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=0 bios.devname=0"

Nếu có thể, tôi không nên sử dụng init init trên đám mây hoặc sử dụng bất kỳ tập lệnh khởi động bài đăng nào vì tôi muốn giữ hình ảnh vàng càng sạch càng tốt.

Chắc chắn đây là vấn đề mà các nhà cung cấp đám mây (Azure, AWS, RackSpace, Openstack) đã giải quyết khi họ nhập vms. Tôi có thể không phải là người đầu tiên thử và di chuyển một vm bằng tên giao diện mạng có thể dự đoán được.

Tôi đã thử chạy các lệnh này trước khi tắt và di chuyển vm

apt-get remove biosdevname -y;
ln -s /dev/null /etc/systemd/network/99-default.link;

Tôi tìm thấy khi tôi di chuyển vm, điều đó /etc/network/interfacesip addressvẫn đề cập đếnens32


Bạn đã thử giải pháp từ trang web chị em yêu cầu Ubuntu? askubuntu.com/a/785442/467355 - về cơ bản bằng tay tạo ra các quy tắc udev, và có thể sử dụng một kịch bản thời gian khởi động duy nhất để chèn mac mới vào nó sau khi clone (hoặc tạo ra nó tươi sau mỗi clone)
Dani_l

Vâng, tôi đã nhìn vào đó. Đây là những hình ảnh vàng chung chung có thể được sử dụng bởi bất kỳ ai vì vậy tôi không biết địa chỉ mac trước thời hạn.
kẻ lừa đảo

Đó là toàn bộ vấn đề "sử dụng tập lệnh khởi động một lần để chèn mac mới vào sau bản sao (hoặc để tạo bản mới sau mỗi bản sao)" - bạn chèn tập lệnh khởi động mới vào hình ảnh vàng khi truy vấn khởi động và chèn mac đúng với quy tắc udev.
Dani_l

Câu trả lời:


4

Chắc chắn đây là vấn đề mà các nhà cung cấp đám mây (Azure, AWS, RackSpace, Openstack) đã giải quyết khi họ nhập vms.

Tôi nghĩ OpenStack sử dụng định dạng đám mây, định dạng ConfigDrive và cung cấp cấu hình mạng phù hợp với phần cứng VM. Nguồn:

Nếu bạn loại trừ một kịch bản khởi động đầu tiên, có một câu trả lời rõ ràng.

Trước đây, thực tế đã được đảm bảo rằng các máy chủ được trang bị một thẻ ethernet duy nhất chỉ có một giao diện "eth0" duy nhất. Với sơ đồ mới này, một quản trị viên bây giờ phải kiểm tra tên giao diện cục bộ trước khi anh ta có thể gọi các lệnh trên đó trước đây anh ta có cơ hội tốt rằng "eth0" là tên đúng.

Tôi không thích điều này, làm thế nào để tôi vô hiệu hóa điều này?

Về cơ bản, bạn có ba tùy chọn:

  1. Bạn vô hiệu hóa việc gán tên cố định, để tên hạt nhân không thể đoán trước được sử dụng lại. Đối với điều này, chỉ cần che dấu tệp .link của udev cho chính sách mặc định: ln -s / dev / null /etc/systemd/network/99-default.link

https://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/

Chuyển về tên giao diện liên tục cũ không phải là một trong các tùy chọn được ghi lại.

Thay thế khác là một thiết lập trong đó các giao diện mạng được bật theo mặc định, bất kể tên chính xác của chúng. Tôi nghĩ NetworkManager hỗ trợ điều này theo mặc định. systemd-networkd cũng có thể được yêu cầu làm điều này .

Ngay khi bạn có nhiều thiết bị mạng cho VM, dù sao họ cũng cần cấu hình cụ thể ...

Ngoài VM, có một lợi thế rõ ràng của cách tiếp cận kiểu NetworkManager: PC có thể có nhiều giao diện mạng, có thể thuộc các loại khác nhau, chỉ có một trong số chúng được kết nối. Ví dụ, có thể thấy điều này trên một số bo mạch chủ cao cấp hoặc trên hệ thống nơi giao diện mạng đầu tiên không hoạt động như mong muốn và giao diện thứ hai được cài đặt tại một số điểm.


Gợi ý tuyệt vời. Tôi thấy rằng ln -s /dev/null /etc/systemd/network/99-default.linkkhông có sự khác biệt. vms của tôi vẫn sử dụng quy ước đặt tên mới.
kẻ lừa đảo

3

Tôi đã từ bỏ việc cố gắng làm điều này một cách sạch sẽ, và đưa ra bản hack sau. Bằng cách chạy tập lệnh sau ngay trước khi tắt vm và di chuyển, vm sẽ có eth0 làm bộ điều hợp mạng khi bật nguồn.

ln -s /dev/null /etc/systemd/network/99-default.link;
echo '# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet dhcp
pre-up sleep 2' > /etc/network/interfaces

sed -i.bak 's/GRUB_CMDLINE_LINUX_DEFAULT=.*/GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=0 bios.devname=0 quiet"/' /etc/default/grub
update-grub
apt-get remove biosdevname -y || true;

Nói một cách chính xác, apt-get remove biosdevnamekhông bắt buộc vì gói đó không được cài đặt theo mặc định trên Ubuntu 16.04. Ngoài ra, thêm bios.devname=0vào GRUB_CMDLINE_LINUX_DEFAULTkhông cần thiết vì tên tệp sinh học chưa được cài đặt. Nó không ngăn chặn mạng bị phá vỡ nếu tên miền sinh học được cài đặt trong tương lai.


Tại sao thiết lập liên kết truyền đối số kernel? Các tài liệu nêu một nên là đủ. Kiểm tra chữ thảo cho thấy đó thực sự là trường hợp.
0xC0000022L

2

Bạn có cần tên giao diện mạng dự đoán?

Giải pháp của tôi là gỡ cài đặt biosdevnamevà điều đó đã dẫn đến việc luôn có các giao diện mạng được đặt tên là eth0, eth1, v.v. Tôi không tìm thấy một lý do chính đáng để cài đặt tên giao diện mạng cũng như tên miền sinh học.

trong đó /etc/udev/rules.d/70-persistent-net.ruleslà nơi bạn có thể sửa đổi địa chỉ mac phần cứng nào được đặt tên thành eth0, eth1, v.v. Tôi thường xóa nội dung của tệp này, lưu nó dưới dạng tệp trống, khởi động lại, sau đó tôi có một bản rõ ràng với các bộ điều hợp mạng chính xác hiển thị ...

# This file was automatically generated by the /lib/udev/write_net_rules
# program,run by the persistent-net-generator.rules rules file.
#
# This file was automatically generated by the /lib/udev/write_net_rules
# program,run by the persistent-net-generator.rules rules file.
#
# You can modify it,as long as you keep each rule on a single
# line,and change only the value of the NAME= key.
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="xx:xx:xx:xx:xx:xx", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="xx:xx:xx:xx:xx:xx", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"

^^ trong đó xx: xx: xx: xx: xx: xx là địa chỉ mac duy nhất của bộ điều hợp mạng của bạn.

Tôi biết bạn đề cập đến việc xóa tệp này không phải là giải pháp, nhưng tôi đăng ví dụ ở trên vì ít nhất trong Suse, nó /lib/udev/write_net_rulestạo ra tệp này. Vì vậy, hãy xem việc theo dõi lại tệp này có giúp ích gì không, nếu nó có thể áp dụng cho bản phân phối của bạn, bạn có thể sửa đổi nó để giải quyết vấn đề của mình.

lưu ý đây là những gì tôi biết từ phiên bản Suse 11, cách khởi đầu cũ, trước systemd. Không chắc chắn nếu điều này đã thay đổi cho các phiên bản mới nhất của linux theo systemd.


tên miền sinh học được áp dụng bởi udev "dựng sẵn" net_id freedesktop.org/wiki/Software/systemd/
trộm

0

Chạy vào bản nâng cấp Ubuntu 14.04 này lên 16.04. biosdevnamegói không được cài đặt nên viện đến "biosdevname=0 net.ifnames=0"trong /etc/default.grubnhư đã nêu bởi OP.

Tôi chạy tập lệnh này và nếu đầu ra có vẻ tốt, hãy chuyển hướng đầu ra vào /etc/udev/rules.d/70-persistent-net.rulesđể xây dựng các quy tắc udev mới trong trường hợp kernel đã quyết định liệt kê các cổng ethernet theo một thứ tự khác.

#!/bin/bash
count=0

# build array of network devices starting with eth? from /proc
for dev in `cat /proc/net/dev | egrep 'eth.*:' | awk '{print $1};' | cut -d':' -f1 | sort`; do
   edev[$count]="$dev"
   let count="$count+1"
done

# use array to find mac address
for d in ${edev[@]}; do
   mac=`ip addr show "$d" | grep ether | awk '{print $2};'`
   if [ -n "$mac" ]; then
      echo "# mac for $d is $mac"
   fi 

   printf 'SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="%s", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="%s"\n' $mac $d
done
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.