Làm thế nào tôi có thể khởi động DHCP3-server sau, để nó chờ giao diện cầu nối khởi tạo trước khi tải?


8

Tôi có máy chủ Ubuntu 10.04 hiện đang thiết lập với máy chủ dhcp3 cũng như giao diện bắc cầu (br0) để sử dụng với các máy ảo. Vấn đề tôi gặp phải là khi máy chủ khởi động lại, dhcp3-server không tải được do sự chậm trễ thêm gây ra bởi giao diện cầu nối.

Về cơ bản, br0 không có địa chỉ IP để sử dụng với DHCP3-Server cho đến cuối chu kỳ khởi động, sau khi DHCP3-server đã cố tải.

Khi máy chủ đã khởi động, tôi có thể chạy '/etc/init.d/dhcp3-server start' mà không gặp vấn đề gì.

Có cách nào tôi có thể: - Buộc dhcp3-server đợi cho đến khi giao diện được tải trước khi thử tải không? - Khởi động dhcp3-server sau khi mọi thứ khác đã được tải lên?

Câu trả lời:


9

Một giải pháp là yêu cầu máy chủ dhcp không khởi động tự động và sau đó thêm hai dòng sau vào /etc/network/interfacestệp cho bạn định nghĩa cầu nối

post-up /etc/init.d/dhcp3-server start
pre-down /etc/init.d/dhcp3-server stop

Vì vậy, nó sẽ kết thúc như thế này

iface br0 inet static
    bridge_ports eth0 eth1
    address 192.168.1.2
    broadcast 192.168.1.255
    netmask 255.255.255.0
    gateway 192.168.1.1
    post-up /etc/init.d/dhcp3-server start
    pre-down /etc/init.d/dhcp3-server stop

Bằng cách này, quản lý mạng (ifup / ifdown, KHÔNG phải trình quản lý mạng) sẽ khởi động máy chủ DHCP sau khi đưa lên cầu và tắt nó trước khi xóa cầu.


Tôi đã thử nghiệm cả hai câu trả lời và giải pháp hậu kỳ / trước khi xuống này sạch sẽ hơn nhiều và nâng cấp thân thiện. Cảm ơn đống cho những gợi ý tuyệt vời! Tôi đã tìm kiếm cao và thấp cho một giải pháp đơn giản như thế này
user2009

Niềm vui của tôi;) nó luôn luôn tuyệt vời để được đánh giá cao.
LassePoulsen

2

Bạn có thể sửa đổi /etc/init.d/dhcp3-servertập lệnh khởi động để chờ địa chỉ IP khả dụng br0. Ví dụ: (Cảnh báo: mã chưa được kiểm tra!)

# wait 5 secs between br0-ready tests
wait_time_between_probes=5
# maximum number of attempts (i.e., timeout)
max_attempts=10

log_progress_msg "Waiting for br0 to get an IP address"
for n in $(seq 1 $max_attempts); do
  if /sbin/ifconfig br0 | egrep -q "inet addr:" ; then
    # IP address ready on br0, exit loop
    break
  else
    sleep $wait_time_between_probes
  fi
done
if [ "$n" = "$max_attempts" ]; then
    log_warning_msg "Maximum number of attempts reached, but br0 has no IP address yet" 
    log_warning_msg "Continuing anyway but DHCP3 server might not start correctly"
fi 

Đoạn mã nên đi vào tập lệnh khởi động, trong case ... start)phần trước khi khởi động trình nền DHCP3. Tất nhiên, bạn nên điều chỉnh thời gian chờ và số lần thử để phù hợp với môi trường của bạn (mất bao lâu để br0 có được địa chỉ IP?)


Điều này chắc chắn là đi đúng hướng. Tôi đã đặt nó ngay lập tức sau khi "trường hợp" $ 1 "bắt đầu)" trong "/etc/init.d/dhcp3-server" tuy nhiên điều kiện "/ sbin / ifconfig br0 | fgrep -q" addr: "" dường như thành công ngay cả khi không có giao diện cầu trực tuyến. Nhập "/ sbin / ifconfig br0 | fgrep -q" addr: "" vào thiết bị đầu cuối không cho đầu ra.
user2009

Ngoài ra, mặc dù hai 'log_warning_msg' ở cuối tập lệnh sẽ hiển thị bất kể thành công và thất bại. họ sẽ tốt hơn trong nhật ký với câu lệnh kiểu if (max_attvor = n) để hiển thị chính xác các thông báo này khi thất bại?
user2009

Ngoài ra, giao diện cầu bình thường mất thêm 5 - 10 giây sau khi tải giao diện để thiết lập, chỉ đủ lâu để dhcp3-server bị lỗi.
user2009

@ user2009 Liên quan đến grep -qdòng: 1. Tôi nghĩ rằng trận đấu thất bại vì cây cầu có được địa chỉ IPv6 ngay khi nó kết thúc. Nếu bạn chỉ quan tâm đến địa chỉ IPv4, chỉ cần thay thế grepdòng bằng grep -q 'inet addr:'(đã được thực hiện ở trên); mặt khác, một biểu thức chính quy phức tạp hơn cần được tìm thấy, khớp với tất cả các địa chỉ IP cuối cùng có thể có của cây cầu của bạn. 2. -qTùy chọn triệt tiêu đầu ra (giống như > /dev/null)
Riccardo Murri

@ user2009 cảm ơn bạn đã bình luận log_warning_msg; Tôi nghĩ rằng tôi đã sửa nó theo đề nghị của bạn
Riccardo Murri
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.