Adguardhome: DHCP μ˜΅μ…˜ ν™•μž₯/λͺ…ν™•ν™”

에 λ§Œλ“  2021λ…„ 01μ›” 20일  Β·  3μ½”λ©˜νŠΈ  Β·  좜처: AdguardTeam/AdGuardHome

μ „λ‹΄ν•˜μ§€λ§Œ μ†Œκ·œλͺ¨ μœ μ§€ 관리 νŒ€μ΄ μžˆλŠ” μ˜€ν”ˆ μ†ŒμŠ€ ν”„λ‘œμ νŠΈλ‘œμ„œ 문제λ₯Ό ν•΄κ²°ν•˜λŠ” 데 μ‹œκ°„μ΄ 였래 걸릴 수 μžˆμœΌλ―€λ‘œ 인내심을 κ°–κ³  μ΅œλŒ€ν•œ 빨리 μ—°λ½λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€.

μ „μ œ 쑰건

  • [x] μ΅œμ‹  버전을 μ‹€ν–‰ μ€‘μž…λ‹ˆλ‹€.
  • [x] λ¬Έμ„œλ₯Ό ν™•μΈν–ˆμ§€λ§Œ 닡이 μ—†μŠ΅λ‹ˆλ‹€.
  • [x] 이 λ¬Έμ œκ°€ 아직 μ œμΆœλ˜μ§€ μ•Šμ•˜λŠ”μ§€ ν™•μΈν–ˆμŠ΅λ‹ˆλ‹€.

문제 μ„€λͺ…

κΈ°λŠ₯ μš”μ²­μ΄ λ¬Έμ œμ™€ κ΄€λ ¨λ˜μ–΄ μžˆμŠ΅λ‹ˆκΉŒ? λ¬Έμ œκ°€ 무엇인지 λͺ…ν™•ν•˜κ³  κ°„κ²°ν•œ μ„€λͺ…을 μΆ”κ°€ν•˜μ„Έμš”.

둜컬 도메인을 더 많이 μ œμ–΄ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€. 이것은 ν˜„μž¬ lan ν•˜λ“œ μ½”λ”©λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. #2393도 μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.

λ˜ν•œ dhcpv4 ν•„λ“œ μ˜΅μ…˜ 에 λŒ€ν•œ ip λ˜λŠ” hex μš”κ΅¬ 사항이 ν˜Όλž€μŠ€λŸ½μŠ΅λ‹ˆλ‹€. 이것은 숫자 κ°’/μ˜΅μ…˜λ§Œ μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. DHCP options/RFC2132 의 μ˜΅μ…˜ 15λ₯Ό μ‚¬μš©ν•˜μ—¬ DHCP ν΄λΌμ΄μ–ΈνŠΈμ— 도메인을 λΈŒλ‘œλ“œμΊμŠ€νŠΈν•˜λ €κ³  ν–ˆμ§€λ§Œ lan λ¬Έμžμ—΄μ„ μ„€μ •ν•  수 μžˆλŠ” 방법이 μ—†μŠ΅λ‹ˆλ‹€. ASCII/UTF-8 μ½”λ“œ 포인트둜 μ‹œλ„ν–ˆμ§€λ§Œ ꡬ문 뢄석 방법을 κ³ λ €ν•  λ•Œ μ˜λ―Έκ°€ μ—†μŠ΅λ‹ˆλ‹€.

https://github.com/AdguardTeam/AdGuardHome/blob/7fab31beaeb8c7d1c9892746bbf37e99d4f9dc01/internal/dhcpd/dhcpd.go#L289

int 만 λ°˜ν™˜ν•˜λŠ” 것 κ°™μŠ΅λ‹ˆκΉŒ?

이 μ‹œμ μ—μ„œ 이것은 λ‚΄ λŠ₯λ ₯ μˆ˜μ€€μ„ 훨씬 λ›°μ–΄ λ„˜μŠ΅λ‹ˆλ‹€.

μ œμ•ˆ 된 해법

