Cách thêm dnsmasq và giữ cho systemd được giải quyết (18.04)


10

Tôi muốn có được độ phân giải dns nhanh với dnsmasq và giữ cho systemd được giải quyết mặc định.

Tìm kiếm một cách thanh lịch để làm điều này


Bạn có nhận ra rằng systemd-phân giải cũng lưu trữ tra cứu DNS? Bạn không cần dnsmasq trên một hệ thống được giải quyết bằng systemd. Bạn nên đọc Hệ thống giải quyết có hữu ích không?
Aeyoun

Tôi biết - Nhưng có một 'chi tiết' rất đáng kể ... - dnsmasq như một bộ đệm dns khổng lồ - Bộ nhớ cache của bộ giải quyết systemd rất nhỏ và không thể điều chỉnh - Tốc độ phân giải dns được cải thiện rất cao khi bộ đệm lớn của dnsmasq đã được lấp đầy bởi các yêu cầu.
cmak.fr

Bộ đệm chưa được cấu hình mặc định trong phân giải systemd thực tế lớn hơn dnsmasq.
Aeyoun

Trên thực tế, dnsmasq thực hiện nhiều hơn so với giải quyết hệ thống; Xem gist.github.com/jult/4eba88bdd34a57cc79d6#gistcomment-1706666gist.github.com/jult/4eba88bdd34a57cc79d6#file-hostsupdater-sh để đặt tên nhưng một vài ..
Julius

@Aeyoun: bằng cách đọc mã nguồn được phân giải systemd, bạn có thể thấy rằng giới hạn bộ đệm dns của 4096 là byte, không phải là mục nhập. dnsmasq có kích thước bộ đệm lớn hơn và có thể cấu hình - dns.
cmak.fr

Câu trả lời:


10

Tôi muốn có được độ phân giải dns nhanh với dnsmasq và giữ cho thiết lập mặc định được phân giải systemd / NetworkManager để sử dụng trong tương lai. Có, bộ nhớ đệm dns khổng lồ của dnsmasq có thể cải thiện tốc độ duyệt web. Có, mục tiêu là giữ cho thiết lập dns đặc trưng mặc định là 18.04

  1. Cài đặt dnmasq
  2. Cấu hình nó (nghe địa chỉ và máy chủ dns)
  3. Cấu hình NetWorkManager cho địa chỉ máy chủ dns thủ công
  4. Kiểm tra xác minh

1 - Với sudo

apt-get -y install dnsmasq

2 - Với sudo

tee -a /etc/dnsmasq.conf << ENDdm
interface=lo
bind-interfaces
listen-address=127.0.0.1
# DNS server from OpenDns. Use yours...
server=208.67.222.222
server=208.67.220.220
ENDdm

systemctl restart dnsmasq
systemctl enable dnsmasq

3 - Với USER, định cấu hình Trình quản lý mạng

# Get NM first active profile name
NetManProfile=$(nmcli -t  connection show --active | cut -f 01 -d ':')
# remove, if exists, current dns servers
nmcli con mod "$NetManProfile" ipv4.dns ""
# set 'manual' dns server
nmcli con mod "$NetManProfile" ipv4.ignore-auto-dns yes
# set dnsmasq as manually set dns server
nmcli con mod "$NetManProfile" ipv4.dns 127.0.0.1
# i also disabled ip6, do what u want
nmcli con mod "$NetManProfile" ipv6.method ignore
# reconnect to take effect
nmcli connection down "$NetManProfile"
nmcli connection up "$NetManProfile"

4 - Kiểm tra xác minh

  • Theo mặc định, hệ thống nghe được giải quyết trên 127.0.0.53
  • dnsmasq lắng nghe trên 127.0.0.1 như được đặt trong / etc / dnsmasq
  • Đã giải quyết systemd lấy 127.0.0.1 từ NetworkManager
netstat -antup
Proto Recv-Q Send-Q Adresse locale          Adresse distante        Etat       PID/Program name    
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      1036/dnsmasq        
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      766/systemd-resolve
cat /run/systemd/resolve/resolv.conf 
nameserver 127.0.0.1

1

Tôi đã cố gắng tìm một giải pháp hợp lý và có vẻ như có nhiều cách tiếp cận khác nhau.

Tôi muốn ở lại nhiều nhất trong bố trí phân phối trong khi vẫn giữ tất cả các yêu cầu kinh doanh. Đây là những gì tôi đã thu thập xung quanh và thử nghiệm để hoạt động trên Ubuntu 18.04 và KDE neon sạch:

# Install required package and reconfigure service plans (i.e. disablesystemd-resolved, enable dnsmasq
sudo apt-get install dnsmasq
sudo systemctl disable systemd-resolved
sudo systemctl stop systemd-resolved
sudo systemctl enable dnsmasq

# These two lines should work on most environments, but .. :-) - so I kept them commented out for less experienced users
# Just add or change 'dns=dnsmasq' to your NetworkManager.conf to the section [main]
# and yes, the sed expression can be better :-)

