Điểm:0

Tự động gán IPv4 công khai cho mọi KVM VM đang được tạo?

lá cờ ug

Tôi đang tự hỏi làm cách nào để tiếp tục gán một ipv4 công khai cho mỗi vm được tạo.

Cài đặt : Máy chủ lưu trữ có 3 IP trên CentOS8 sử dụng libvirt và kvm để ảo hóa Cầu br0 sử dụng eth0 làm giao diện.

Sau rất nhiều Thử nghiệm và Lỗi, tôi đã quản lý để thực hiện thủ công bằng cách sử dụng cầu nối và gán Địa chỉ IP cho giao diện của Tệp mạng Hệ điều hành khách.

Mặc dù tôi ước điều này sẽ tự động vì nếu tôi cài đặt lại hệ điều hành ngay bây giờ, nó sẽ quay trở lại việc không có Địa chỉ IP và id phải kết nối với Khách và chỉnh sửa địa chỉ ipv4 trong các tệp mạng theo cách thủ công mọi lúc. Làm thế nào tôi có thể tránh điều này?

Mục tiêu : mỗi IPv4 được khóa cứng vào Máy ảo và sẽ tồn tại bất kể hệ điều hành có được cài đặt lại hay không.

Mục tiêu tùy chọn : Nếu bất kỳ IPv4 nào từ Hệ điều hành máy chủ không được sử dụng, nó sẽ được gán cho máy ảo tiếp theo được tạo.

Tôi có phải viết mã phần mềm của riêng mình để thực hiện việc này mọi lúc không hay có cách nào đơn giản hơn?

Điểm:0
lá cờ za

Đây là những gì DHCP dành cho.

Bạn có thể tự do lựa chọn địa chỉ MAC của họ, phải không? Thiết lập máy chủ DHCP trên hệ thống trong cùng phân đoạn ethernet (có thể là ảo) như máy ảo và liên kết IP của bạn với một số MAC nhất định.

Bạn cũng sẽ cần phân phối một số tuyến (sử dụng tùy chọn DHCP 121 và 249). Bản thân máy có máy chủ DHCP không cần phải có IP công cộng hoặc IP trong cùng một mạng với tất cả các máy khách; giao tiếp với máy chủ DHCP diễn ra khi vẫn chưa có địa chỉ nào được cấu hình trên máy khách.

Nếu bạn sử dụng ISC DHCP, bạn cần làm như sau. Tôi giả sử máy chủ của bạn là bộ định tuyến và hộp NAT cho máy ảo và nó cũng sẽ lưu trữ máy chủ DHCP của bạn. Nếu bạn muốn làm theo cách khác, sẽ cần phải điều chỉnh một chút:

  • xác định các tùy chọn 121 và 249 ở đâu đó xung quanh đầu dhcpd.conf:
tùy chọn mã rfc3442-classless-static-routes 121 = mảng số nguyên 8;
tùy chọn mã ms-classless-static-routes 249 = mảng số nguyên 8;

có thể, các phiên bản mới không cần điều này, nhưng của tôi thì có.

  • tạo một mạng chia sẻ chặn, hãy đặt mạng con riêng động và địa chỉ công khai của bạn dưới dạng "mạng con" với mặt nạ 32:
bộ định tuyến tùy chọn 192.168.210.1;
tùy chọn máy chủ tên miền 8.8.8.8, 8.8.4.4;

mạng chia sẻ libvirt-vm-net {
    mạng con 192.168.210.0 mặt nạ mạng 255.255.255.0 {
        dãy 192.168.210.2 192.168.210.254;
    }

    mạng con 192.0.2.1 mặt nạ mạng 255.255.255.255 {
        tùy chọn rfc3442-classless-static-tuyến 32, 192,168,210,1, 0,0,0,0, 0, 192,168,210,1;        
        tùy chọn ms-classless-static-route 32, 192,168,210,1, 0,0,0,0, 0, 192,168,210,1;        
    }

    ...
}

Tôi giả sử rằng mạng "riêng tư" của bạn dành cho các máy phía sau NAT sẽ là 192.168.210.0/24 và máy chủ lưu trữ sẽ là .1 trong mạng đó (được gán cho một cầu nối). Cài đặt tuyến đường không có lớp tĩnh (tùy chọn 121 và 249) sẽ thêm các tuyến đường sau:

