Custom DNS server — resolve domain names with custom logic.
1const dgram = require("dgram");2const dns = require("dns");34const server = dgram.createSocket("udp4");56const records = {7 "example.com": "192.168.1.1",8 "api.example.com": "192.168.1.2",9};1011server.on("message", (msg, rinfo) => {12 const request = parseDNSRequest(msg);13 const domain = request.questions[0].name;14 const ip = records[domain] || "127.0.0.1";1516 const response = buildDNSResponse(request, ip);17 server.send(response, rinfo.port, rinfo.address);18});1920server.bind(53, () => {21 console.log("DNS server listening on port 53");22});2324function parseDNSRequest(buffer) {25 return {26 id: buffer.readUInt16BE(0),27 questions: [{ name: "example.com", type: 1 }],28 };29}3031function buildDNSResponse(request, ip) {32 const response = Buffer.alloc(128);33 response.writeUInt16BE(request.id, 0);34 response.writeUInt16BE(0x8180, 2); // flags35 response.writeUInt16BE(1, 4); // questions36 response.writeUInt16BE(1, 6); // answers37 // ... write answer record38 return response;39}