Custom DDNS - XIYO/asuswrt-merlin.ng-kr GitHub Wiki

μ°Έκ³ : 버전 384.7둜 In-a-Dyn으둜 μ „ν™˜ν•œ ν›„μ—λŠ” 이 λ‚΄μš©μ΄ μˆ˜μ •λ˜μ–΄μ•Ό ν•  수 있으며, 이 νŽ˜μ΄μ§€λŠ” DDNS-services와 병합될 수 μžˆμŠ΅λ‹ˆλ‹€.

μ†Œκ°œ

DDNS (동적 DNS) μ„œλΉ„μŠ€λ₯Ό "μ‚¬μš©μž μ •μ˜"둜 μ„€μ •ν•˜λ©΄, ddns-start μ‚¬μš©μž 슀크립트λ₯Ό 톡해 μ—…λ°μ΄νŠΈ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ™„μ „νžˆ μ œμ–΄ν•  수 μžˆμŠ΅λ‹ˆλ‹€(μ‚¬μš©μž μ •μ˜ μ—…λ°μ΄νŠΈ ν΄λΌμ΄μ–ΈνŠΈλ₯Ό μ‹€ν–‰ν•˜κ±°λ‚˜, μ œκ³΅μ—…μ²΄μ˜ μ—…λ°μ΄νŠΈ URL에 λŒ€ν•œ κ°„λ‹¨ν•œ "wget" μ‹€ν–‰). ddns-start μŠ€ν¬λ¦½νŠΈλŠ” 인수둜 WAN IPλ₯Ό μ „λ‹¬λ°›μŠ΅λ‹ˆλ‹€.

μ‚¬μš©μž μ •μ˜ μŠ€ν¬λ¦½νŠΈλŠ” ν”„λ‘œμ„ΈμŠ€μ˜ 성곡 λ˜λŠ” μ‹€νŒ¨λ₯Ό νŽŒμ›¨μ–΄μ— μ•Œλ €μ•Ό ν•©λ‹ˆλ‹€. 이λ₯Ό μœ„ν•΄ μŠ€ν¬λ¦½νŠΈλŠ” λ‹€μŒμ„ μ‹€ν–‰ν•΄μ•Ό ν•©λ‹ˆλ‹€:

/sbin/ddns_custom_updated 0 λ˜λŠ” 1

(μ—¬κΈ°μ„œ 0 = μ‹€νŒ¨, 1 = 성곡적인 μ—…λ°μ΄νŠΈ)

성곡 λ˜λŠ” μ‹€νŒ¨λ₯Ό νŒλ‹¨ν•  수 μ—†λ‹€λ©΄, νŽŒμ›¨μ–΄κ°€ μ§€μ†μ μœΌλ‘œ μ—…λ°μ΄νŠΈλ₯Ό μ‹œλ„ν•˜μ§€ μ•Šλ„λ‘ μ„±κ³΅μœΌλ‘œ λ³΄κ³ ν•˜μ„Έμš”.

λ§ˆμ§€λ§‰μœΌλ‘œ, λͺ¨λ“  μ‚¬μš©μž 슀크립트처럼, 관리 -> μ‹œμŠ€ν…œμ—μ„œ μ‚¬μš©μž μ •μ˜ 슀크립트 및 μ„€μ • 파일 지원 μ˜΅μ…˜μ΄ ν™œμ„±ν™”λ˜μ–΄ μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

μ‚¬μš©μž μ •μ˜ 슀크립트λ₯Ό ν™œμ„±ν™”ν•œ ν›„, μ—…λ°μ΄νŠΈ 슀크립트의 λ‚΄μš©μ„ /jffs/scripts/ddns-start에 λ„£κ³  WAN -> DDNSμ—μ„œ DDNS ν΄λΌμ΄μ–ΈνŠΈλ₯Ό ν™œμ„±ν™”ν•˜κ³  μ„œλ²„λ‘œ μ‚¬μš©μž μ •μ˜λ₯Ό μ‚¬μš©ν•˜μ„Έμš”.

Double NAT μƒν™©μ—μ„œ DDNS μ‚¬μš©