tuyến ip thêm 192.168.210.1 dev eth0
tuyến ip thêm mặc định qua 192.168.210.1

cần thiết để mọi thứ hoạt động mặc dù thực tế là không có mạng con nào chứa 192.0.2.1/32 và 192.168.210.1; tốt hơn hãy thử thiết lập như vậy trong môi trường phòng thí nghiệm nếu bạn không chắc cách thức hoạt động của định tuyến này

  • tạo các định nghĩa máy chủ với các địa chỉ MAC mong muốn của bạn được liên kết với các địa chỉ IP tĩnh của bạn:
lưu trữ máy chủ công cộng-1 { ethernet phần cứng 00:11:22:33:44:55; địa chỉ cố định 192.0.2.1; }
...
  • thêm các mục hàng xóm tĩnh ("ARP") cho các MAC đó vào /etc/ethers (trên máy chủ):
00:11:22:33:44:55 192.0.2.1
...
  • thêm các tuyến tĩnh tới các địa chỉ đó thông qua giao diện cầu nối tương ứng; Tôi không biết cách thực hiện việc này bằng cách sử dụng cấu hình mạng tiêu chuẩn của bản phân phối hệ điều hành của bạn, nhưng cách chung của Linux là như sau:
tuyến ip thêm 192.0.2.1 dev br0
...

Sau đó, đảm bảo rằng bạn chỉ định các MAC đó cho các máy ảo quan trọng của mình trong cấu hình libvirt. Các máy ảo khác (có MAC không bị ràng buộc) sẽ nhận địa chỉ của chúng từ phạm vi được định cấu hình như bình thường.

Trên thực tế, tôi đã triển khai và thử nghiệm thiết lập này trong thiết lập thậm chí còn "phức tạp hơn" (tất cả DHCP, Máy chủ và bộ định tuyến đều là các hệ thống riêng biệt), tôi cũng không sử dụng libvirt và Máy chủ của tôi là PVE. Ngay cả khả năng khởi động PXE cũng hoạt động hoàn hảo đối với cả máy mạng con "bình thường" (như 192.168.210.0 trong ví dụ) và máy "IP công cộng" (như 192.0.2.1).

Để cho phép tất cả các máy ảo truy cập Internet, bạn phải sử dụng NAT cho các IP riêng và không sử dụng nó cho công cộng; đó không phải là vấn đề, hãy sử dụng quy tắc như iptables -t nat -A POSTROUTING -o <physical-interface-with-public-ip> -s <private-ip-range> -j MASQUERADE. Bằng cách này, phạm vi riêng tư của bạn sẽ được dịch sang địa chỉ công khai của chính máy chủ, nhưng địa chỉ công khai sẽ không được dịch mà sẽ được định tuyến như hiện tại. Một lần nữa, không có vấn đề gì khi có các địa chỉ công khai và riêng tư trên cùng một phân đoạn mạng và đi qua cùng một NIC ảo.

lá cờ ug
bạn có bất kỳ nguồn nào về cách thực hiện điều đó không? Tôi đã thử nó gần như cả ngày nhưng dường như tôi không thể làm cho nó hoạt động được.
Nikita Kipriyanov avatar
lá cờ za
Tôi đã tạo một thiết lập như vậy và cập nhật bài đăng, thêm mô tả cách thực hiện điều này
lá cờ ug
rất cảm ơn bạn
lá cờ ug
Câu hỏi nhỏ, có thể chỉ định địa chỉ IP trực tiếp bằng virt-install không?
Nikita Kipriyanov avatar
lá cờ za
Tôi không biết. Tôi đã không sử dụng virt-install (và libvirt nói chung) trong một thời gian rất dài. Ví dụ: mười năm đã trôi qua kể từ khi Linux bridge nhận được hỗ trợ Vlan gốc, nhưng những kẻ libvirt vẫn sống trong thời kỳ đồ đá và không có hỗ trợ nào cho Linux bridge gốc nhận biết vlan để gán VM cho các vlan khác nhau. Nhưng thiết lập phác thảo là công nghệ ảo hóa bất khả tri và nó sẽ hoạt động bình thường ngay cả với phần cứng vật lý. Tất cả những gì bạn cần làm là gán (hoặc ít nhất là ghi lại) địa chỉ MAC, không phải địa chỉ IP; sự tương ứng được thiết lập trong máy chủ DHCP và /etc/ethers.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.