Ganz einfach!
Erst mal einen neuen Netzwerkadapter hinzufügen, damit 8.8.8.8 auf Localhost geroutet wird.
Dazu Geräte-Manager öffnen, irgendwas auswählen sonst fehlt die Aktion.
Dann Aktion -> Legacyhardware hinzufügen -> aus einer Liste wählen -> Netzwerkadapter -> Microsoft -> Microsoft Loopbackadapter.
Dann dem PC die 8.8.8.8 zuweisen unter Systemsteuerung -> Netzwerk- und Freigabecenter -> Adaptereinstellungen -> Rechtsklick auf den neu-erstellten Loopbackadapter -> Eigenschaften -> IPv4 -> Eigenschaften -> Folgende IP-Adresse verwenden: 8.8.8.8 und Subnetzmaske 255.255.255.255.
Und dann nur noch ein kleines Programm schreiben, z.B. mit Node.js.
Dazu verwende ich noch die Bibliothek dns-packet zum Parsen und Erstellen der DNS-Pakete. Zu installieren mit: npm i dns-packet.
Hier ein kleines Beispiel was zum A-Record von google.com die IP 1.2.3.4 zurückgibt:
PHP-Code:
let dgram = require('dgram')
let dnsPacket = require('dns-packet')
let gDns = dgram.createSocket('udp4')
let server = dgram.createSocket('udp4')
let id = 0
let map = new Map()
server.on('message', (msg, rinfo) => {
let packet
try {
packet = dnsPacket.decode(msg)
} catch (e) {
return
}
if (Array.isArray(packet.questions)) {
for (let question of packet.questions) {
if (question.name === 'google.com' && question.class === 'IN' && question.type === 'A') {
server.send(dnsPacket.encode({
type: 'response',
id: packet.id,
flags: dnsPacket.RECURSION_AVAILABLE | dnsPacket.RECURSION_DESIRED,
questions: packet.questions,
answers: [{
name: 'google.com',
type: 'A',
ttl: 248,
class: 'IN',
flush: false,
data: '1.2.3.4',
}],
}), rinfo.port, rinfo.address)
return
}
}
}
map.set(++id, { id: packet.id, rinfo })
packet.id = id
gDns.send(dnsPacket.encode(packet))
})
gDns.on('message', msg => {
let packet
try {
packet = dnsPacket.decode(msg)
} catch (e) {
return
}
let { id, rinfo } = map.get(packet.id)
if (rinfo) {
map.delete(packet.id)
packet.id = id
server.send(dnsPacket.encode(packet), rinfo.port, rinfo.address)
}
})
gDns.connect(53, '8.8.4.4', () => {
server.bind(53, '8.8.8.8')
})
Und wenn man jetzt die Datei startet (>node proxy.js) und nslookup macht: