Câu hỏi Có cách nào an toàn để vô hiệu hóa DHCP từ dòng lệnh?


Phiên bản ngắn

Tôi biết câu hỏi này rất giống với những người khác và tôi đã thực sự tìm kiếm câu trả lời trên Internet, nhưng dường như không có cách tiếp cận nào hoạt động hoặc các giải pháp dường như là "phức tạp để trở thành thực hành tốt nhất" (tôi sẽ cố gắng giải thích). Tôi đang tìm một cách an toàn trên cách tắt DHCP từ dòng lệnh (để sử dụng trong các tập lệnh).

Lý lịch

Tôi đang cố gắng để tạo ra một "Live-Cd" với Ubuntu Server 12.04 và remastersys (hoạt động tốt). Theo mặc định, hệ thống được định cấu hình để nhận IP bằng DHCP khi khởi động. Đó là ok - điều quan trọng là một kịch bản (chạy sau khi khởi động) có thể (trong một số trường hợp cụ thể) để thiết lập một IP tĩnh bằng cách sử dụng ifconfig (không / etc / network / interfaces ):

ifconfig eth0 192.168.0.1

Trên thực tế điều này cũng đang hoạt động, nhưng IP chỉ tồn tại cho đến khi thời gian thuê DHCP của hợp đồng thuê trước đó đã hết. Một IP mới sẽ được gán cho eth0, trong đó (viết tắt) sẽ phá vỡ hệ thống. Tôi nghĩ "không có vấn đề gì cả, chắc chắn sẽ có thứ như:"

ifconfig eth0 dhcpdisabled

Nhưng cuối cùng tôi nhận ra, nó không hoạt động dễ dàng như vậy. Chỉnh sửa /etc/network/interfaces là một chút khó khăn, bởi vì nó được tạo ra bởi remastersys (thực sự là 23networking kịch bản của casper).

Tôi có thể viết lại nó và khởi động lại mạng, nhưng điều gì sẽ xảy ra với dhclient.leases hoạt động? Sẽ được DHClient vẫn đang chạy trong nền (nó không nên nhưng một số bài viết đề xuất nó sẽ kiểm tra của tôi cho thấy nó được khởi động lại "ngẫu nhiên", nếu dhclient bị giết), tôi có phải loại bỏ hoặc làm rỗng các tập tin dhclient.leases, những gì về resolv.conf?

Tuyệt vọng

Tóm lại - Theo tôi, nó không thực sự là "đơn giản" và phần nào không "cảm thấy ổn định". Câu hỏi này (156183)  đề nghị xóa gói dhclient, nhưng: Điều này có giải quyết được sự cố không? Điều này sẽ phá vỡ các công cụ khác?

Có thực sự không có lệnh cho điều này? Tôi hy vọng tôi chỉ bỏ qua nó.


4
2017-08-01 13:22


gốc


Đối với khách truy cập, bạn không cần phải pkill hoặc loại bỏ bất cứ điều gì. Có thể tìm thấy câu trả lời tốt hơn đây. - John
John, tôi cần lại điều này cho một kịch bản. Làm thế nào điều này sẽ làm việc ở đây? Ống tập tin và làm một chuỗi thay thế? Không âm thanh trưởng thành với tôi. - Mister Henson


Các câu trả lời:


Tôi sẽ cố gắng cung cấp cho bạn một ví dụ ngắn gọn về những gì bạn có thể làm, nhưng nó không phải là ví dụ hoàn chỉnh vì thiết lập chính xác, nhu cầu vv có thể khác nhau khá nhiều.

Đầu tiên, hãy tạo một số giả định để làm cho trường hợp này đơn giản hơn:

  1. Bạn hiện không sử dụng trình quản lý mạng
  2. Bạn không sử dụng resolvconf, nhưng tệp static /etc/resolv.conf
  3. Tệp giao diện của bạn không chứa allow-hotplug dòng để cấu hình lại nếu cáp đã được rút phích cắm / cắm.

Hãy thiết lập biến số trợ giúp của chúng tôi DEV

