fix dns转发

This commit is contained in:
anlicheng 2026-04-13 16:25:15 +08:00
parent 5d192332b9
commit af140f7da6

View File

@ -693,7 +693,7 @@ actor SDLContextActor {
} }
} }
// // , Tun
private func dealTunPacket(packet: IPPacket) async { private func dealTunPacket(packet: IPPacket) async {
let networkAddr = self.config.networkAddress let networkAddr = self.config.networkAddress
let dstIp = packet.header.destination let dstIp = packet.header.destination
@ -704,7 +704,8 @@ actor SDLContextActor {
self.provider.packetFlow.writePacketObjects([nePacket]) self.provider.packetFlow.writePacketObjects([nePacket])
} }
// dns // dns
else if DNSHelper.isDnsRequestPacket(ipPacket: packet), case .udp(let udpPacket) = packet.transportPacket { else if DNSHelper.isDnsRequestPacket(ipPacket: packet) {
if case .udp(let udpPacket) = packet.transportPacket {
// offset, dnsudp // offset, dnsudp
let payloadOffset = udpPacket.payloadOffset let payloadOffset = udpPacket.payloadOffset
let dnsParser = DNSParser(data: packet.data, offset: payloadOffset) let dnsParser = DNSParser(data: packet.data, offset: payloadOffset)
@ -714,12 +715,22 @@ actor SDLContextActor {
SDLLogger.log("[SDLContext] get cloud dns request: \(name)") SDLLogger.log("[SDLContext] get cloud dns request: \(name)")
self.dnsClient?.forward(ipPacketData: packet.data) self.dnsClient?.forward(ipPacketData: packet.data)
} }
//
else if let exitNode = config.exitNode {
let exitNodeIp = exitNode.exitNodeIp
SDLLogger.log("[SDLContext] dstIp: \(packet.header.destination.asIpAddress()), use exit_node: \(exitNodeIp.asIpAddress())")
// arpmac
if let dstMac = await self.arpServer.query(ip: exitNodeIp) {
await self.routeLayerPacket(dstMac: dstMac, type: .ipv4, data: packet.data)
}
else {
try? await self.arpServer.arpRequest(targetIp: exitNodeIp, use: self.quicClient)
}
}
// dnsudppayload // dnsudppayload
else { else {
//
let dnsPayload = Data(packet.data[payloadOffset..<packet.data.count])
SDLLogger.log("[SDLContext] get local dns request: \(name)") SDLLogger.log("[SDLContext] get local dns request: \(name)")
let dnsPayload = Data(packet.data[payloadOffset..<packet.data.count])
let tracker = DNSLocalClient.DNSTracker(transactionID: dnsMessage.transactionID, let tracker = DNSLocalClient.DNSTracker(transactionID: dnsMessage.transactionID,
clientIP: packet.header.source, clientIP: packet.header.source,
clientPort: udpPacket.srcPort, clientPort: udpPacket.srcPort,
@ -728,6 +739,7 @@ actor SDLContextActor {
} }
} }
} }
}
else { else {
// FlowSession // FlowSession
// //
@ -739,7 +751,6 @@ actor SDLContextActor {
// //
// ip // ip
if SDLUtil.inSameNetwork(ip: dstIp, compareIp: networkAddr.ip, maskLen: networkAddr.maskLen) { if SDLUtil.inSameNetwork(ip: dstIp, compareIp: networkAddr.ip, maskLen: networkAddr.maskLen) {
SDLLogger.log("[SDLContext] read Tun packet step 3, data: \(Array(packet.data))", for: .trace)
// arpmac // arpmac
if let dstMac = await self.arpServer.query(ip: dstIp) { if let dstMac = await self.arpServer.query(ip: dstIp) {
SDLLogger.log("[SDLContext] dstIp: \(dstIp.asIpAddress()), dst_mac is: \(SDLUtil.formatMacAddress(mac: dstMac))", for: .trace) SDLLogger.log("[SDLContext] dstIp: \(dstIp.asIpAddress()), dst_mac is: \(SDLUtil.formatMacAddress(mac: dstMac))", for: .trace)
@ -754,8 +765,7 @@ actor SDLContextActor {
try? await self.arpServer.arpRequest(targetIp: dstIp, use: self.quicClient) try? await self.arpServer.arpRequest(targetIp: dstIp, use: self.quicClient)
} }
} }
// // ,
//
else if let exitNode = config.exitNode { else if let exitNode = config.exitNode {
let exitNodeIp: UInt32 = exitNode.exitNodeIp let exitNodeIp: UInt32 = exitNode.exitNodeIp
SDLLogger.log("[SDLContext] dstIp: \(packet.header.destination.asIpAddress()), use exit_node: \(exitNodeIp.asIpAddress())") SDLLogger.log("[SDLContext] dstIp: \(packet.header.destination.asIpAddress()), use exit_node: \(exitNodeIp.asIpAddress())")