Cách thích hợp để ngăn dnsmasq ghi đè danh sách máy chủ DNS được cung cấp bởi DHCP?


8

Tôi có hai giao diện:

  • wlan0 - Máy khách Wi-Fi được định cấu hình qua DHCP;
  • wlan1- Địa chỉ IP tĩnh, chạy hostapdđể hoạt động như điểm truy cập, chạy dnsmasqđể đưa ra địa chỉ IP và yêu cầu DNS dịch vụ trên giao diện đó.

Thật không may, dường như khi dnsmasqchạy, một cái gì đó sẽ ghi đè lên resolv.confvà đặt cục bộ dnsmasqđể kiểm soát các truy vấn cục bộ. Đây là resolv.confsau khi dnsmasqđã chạy ...

pi@raspberrypi:~$ cat /etc/resolv.conf
# Generated by resolvconf
domain home
nameserver 127.0.0.1

dnsmasqchỉ bị ràng buộc wlan1và trong mọi trường hợp không bao giờ được cấu hình để tiếp quản như trình phân giải tên cục bộ.

Nếu tôi giết dnsmasqvà sau đó làm mới hợp đồng thuê DHCP, thì resolv.conftệp có máy chủ DNS chính xác như được định cấu hình qua DHCP.

Tôi nghĩ rằng đây có thể là kết quả của sự tương tác với resolv.conf, nhưng tôi không chắc chắn.

Tôi không thể tìm ra ai đang ghi đè cấu hình máy chủ DNS của máy cục bộ để trỏ đến dnsmasqmáy chủ cục bộ hoặc cách ngăn chặn chính xác điều này xảy ra.

Lưu ý rằng lý do tôi muốn dnsmasqchỉ trả lời các yêu cầu DNS wlan1là vì tôi muốn thiết lập giao diện đó để tạo cổng bị khóa để định cấu hình SSID trên wlan0giao diện qua trang web và phần mềm chạy trên máy sẽ sử dụng wlan0kết nối để có được ra internet.

Câu trả lời:


7

Dường như /etc/init.d/dnsmasqtập lệnh sẽ tự động thêm máy cục bộ làm trình phân giải trừ khi lobộ điều hợp bị vô hiệu hóa rõ ràng ...

start_resolvconf()
{
# If interface "lo" is explicitly disabled in /etc/default/dnsmasq
# Then dnsmasq won't be providing local DNS, so don't add it to
# the resolvconf server set.

        for interface in $DNSMASQ_EXCEPT
        do
                [ $interface = lo ] && return
        done

        if [ -x /sbin/resolvconf ] ; then
                echo "nameserver 127.0.0.1" | /sbin/resolvconf -a lo.$NAME
        fi

        for interface in $DNSMASQ_EXCEPT
        do
                [ $interface = lo ] && return
        done

        if [ -x /sbin/resolvconf ] ; then
                echo "nameserver 127.0.0.1" | /sbin/resolvconf -a lo.$NAME
        fi
        return 0
}

Điều này dường như mâu thuẫn với thông tin trong tài liệu dnsmasq ...

Làm cho máy chủ tên sử dụng dnsmasq.

Trong cấu hình đơn giản được mô tả ở trên, các quy trình cục bộ cho máy sẽ không sử dụng dnsmasq, vì chúng nhận được thông tin của chúng về việc sử dụng máy chủ tên từ /etc/resolv.conf, được đặt thành máy chủ tên ngược dòng. Để khắc phục điều này, chỉ cần thay thế máy chủ tên trong /etc/resolv.conf bằng địa chỉ cục bộ 127.0.0.1 và cung cấp địa chỉ (các) máy chủ tên miền ngược cho dnsmasq trực tiếp. Bạn có thể thực hiện việc này bằng tùy chọn máy chủ hoặc bằng cách đặt chúng vào một tệp khác và thông báo cho dnsmasq về vị trí của nó bằng tùy chọn tệp độ phân giải.

Vì vậy, để ngăn dnsmasq chặn các yêu cầu dns cục bộ, chúng ta phải thêm dòng ...

DNSMASQ_EXCEPT=lo

... Để tập tin /etc/default/dnsmasq. Lưu ý rằng chúng tôi làm điều này không vì lý do nào khác ngoài việc ngăn chặn tập lệnh init gọi độ phân giải. Cũng lưu ý rằng việc thêm except-interface=lodòng vào /etc/dnsmasq/conftệp sẽ không có hiệu ứng mong muốn vì tập lệnh init không kiểm tra nội dung của tệp đó.


/etc/default/dnsmasqbây giờ có một tùy chọn để bỏ băm ở cuối, thực hiện công việc : IGNORE_RESOLVCONF=yes.
Maynard

1
Tôi đã thấy rằng việc IGNORE_RESOLVCONF=yeskhông chú ý thực sự không làm gì cả, thêm DNSMASQ_EXCEPT=lothực sự đã khắc phục vấn đề. Đây là vào ngày rasbian 2018-03-13 với dnsmasq 2,76.
mtfurlan
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.