ISP의 λΌμš°ν„° 뒀에 ASUS λΌμš°ν„°κ°€ Double NAT μƒνƒœμ— μžˆλ‹€λ©΄, μ‚¬μš©μž μ •μ˜ DDNS μ„€μ •μ—μ„œ μ „λ‹¬λœ IP λŒ€μ‹  μ™ΈλΆ€ IPλ₯Ό 검색해야 ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ—…λ°μ΄νŠΈ μŠ€ν¬λ¦½νŠΈμ—μ„œ IPκ°€ μ‚¬μš©λ˜λŠ” 쀄을 μ°Ύμ•„

IP=${1}

μ™ΈλΆ€ μ†ŒμŠ€μ—μ„œ IPλ₯Ό κ°€μ Έμ˜€λ„λ‘ λ³€κ²½ν•˜μ„Έμš”.

IP="$(curl -fs4 https://myip.dnsomatic.com/)"

μœ„ μ˜ˆμ œλŠ” dnsomatic을 μ‚¬μš©ν•˜μ§€λ§Œ, ν•„μš”μ— 따라 λ‹€λ₯Έ μ†ŒμŠ€λ‘œ μˆ˜μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. OpenWrt μœ„ν‚€μ—μ„œ 여기에 λͺ©λ‘μ„ μ œκ³΅ν•©λ‹ˆλ‹€.

VPNκ³Ό ν•¨κ»˜ DDNS μ‚¬μš©

VPN IP둜 DDNSλ₯Ό λ¦¬λ””λ ‰μ…˜ν•˜λŠ” 슀크립트 μ˜ˆμ œλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€. /jffs/scripts/openvpn-event에 λ‹€μŒμ„ μΆ”κ°€ν•˜μ„Έμš”:

#!/bin/sh

if [ "$script_type" = "up" ] && [ "$vpn_interface" = "tun11" ]; then
	# OpenVPN 터널은 openvpn-event μŠ€ν¬λ¦½νŠΈκ°€ μ™„λ£Œλ  λ•ŒκΉŒμ§€ 열리지 μ•ŠμœΌλ―€λ‘œ, λ‚˜λ¨Έμ§€λ₯Ό λ°±κ·ΈλΌμš΄λ“œ μ‰˜μ—μ„œ μ‹€ν–‰
	(
		# VPN 터널이 μ„€μ •λ˜κ±°λ‚˜ νƒ€μž„μ•„μ›ƒ μ œν•œμ— 도달할 λ•ŒκΉŒμ§€ 반볡
		COUNTER=0
		LIMIT=10
		while [ "$COUNTER" -le "$LIMIT" ] && ! ifconfig | grep -Fq "tun11"; do
			sleep 1
			COUNTER=$((COUNTER + 1))
		done

		# μ—¬κΈ°μ—μ„œ DDNSλ₯Ό μ—…λ°μ΄νŠΈν•˜μ„Έμš”, μ•„λž˜λŠ” λͺ‡ κ°€μ§€ μ˜ˆμ‹œ

		# VPN IP둜 dyndns μ—…λ°μ΄νŠΈ (384.7 이전)
		VPNIP="$(curl -fs4 http://myip.dnsomatic.com/)"
		ez-ipupdate -

S "dyndns" -u "user:password" -h "host.dyndns.org" -a "$VPNIP"

		# inadyn μ‚¬μš© (384.7+)
		inadyn --once -f "/jffs/inadyn.conf"

		# curl μ‚¬μš©
		API="xxxxxxxxxxxxxxxx" # afraid.org API ν‚€
		curl -fs -o /dev/null "https://freedns.afraid.org/dynamic/update.php?${API}"
	) &
fi

그리고 μ‹€ν–‰ κ°€λŠ₯ν•˜λ„λ‘ μ„€μ •ν•˜μ„Έμš”.

chmod +x /jffs/scripts/openvpn-event

νŠΉμ • μ œκ³΅μ—…μ²΄λ₯Ό μœ„ν•œ 슀크립트

λ§Žμ€ DDNS μ œκ³΅μ—…μ²΄ 및 DNS μ„œλΉ„μŠ€λ₯Ό μœ„ν•œ μƒ˜ν”Œ μŠ€ν¬λ¦½νŠΈλŠ” μ—¬κΈ°μ—μ„œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.