2016-06-29 19 views
10

Tôi đang sử dụng không gian tên để tách một vài giao diện vật lý trên máy chủ. Định tuyến hoạt động hoàn hảo. Ngoài ra tôi có một thư mục cho mỗi không gian tên trong/etc/netns/e.g. /etc/netns/namespaceA/resolv.conf để DNS hoạt động tốt.Làm cách nào để có thể nhận biết được không gian tên?

Sự cố phát sinh khi sử dụng DHCP với dhclient. Tôi đang chạy dhclient từ bên trong một không gian tên và nhận được lỗi này.

(namespaceA)[email protected]:~#dhclient 
RTNETLINK answers: File exists 
mv: cannot move '/etc/resolv.conf.dhclient-new.2740' to '/etc/resolv.conf': Device or resource busy 

Tôi phát hiện ra rằng mv trong /etc/resolvconf/update.d/libc chứa mv có thể gây ra sự cố.

Làm cách nào để có thể nhận biết không gian tên?

Trả lời

6

Tôi đã tự xem xét vấn đề.

Điều gì xảy ra khi bạn tạo một không gian tên mạng, bạn sẽ thấy /etc/resolv.conf của máy chủ trừ khi bạn tạo một cách rõ ràng /etc/netns/<namespace_name>/resolv.conf, mà sẽ ràng buộc gắn kết tự động đến /etc/resolv.conf khi nhìn lên bên không gian tên mạng. Do đó, đơn giản bằng cách tạo đường dẫn đó, resolv.conf của máy chủ sẽ không hiển thị thêm nữa trên không gian tên mạng, sẽ có resolv.conf riêng của nó.

Các manual page của ip netns giải thích điều này:

Đối với các ứng dụng nhận thức được không gian tên mạng, quy ước là để tìm kiếm các file cấu hình mạng lưới toàn cầu đầu tiên trong /etc/netns/TÊN/sau đó nhập/v.v. Ví dụ: nếu bạn muốn một phiên bản khác nhau của /etc/resolv.conf cho một không gian tên mạng được sử dụng để tách biệt vpn của bạn, bạn sẽ đặt tên nó là /etc/netns/myvpn/resolv.conf.

Ip netns exec tự động xử lý các cấu hình này, nộp ước cho các ứng dụng không biết namespace mạng, bằng cách tạo ra một núi namespace và ràng buộc gắn tất cả các mạng mỗi namespace file cấu hình vào vị trí truyền thống của họ trong/etc.

Theo như cập nhật resolv.conf, dhclient không hoạt động trong không gian tên mạng ra khỏi hộp khi /etc/netns/<namespace_name>/resolv.conf tồn tại (trên Mặt khác, khi nó không tồn tại, nó sẽ ghi đè lên resolv.conf của máy chủ , vì nó là cái duy nhất có sẵn, nhưng điều đó không thực sự mong muốn). Khi lỗi trong câu hỏi ở trên cho thấy, điều xảy ra là dhclient chuẩn bị tệp tạm thời với chi tiết máy chủ tên mới trong /etc/resolv.conf.dhclient-new.2740 và sau đó cố đổi tên thành /etc/resolv.conf. Nó tạo ra lỗi vì /etc/resolv.conf đã được gắn kết ràng buộc và dường như mv không được phép thực hiện thủ thuật này.

Để thực hiện dhclient hoạt động trong không gian tên mạng, /sbin/dhclient-script phải được sửa đổi. Tôi đã gỡ bỏ này:

mv -f $new_resolv_conf /etc/resolv.conf 

Và thay thế nó bằng:

cat $new_resolv_conf > /etc/resolv.conf 
rm -f $new_resolv_conf 

Nếu không, dhcpcd dường như làm công việc này một cách chính xác.

+0

Đây là giải pháp tuyệt vời. Lưu ý rằng có hai phần mà bạn phải thay đổi mv thành cat. Tôi tự hỏi mv đang làm gì. Có phải loại bỏ tệp đầu tiên không? – 0xAffe

Các vấn đề liên quan