μ›ν•˜λŠ” μ†”λ£¨μ…˜μ„ λͺ…ν™•ν•˜κ³  κ°„κ²°ν•˜κ²Œ μ„€λͺ…

dnsmasq 와 μœ μ‚¬ν•œ dhcpv4 ν•„λ“œμ— 더 λ§Žμ€ μ˜΅μ…˜μ„ μΆ”κ°€ν•©λ‹ˆλ‹€. 이 μƒ˜ν”Œ 섀정은

ν˜„μž¬ AGHλ₯Ό DHCP 및 DNS μ„œλ²„λ‘œ μ‚¬μš©ν•  λ•Œ lan 둜컬 도메인이 잘 μž‘λ™ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ local_machine.lan λŒ€ν•œ μΏΌλ¦¬λŠ” AGHμ—μ„œ 둜컬둜 μ •ν™•ν•˜κ²Œ μ‘λ‹΅ν•˜μ§€λ§Œ λ‚΄ μ„€μ •μ˜ μ—…μŠ€νŠΈλ¦Ό 인터넷 μ„œλ²„μ—λ„ 전달 λ©λ‹ˆλ‹€. 이것은 μ•½κ°„ ν˜Όλž€μŠ€λŸ½μŠ΅λ‹ˆλ‹€. [/lan/]192.168.0.2 , μ—¬κΈ°μ„œ 192.168.0.2 λŠ” AGH μ‹œμŠ€ν…œ μ£Όμ†Œλ₯Ό μ—…μŠ€νŠΈλ¦Ό DNS μ„œλ²„ λͺ©λ‘μ— μΆ”κ°€ν•˜λ©΄ 이 λ¬Έμ œκ°€ ν•΄κ²°λ©λ‹ˆλ‹€. μš”μ²­μ΄ 더 이상 μ „λ‹¬λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 0.0.0.0 λ˜λŠ” 127.0.0.1 도 μž‘λ™ν•˜μ§€λ§Œ μ—¬κΈ°μ„œ 무엇을 ν•˜κ³  μžˆλŠ”μ§€ 잘 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€. 적어도 그듀은 더 이상 "λˆ„μΆœ"λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. #2582도 μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.

λΆ€μž‘μš©μœΌλ‘œ λ‹€μŒκ³Ό 같이 μ •μ§€ν•˜κ³  κ²°κ΅­ μ‹œκ°„μ΄ μ΄ˆκ³Όλ©λ‹ˆλ‹€.

# Before, *without* [/lan/] filter
$ host local_machine.lan
local_machine.lan has address 192.168.0.50 # IMMEDIATE
Host local_machine.lan not found: 3(NXDOMAIN) # Almost immediate
#  ^ NXDOMAIN from upstream internet DNS server.
# Of course it doesn't know that domain.

# Now *with* the custom [/lan/] upstream DNS in place:
$ host local_machine.lan
local_machine.lan has address 192.168.0.50  # Again, IMMEDIATE
;; connection timed out; no servers could be reached  # 10s, then timeout

μƒˆλ‘œμš΄ [/lan/] κ°€ 있으면 ssh 와 같은 것은 μ—¬μ „νžˆ β€‹β€‹μ¦‰μ‹œ μž‘λ™ν•©λ‹ˆλ‹€. 첫 번째 IPκ°€ λ„μ°©ν•œ ν›„ μ‹€ν–‰λ˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

dnsmasq -like local λͺ…령을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆκΉŒ? μƒ˜ν”Œ 섀정에 λŒ€ν•œ μœ„μ˜ 링크λ₯Ό μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€. /etc/dnsmasq.conf μ—μ„œ λͺ…λ Ή

local=/mydomain/

μ ˆλŒ€ μ™ΈλΆ€λ‘œ μœ μΆœλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ™„λ²½ν•œ! κ²Œλ‹€κ°€,

domain=mydomain

μžˆλ‹€λŠ” 것은 λ†€λΌμš΄ μΌμž…λ‹ˆλ‹€. domain-needed -등가물을 던질 수 μžˆμŠ΅λ‹ˆκΉŒ?