## your device is eth0
# stop /etc/interface control of the eth0 device, should also stop/kill dhcp for that device
ifdown eth0
## stop dhclient to be sure, don't worry about leases files etc
pkill dhclient
## ubuntu precise calls dhclient with dhclient3
pkill dhclient3
# set ip manually: (NETMASK is quite often 24 == 255.255.255.0) 
ifconfig eth0 up 192.168.0.1/NETMASK
# do you need default gw? (for this example it's 192.168.0.254)
route add default gw  192.168.0.254

## if your /etc/resolv.conf is incorrect add correct nameserver like this:
### 8.8.8.8 = goole open dns
echo 'nameserver 8.8.8.8' > /etc/resolv.conf

Bây giờ nếu giả định 1) là false (dừng quản lý mạng):

stop network-manager

Giả định 2) loại bỏ resolvconf hoặc xóa /etc/resolv.conf nếu đó là một liên kết tượng trưng và thay thế nó bằng tệp tĩnh

[ -h /etc/resolv.conf ] && rm /etc/resolv.conf

Và giả định 3): Điều này sẽ nhận xét ra các đường dây nóng và tôi hy vọng nó đủ

perl -i -pe 's/^(\s*allow-hotplug)/# $1/g' /etc/network/interfaces

3
2017-08-08 12:51



Tôi đoán rằng bạn không cần phải sử dụng pkill hai lần - pkill dhclient nên giết cả dhclient và dhclient3 - nó sử dụng regex. Có thể sử dụng killall thay thế? - scdmb


Bạn có thể sử dụng "systemctl" nếu có sẵn cho bản phân phối của bạn. Nó có sẵn cho phân phối openSUSE của tôi, và tôi sử dụng nó để vô hiệu hóa các dịch vụ theo cách follwoing.

systemctl disable wickedd-dhcp4.service

nơi wickedd-dhcp4 là tên của dịch vụ xử lý cấu hình máy khách DHCP trên hệ thống của tôi. Ngoài ra còn có một dịch vụ cho cấu hình IPv6 dhcp, bạn cũng không thể vô hiệu hóa nó.

systemctl disable wickedd-dhcp6.service

1
2017-09-11 03:46



Thx nhưng Ubuntu đã được sử dụng ... - Mister Henson
Chỉ cần thêm, nếu bạn muốn giải phóng địa chỉ thu được bằng dhcp, sau khi dhcp đã chạy, bạn có thể thực hiện "dhclient -r eth0". Không phải là câu trả lời cho câu hỏi chính sau đó, nhưng nó có thể giúp đỡ. - Sahil Singh


Cách tiêu chuẩn dễ nhất để khắc phục điều này rất đơn giản: chỉ cần nói cho máy chủ DHCP của bạn biết địa chỉ IP nào sẽ được cấp cho một số địa chỉ MAC nhất định. Mỗi bộ định tuyến mà tôi từng chạm đều có tính năng này và nếu bạn đang sử dụng dhcp3-server, nó là cũng đơn giản.


0
2017-08-01 13:42



Nhưng thực sự câu trả lời của bạn là thiếu điểm. Tôi cho rằng câu hỏi của tôi không được viết rõ ràng, nhưng tôi đã sửa đổi nó. - Mister Henson


Điều gì đơn giản là dừng máy khách dhcp với pkill dhclient?


0
2017-08-06 07:12



Cảm ơn, tôi đã thử này và xóa các tập tin thuê, nhưng bằng cách nào đó nó không hoạt động (dhclient dường như được khởi động lại) ... - Mister Henson
Vì vậy, chúng tôi đang tìm kiếm cho quá trình đó là khởi động lại dhclient, phải không? Chỉ cần kiểm tra lại, bạn vui lòng xác minh rằng bạn chưa cài đặt trình quản lý mạng? Và vui lòng đăng nội dung của / etc / network / interfaces. Cám ơn! - Clausi


Tôi sử dụng lệnh sau để tắt DHCP trên máy chủ của tôi.

sudo update-rc.d -f dhcp3-server remove

Những gì nó làm là loại bỏ bất kỳ liên kết khởi động hệ thống nào cho /etc/init.d/dhcp3-server.

Vì vậy, khi khởi động lại DHCP tiếp theo không khởi động.

Đó là nó, đơn giản sạch sẽ, dễ dàng và an toàn.


0
2017-10-07 21:17