#sudo cp /etc/NetworkManager/NetworkManager.conf /etc/NetworkManager/NetworkManager.conf.backup
#sudo bash -c 'cat /etc/NetworkManager/NetworkManager.conf.backup |sed -e "s/^dns=.*//"| sed -e "s/\[main\]/\[main\]\ndns=dnsmasq/" >/etc/NetworkManager/NetworkManager.conf'

# Restart NetworkManager to make the change above applied
sudo systemctl restart NetworkManager

# This removes the systemd resolv.conf link only if it has NetworkManager replacement :-)
ls /var/run/NetworkManager/resolv.conf && sudo rm /etc/resolv.conf

# And add NetworkManager's resolv.conf available for the system resolver
sudo ln -s /var/run/NetworkManager/resolv.conf /etc/resolv.conf

(xin lưu ý rằng sự khác biệt chung duy nhất với các câu trả lời ở trên là Trình quản lý mạng tự động xử lý các bài tập máy chủ DNS dnsmasq


hoạt động nhưng điều gì xảy ra khi trình quản lý mạng được nâng cấp với apt-get --upgrad
cmak.fr

Thành thật mà nói tôi không biết. Nó phụ thuộc vào những gì người bảo trì Ubuntu 18.04 quyết định. Nếu anh ấy / cô ấy giữ dịch vụ phân giải hệ thống bị vô hiệu hóa và sẽ không sửa đổi NetworkManager.conf (theo mặc định được giải quyết tương tác trong trường hợp có xung đột), thì nó có thể tồn tại cho đến khi Ubuntu 20.04 được sửa chữa.
Spam Venca B

0

Như bạn đã biết, Docker sao chép tập tin /etc/resolv.conf của máy chủ vào các thùng chứa nhưng loại bỏ bất kỳ máy chủ tên cục bộ nào.

Giải pháp của tôi cho vấn đề này là tiếp tục sử dụng systemd-decvdNetworkManager nhưng thêm dnsmasq và sử dụng nó để "chuyển tiếp" Docker chứa các truy vấn DNS sang systemd-decvd .

Hướng dẫn từng bước một:

  • Tạo /etc/resolv.conf một tệp "thực" sudo rm /etc/resolv.conf sudo touch /etc/resolv.conf
  • Tạo tập tin /etc/NetworkManager/conf.d/systemd-resolve-for-docker.conf để nói với NetworkManager thông báo cho systemd-decvd nhưng không chạm vào /etc/resolv.conf [main] # NetworkManager will push the DNS configuration to systemd-resolved dns=systemd-resolved # NetworkManager won’t ever write anything to /etc/resolv.conf rc-manager=unmanaged
  • Cài đặt dnsmasq sudo apt-get -y install dnsmasq
  • Định cấu hình dnsmasq trong /etc/dnsmasq.conf để nghe các truy vấn DNS đến từ Docker và sử dụng máy chủ tên systemd-decvd # Use interface docker0 interface=docker0 # Explicitly specify the address to listen on listen-address=172.17.0.1 # Looks like docker0 interface is not available when dnsmasq service starts so it fails. This option makes dynamically created interfaces work in the same way as the default. bind-dynamic # Set systemd-resolved DNS server server=127.0.0.53
  • Chỉnh sửa /etc/resolv.conf để sử dụng máy chủ tên systemd-decvd (127.0.0.53) và IP máy chủ (172.17.0.1) trong mạng Docker # systemd-resolvd name server nameserver 127.0.0.53 # docker host ip nameserver 172.17.0.1
  • Khởi động lại dịch vụ sudo service network-manager restart sudo service dnsmasq restart sudo service docker restart

Để biết thêm thông tin, hãy xem bài đăng của tôi (bằng tiếng Tây Ban Nha) https://rubensa.wordpress.com/2020/02/07/docker-no-usa-los-mismos-dns-que-el-host/


-1

Ubuntu 18.10

IMHO, nếu bạn đang chạy dnsmasq, bạn nên gán địa chỉ IP của mình thay vì lấy nó từ dhcp. Bằng cách này, bạn có thể vô hiệu hóa tất cả các giải pháp systemd cùng nhau.

  1. sudo apt-get cài đặt dnsmasq

  2. sudo systemctl vô hiệu hóa systemd-giải quyết

  3. sudo systemctl dừng systemd-giải quyết

  4. Chỉ định thủ công địa chỉ IP, cổng và gán địa chỉ IP cho máy của bạn dưới dạng DNS.

  5. cấu hình /etc/dnsmasq.conf (thực sự ... RTFM -> man dnsmasq.conf)

  6. sudo systemctl kích hoạt dnsmasq

  7. khởi động lại
  8. tình trạng hệ thống sudo dnsmasq

  9. trỏ dhcp trên máy chủ dhcp của bạn đến máy chủ dnsmasq mới sáng bóng của bạn (..if yumpto)


Tôi sẽ không thực hiện những gì bạn mô tả. Tôi muốn phần còn lại được phân giải systemd mặc định cho việc sử dụng NetworkManager trong tương lai.
cmak.fr
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.