고렀된 λŒ€μ•ˆ

κ³ λ €ν•œ λŒ€μ²΄ μ†”λ£¨μ…˜ λ˜λŠ” κΈ°λŠ₯에 λŒ€ν•œ λͺ…ν™•ν•˜κ³  κ°„κ²°ν•œ μ„€λͺ….

이 μ‹œμ μ—μ„œ #2514와 같은 섀정을 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λͺ¨λ“  dnsmasq -λ™λ“±ν•œ μ˜΅μ…˜μ΄ ν•„μš”ν•œ 경우 DNS+DHCP dnsmasq μ„œλ²„λ₯Ό κΈ°λ³Έ μ„œλ²„λ‘œ μ‹€ν–‰ν•˜κΈ°λ§Œ ν•˜λ©΄ λ©λ‹ˆλ‹€. μ—¬κΈ°μ—μ„œ AGH μΈμŠ€ν„΄μŠ€(DHCP μ—†μŒ)λ₯Ό μœ μΌν•œ μ—…μŠ€νŠΈλ¦Ό DNS둜 μ„€μ •ν•©λ‹ˆλ‹€. 잘 μž‘λ™ν•΄μ•Ό ν•©λ‹ˆλ‹€. 단지 더 λ§Žμ€ 것듀이 ν•„μš”ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, ν•œ μ»΄ν“¨ν„°μ—μ„œ μ‹€ν–‰ν•˜λŠ” 경우 AGHλŠ” 53κ³Ό λ‹€λ₯Έ ν¬νŠΈκ°€ ν•„μš”ν•©λ‹ˆλ‹€. network_mode: host μ‹€ν–‰ν•˜μ§€ μ•ŠμœΌλ©΄ μΆ©λΆ„νžˆ μ‰½μŠ΅λ‹ˆλ‹€. DHCPλ₯Ό μ‚¬μš©ν•˜λŠ” κ²½μš°μ—λ§Œ ν•„μš”ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 이 섀정은 ν•΄λ‹Ή λ¬Έμ œμ— μ„€λͺ…λœ λŒ€λ‘œ add-mac / add-subnet "ν•„μš”"ν•©λ‹ˆλ‹€.

μΆ”κ°€ 정보

여기에 λ¬Έμ œμ— λŒ€ν•œ λ‹€λ₯Έ μ»¨ν…μŠ€νŠΈλ₯Ό μΆ”κ°€ν•˜μ‹­μ‹œμ˜€.
Medium bug

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

이미 μ§€μ ν–ˆλ“―μ΄ 둜컬 λ„λ©”μΈμ˜ ꡬ성은 이미 κ³„νšλ˜μ–΄ 있으며 μ˜΅μ…˜ ꡬ문도 κ°œμ„ λ˜μ—ˆμŠ΅λ‹ˆλ‹€. ν˜„μž¬ 결함이 μžˆλŠ” μ˜΅μ…˜ ꡬ문으둜 μ˜΅μ…˜μ„ μ„€μ •ν•˜λŠ” 방법에 λŒ€ν•œ μ˜ˆλŠ” #2385 및 [이 주석]을 μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.

μ—…μŠ€νŠΈλ¦Όμ— 둜컬 도메인 μš”μ²­μ„ μ „λ‹¬ν•˜μ§€λ§Œ 버그이며, μš°λ¦¬λŠ” 문제λ₯Ό ν•΄κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ‹ κ³  κ°μ‚¬ν•©λ‹ˆλ‹€!

λͺ¨λ“  3 λŒ“κΈ€

이미 μ§€μ ν–ˆλ“―μ΄ 둜컬 λ„λ©”μΈμ˜ ꡬ성은 이미 κ³„νšλ˜μ–΄ 있으며 μ˜΅μ…˜ ꡬ문도 κ°œμ„ λ˜μ—ˆμŠ΅λ‹ˆλ‹€. ν˜„μž¬ 결함이 μžˆλŠ” μ˜΅μ…˜ ꡬ문으둜 μ˜΅μ…˜μ„ μ„€μ •ν•˜λŠ” 방법에 λŒ€ν•œ μ˜ˆλŠ” #2385 및 [이 주석]을 μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.

