Nếu bạn đang chạy trình phân giải của riêng mình hoặc muốn sử dụng một từ nhà cung cấp bên thứ 3, bạn có thể thấy rằng /etc/resolv.conf
tệp của mình đang bị ghi đè bởi DHCP. Có một số cách để giải quyết vấn đề này. Vì bạn có thể sẽ muốn khởi động lại để đảm bảo rằng các thay đổi của bạn được thực hiện và vì bạn sẽ bắt đầu cài đặt mạng ngay từ đầu, tôi khuyên bạn nên thực hiện việc này trên một ví dụ thử nghiệm và / hoặc ngoài đỉnh giờ
Bây giờ sau đó, đây là ba phương pháp, từ tồi tệ nhất đến tốt nhất. Lưu ý rằng tất cả các phương thức trong hướng dẫn này được viết cho FreeBSD 10. Người dùng Linux có thể tham khảo hướng dẫn này .
Phương pháp 1: Sử dụng cài đặt giao diện tĩnh
Trong thử nghiệm giới hạn của tôi, điều này dẫn đến thời gian khởi động nhanh hơn một chút vì bạn không phải đợi DHCP chỉ định cài đặt mạng của mình. Tuy nhiên, tôi đã thấy đề cập đến trong một số tài liệu của Vultr rằng sử dụng cài đặt giao diện tĩnh sẽ không được chấp nhận và bạn nên sử dụng DHCP. Tôi cho rằng họ có lý do chính đáng cho việc này và do đó tôi đã tiếp tục sử dụng DHCP. Tuy nhiên, nếu bạn quyết định đi theo con đường này, hãy làm theo các bước dưới đây.
- Xác định IP của máy chủ, mặt nạ mạng và IP cổng.
- Sửa đổi
/etc/rc.conf
để sử dụng các giá trị này thay vì DHCP.
- Khởi động lại để kiểm tra cài đặt.
Xác định IP / netmask / gateway
Giả sử giao diện của bạn là vtnet0, hãy thực hiện như sau:
ifconfig vtnet0 | grep inet
Điều này sẽ giúp bạn có địa chỉ IP và netmask cho máy chủ của bạn:
inet 10.10.10.10 netmask 0xffffff00 broadcast 10.10.10.255
FreeBSD thích sử dụng hex cho netmask. Ở trên chuyển đổi thành 255.255.255.0
nếu bạn tò mò. Bạn có thể tìm thấy một bảng tiện dụng ở đây , nhưng đừng sợ: bạn chỉ có thể sao chép địa chỉ hex vào các tệp cấu hình của mình (hoặc chuyển đổi nó thành số thập phân nếu bạn thích).
Bạn có thể tìm thấy cổng một số cách. Đây là một:
route get default | grep gateway
sẽ trả lại một cái gì đó dọc theo dòng:
gateway: 10.10.10.1
Sửa đổi /etc/rc.conf
với các giá trị mới
Được trang bị IP, netmask và gateway, giờ là lúc để thêm chúng vào cấu hình hệ thống. Tôi thực sự khuyên bạn nên sao lưu tệp này trước khi thực hiện bất kỳ thay đổi nào, vì nó sẽ giúp bạn hoàn tác dễ dàng hơn nếu bạn làm hỏng. Bây giờ, hãy mở ra /etc/rc.conf
trong trình soạn thảo lựa chọn của bạn và thực hiện các thay đổi sau:
# Comment out this line:
# ifconfig_vtnet0="dhcp"
# Add these lines:
defaultrouter="10.10.10.1"
ifconfig_vtnet0="inet 10.10.10.10 netmask 0xffffff00"
Rõ ràng, bạn nên chắc chắn thay thế IP thực tế, netmask và cổng cho các giả mạo rõ ràng của tôi.
Khởi động lại và kiểm tra
Khởi động lại máy chủ của bạn bằng cách sử dụng shutdown -r now
và đảm bảo rằng nó hoạt động trở lại đúng cách. Thực hiện bất kỳ thử nghiệm nào bạn thấy cần thiết để đảm bảo mọi thứ đều hoạt động tốt. Nếu mạng không thể truy cập, đăng nhập qua bảng điều khiển và hoàn nguyên các thay đổi của bạn. Nếu mọi thứ đều ổn, tại thời điểm này, bạn có thể đặt bất cứ thứ gì bạn muốn vào resolv.conf
mà không sợ nó bị xóa sạch.
Nếu vì bất kỳ lý do gì bạn không thể khởi động lại, điều này sẽ hoạt động, nhưng tôi thực sự thực hiện khởi động lại đúng cách nếu tôi là bạn:
service netif restart && service routing restart
Cách 2: Làm cho resolv.conf
bất biến
Đây là một chút hack, nhưng nó dễ dàng là giải pháp nhanh nhất. Tôi không khuyến nghị điều đó bởi vì tôi không thể đảm bảo điều này sẽ không gây ra một số điều kỳ lạ trong tương lai khi bạn nâng cấp lên bản phát hành mới của hệ điều hành và có khả năng dhclient sẽ phàn nàn rất nhiều. Điều đó nói rằng, đơn giản chflags schg /etc/resolv.conf
là tất cả những gì cần thiết. Các tập tin bây giờ hoàn toàn được bảo vệ chống ghi, thậm chí từ root. Bạn có thể xác minh như vậy:
vultr [~]# chflags schg /etc/resolv.conf
vultr [~]# ls -ol /etc/resolv.conf
-rw-r--r-- 1 root wheel schg 50 Nov 29 06:28 /etc/resolv.conf
vultr [~]# echo "so very untouchable" >> /etc/resolv.conf
/etc/resolv.conf: Operation not permitted.
Hoàn tác với: chflags noschg /etc/resolv.conf
Phương pháp 3: Lịch sự nói với FreeBSD để lại các thiết lập của bạn
Đây là cách sạch nhất, đúng đắn nhất để thực hiện điều này. Có hai cách bạn có thể thực hiện:
Cấu hình dhclient
Hãy lấy ví dụ từ trên xuống và nói rằng tất cả những gì bạn muốn làm là đặt máy chủ tên tùy chỉnh của bạn vào resolv.conf
và không muốn mất nó mỗi khi DHCP làm việc đó. Trong trường hợp của tôi, tôi muốn sử dụng trình phân giải bộ đệm mà tôi đã cài đặt nghe trên localhost, vì vậy tôi chỉnh sửa /etc/dhclient.conf
(có thể sẽ bị bỏ trống ngoài các nhận xét) và thêm vào như sau:
interface "vtnet0" {
supersede domain-name-servers 127.0.0.1;
}
Điều này sẽ cho phép dhclient thực hiện mọi thứ khác mà bạn cần, nhưng khi máy chủ DHCP gửi cho nó một danh sách các máy chủ tên sẽ sử dụng, bạn sẽ thay thế (như thay thế hoàn toàn) những cái mà nó cung cấp. Nếu bạn muốn bổ sung (thay vì thay thế) những thứ được cung cấp, bạn có thể "nối thêm" hoặc "trả trước" thay vì "thay thế", nếu phù hợp.
Ngẫu nhiên, nếu bạn yêu cầu nhiều hơn một máy chủ tùy chỉnh, hãy chỉ định chúng như thế này:
supersede domain-name-servers 127.0.0.1, 127.0.0.2;
Sau khi thực hiện các thay đổi của bạn, hãy khởi động lại dhclient
để chúng có hiệu lực ngay lập tức:
service dhclient restart vtnet0
Kiểm tra của bạn /etc/resolv.conf
và bạn sẽ thấy nó bây giờ có (các) máy chủ tên tùy chỉnh của bạn trong đó.
Theo văn bản này, máy chủ tên là thứ duy nhất máy chủ DHCP của Vultr đã đặt vào tôi resolv.conf
và là thứ duy nhất tôi quan tâm để tùy chỉnh. Tuy nhiên, nếu bạn cần ghi đè bất kỳ cài đặt nào khác, hãy tham khảo hướng dẫn tuyệt vời để có danh sách toàn diện:
man 5 dhclient.conf
Có những ví dụ tuyệt vời ở phía dưới sẽ cho bạn ý tưởng về những gì bạn có thể làm. Ngoài đỉnh đầu của tôi, tôi có thể tưởng tượng bạn có thể muốn thêm một cái gì đó như supersede domain-name "example.com";
nếu bạn thường có một dòng như thế trong của bạn resolv.conf
. Một lần nữa, tham khảo các tài liệu.
Cấu hình resolvconf
Đây là giải pháp đơn giản nhất nếu bạn chỉ muốn resolv.conf
bị bỏ lại một mình. Theo hướng dẫn:
resolvconf manages resolv.conf(5) files from multiple sources, such as DHCP and VPN clients
Cấu hình của nó nằm trong /etc/resolvconf.conf
, có khả năng không tồn tại trên hệ thống của bạn, vì vậy hãy thoải mái tạo nó. Để làm cho resolv.conf
bất biến của bạn , thêm điều này:
# prevent all updates to resolv.conf:
resolv_conf="/dev/null"
Nếu bạn sử dụng unbound
làm trình giải quyết bộ đệm ẩn cục bộ, đó là dòng mà nó thêm vào (cùng với một vài cho chính nó). Điều đó về cơ bản là đánh lừa resolvconf
suy nghĩ của bạn /etc/resolv.conf
nằm ở /dev/null
. Một cái gì đó hơi ít có nghĩa, nhưng hiệu quả tương đương, sẽ là:
# disable resolvconf from running any subscribers:
resolvconf="NO"
Nếu bạn muốn làm một cái gì đó tinh vi hơn là tắt nó đi, các trang dành cho resolvconf
và resolvconf.conf
có nhiều thông tin.