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.
Đâ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