μ—…μŠ€νŠΈλ¦Όμ— 둜컬 도메인 μš”μ²­μ„ μ „λ‹¬ν•˜μ§€λ§Œ 버그이며, μš°λ¦¬λŠ” 문제λ₯Ό ν•΄κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ‹ κ³  κ°μ‚¬ν•©λ‹ˆλ‹€!

μ—…μŠ€νŠΈλ¦Όμ— 둜컬 도메인 μš”μ²­μ„ μ „λ‹¬ν•˜μ§€λ§Œ 버그이며, μš°λ¦¬λŠ” 문제λ₯Ό ν•΄κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ‹ κ³  κ°μ‚¬ν•©λ‹ˆλ‹€!

감사 ν•΄μš”! 이 λ¬Έμ œλŠ” 주둜 λ‹€λ₯Έ λ¬Έμ œμ— κ΄€ν•œ κ²ƒμ΄λ―€λ‘œ 이에 λŒ€ν•œ μ „μš© 문제λ₯Ό μ›ν•˜μ‹œλ©΄ μ•Œλ €μ£Όμ‹­μ‹œμ˜€. λ˜ν•œ 이 λ¬Έμ œλŠ” λ³΅μ œν•  수 μžˆμ„ 만큼 μ‰¬μ›Œμ•Ό ν•˜μ§€λ§Œ μΆ”κ°€ 정보가 ν•„μš”ν•œ 경우 μ•Œλ €μ£Όμ‹­μ‹œμ˜€.

  1. AGHλ₯Ό DNS/DHCP μ„œλ²„λ‘œ μ‚¬μš©
  2. hostname.lan λ₯Ό μ‚¬μš©ν•˜μ—¬ 둜컬 μ‹œμŠ€ν…œμ„ μΏΌλ¦¬ν•©λ‹ˆλ‹€(예 dig
  3. 쿼리 λ‘œκ·Έμ—μ„œ ν•΄λ‹Ή μš”μ²­μ΄ μ—…μŠ€νŠΈλ¦Ό μ„œλ²„λ‘œ μ΄λ™ν•˜λŠ” 방식을 κ΄€μ°°ν•©λ‹ˆλ‹€.

hex μ‚¬μš©μ— λŒ€ν•œ κ·€ν•˜μ˜ μ˜κ²¬μ— λŒ€ν•œ λ§ν¬λŠ” 상황을 λͺ…ν™•ν•˜κ²Œ ν•˜μ§€λ§Œ 그것이 μ–΄λ–»κ²Œ μž‘λ™ν•˜λŠ”μ§€ μ•Œκ³  μžˆμ—ˆμŠ΅λ‹ˆλ‹€. λ‚΄κ°€ κ²ͺκ³ μžˆλŠ” λ¬Έμ œλŠ” DHCP에 λŒ€ν•œ μ˜΅μ…˜ 15κ°€ int/numberκ°€ μ•„λ‹Œ λ¬Έμžμ—΄μ΄λΌλŠ” κ²ƒμž…λ‹ˆλ‹€. λ‚΄κ°€ λ³Ό μˆ˜μžˆλŠ” ν•œ hex 값은 ASCII λ˜λŠ” κΈ°νƒ€λ‘œ ν•΄μ„λ˜μ§€ μ•Šκ³  μ‹­μ§„μˆ˜ μ •μˆ˜λ‘œ ν•΄μ„λ˜κΈ° λ•Œλ¬Έμ— λ¬Έμžμ—΄ 값을 μ „ν˜€ μ„€μ •ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

ν…μŠ€νŠΈμ— hex λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ˜ˆλŠ” #2388을 μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.

hex.DecodeString λŠ” 16μ§„μˆ˜ λ¬Έμžμ—΄μ—μ„œ λ””μ½”λ”©λœ λ°”μ΄νŠΈ 쑰각과 였λ₯˜λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