fix dns client
This commit is contained in:
parent
9d3a380063
commit
abfc35aa7d
@ -11,7 +11,7 @@ import NIOPosix
|
|||||||
|
|
||||||
// 处理和sn-server服务器之间的通讯
|
// 处理和sn-server服务器之间的通讯
|
||||||
@available(macOS 14, *)
|
@available(macOS 14, *)
|
||||||
actor DNSClient {
|
actor SDLDNSClientActor {
|
||||||
private let group = MultiThreadedEventLoopGroup(numberOfThreads: 1)
|
private let group = MultiThreadedEventLoopGroup(numberOfThreads: 1)
|
||||||
private let asyncChannel: NIOAsyncChannel<AddressedEnvelope<ByteBuffer>, AddressedEnvelope<ByteBuffer>>
|
private let asyncChannel: NIOAsyncChannel<AddressedEnvelope<ByteBuffer>, AddressedEnvelope<ByteBuffer>>
|
||||||
private let (writeStream, writeContinuation) = AsyncStream.makeStream(of: Data.self, bufferingPolicy: .unbounded)
|
private let (writeStream, writeContinuation) = AsyncStream.makeStream(of: Data.self, bufferingPolicy: .unbounded)
|
||||||
@ -101,7 +101,7 @@ actor DNSClient {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extension DNSClient {
|
extension SDLDNSClientActor {
|
||||||
|
|
||||||
struct Helper {
|
struct Helper {
|
||||||
static let dnsServer: String = "100.100.100.100"
|
static let dnsServer: String = "100.100.100.100"
|
||||||
@ -44,7 +44,7 @@ actor SDLTunnelProviderActor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 网络改变时需要重新配置网络信息
|
// 网络改变时需要重新配置网络信息
|
||||||
func setNetworkSettings(devAddr: SDLDevAddr, dnsServer: String) async throws {
|
func setNetworkSettings(devAddr: SDLDevAddr, dnsServer: String) async throws -> String {
|
||||||
let netAddress = SDLNetAddress(ip: devAddr.netAddr, maskLen: UInt8(devAddr.netBitLen))
|
let netAddress = SDLNetAddress(ip: devAddr.netAddr, maskLen: UInt8(devAddr.netBitLen))
|
||||||
let routes = [
|
let routes = [
|
||||||
Route(dstAddress: netAddress.networkAddress, subnetMask: netAddress.maskAddress),
|
Route(dstAddress: netAddress.networkAddress, subnetMask: netAddress.maskAddress),
|
||||||
@ -74,6 +74,8 @@ actor SDLTunnelProviderActor {
|
|||||||
networkSettings.ipv4Settings = ipv4Settings
|
networkSettings.ipv4Settings = ipv4Settings
|
||||||
// 网卡配置设置必须成功
|
// 网卡配置设置必须成功
|
||||||
try await self.provider.setTunnelNetworkSettings(networkSettings)
|
try await self.provider.setTunnelNetworkSettings(networkSettings)
|
||||||
|
|
||||||
|
return netAddress.ipAddress
|
||||||
}
|
}
|
||||||
|
|
||||||
// 开始读取数据, 用单独的线程处理packetFlow
|
// 开始读取数据, 用单独的线程处理packetFlow
|
||||||
|
|||||||
@ -52,9 +52,8 @@ public class SDLContext {
|
|||||||
var superClientActor: SDLSuperClientActor?
|
var superClientActor: SDLSuperClientActor?
|
||||||
var providerActor: SDLTunnelProviderActor
|
var providerActor: SDLTunnelProviderActor
|
||||||
var puncherActor: SDLPuncherActor
|
var puncherActor: SDLPuncherActor
|
||||||
|
|
||||||
// dns的client对象
|
// dns的client对象
|
||||||
var dnsClient: DNSClient?
|
var dnsClientActor: SDLDNSClientActor?
|
||||||
|
|
||||||
// 数据包读取任务
|
// 数据包读取任务
|
||||||
private var readTask: Task<(), Never>?
|
private var readTask: Task<(), Never>?
|
||||||
@ -258,7 +257,7 @@ public class SDLContext {
|
|||||||
private func startDnsClient() async throws {
|
private func startDnsClient() async throws {
|
||||||
let remoteDnsServer = config.remoteDnsServer
|
let remoteDnsServer = config.remoteDnsServer
|
||||||
let dnsSocketAddress = try SocketAddress.makeAddressResolvingHost(remoteDnsServer, port: 15353)
|
let dnsSocketAddress = try SocketAddress.makeAddressResolvingHost(remoteDnsServer, port: 15353)
|
||||||
self.dnsClient = try await DNSClient(dnsServerAddress: dnsSocketAddress, logger: self.logger)
|
self.dnsClientActor = try await SDLDNSClientActor(dnsServerAddress: dnsSocketAddress, logger: self.logger)
|
||||||
|
|
||||||
try await withThrowingTaskGroup(of: Void.self) { group in
|
try await withThrowingTaskGroup(of: Void.self) { group in
|
||||||
defer {
|
defer {
|
||||||
@ -266,11 +265,11 @@ public class SDLContext {
|
|||||||
}
|
}
|
||||||
|
|
||||||
group.addTask {
|
group.addTask {
|
||||||
try await self.dnsClient?.start()
|
try await self.dnsClientActor?.start()
|
||||||
}
|
}
|
||||||
|
|
||||||
group.addTask {
|
group.addTask {
|
||||||
if let packetFlow = self.dnsClient?.packetFlow {
|
if let packetFlow = self.dnsClientActor?.packetFlow {
|
||||||
for await packet in packetFlow {
|
for await packet in packetFlow {
|
||||||
let nePacket = NEPacket(data: packet, protocolFamily: 2)
|
let nePacket = NEPacket(data: packet, protocolFamily: 2)
|
||||||
await self.providerActor.writePackets(packets: [nePacket])
|
await self.providerActor.writePackets(packets: [nePacket])
|
||||||
@ -320,7 +319,9 @@ public class SDLContext {
|
|||||||
|
|
||||||
// 服务器分配的tun网卡信息
|
// 服务器分配的tun网卡信息
|
||||||
do {
|
do {
|
||||||
try await self.providerActor.setNetworkSettings(devAddr: self.devAddr, dnsServer: DNSClient.Helper.dnsServer)
|
let ipAddress = try await self.providerActor.setNetworkSettings(devAddr: self.devAddr, dnsServer: SDLDNSClientActor.Helper.dnsServer)
|
||||||
|
await self.noticeClient?.send(data: NoticeMessage.ipAdress(ip: ipAddress))
|
||||||
|
|
||||||
self.startReader()
|
self.startReader()
|
||||||
} catch let err {
|
} catch let err {
|
||||||
self.logger.log("[SDLContext] setTunnelNetworkSettings get error: \(err)", level: .error)
|
self.logger.log("[SDLContext] setTunnelNetworkSettings get error: \(err)", level: .error)
|
||||||
@ -386,7 +387,9 @@ public class SDLContext {
|
|||||||
|
|
||||||
// 服务器分配的tun网卡信息
|
// 服务器分配的tun网卡信息
|
||||||
do {
|
do {
|
||||||
try await self.providerActor.setNetworkSettings(devAddr: self.devAddr, dnsServer: DNSClient.Helper.dnsServer)
|
let ipAddress = try await self.providerActor.setNetworkSettings(devAddr: self.devAddr, dnsServer: SDLDNSClientActor.Helper.dnsServer)
|
||||||
|
await self.noticeClient?.send(data: NoticeMessage.ipAdress(ip: ipAddress))
|
||||||
|
|
||||||
self.startReader()
|
self.startReader()
|
||||||
} catch let err {
|
} catch let err {
|
||||||
self.logger.log("[SDLContext] setTunnelNetworkSettings get error: \(err)", level: .error)
|
self.logger.log("[SDLContext] setTunnelNetworkSettings get error: \(err)", level: .error)
|
||||||
@ -536,10 +539,10 @@ public class SDLContext {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if DNSClient.Helper.isDnsRequestPacket(ipPacket: packet) {
|
if SDLDNSClientActor.Helper.isDnsRequestPacket(ipPacket: packet) {
|
||||||
let destIp = packet.header.destination_ip
|
let destIp = packet.header.destination_ip
|
||||||
NSLog("destIp: \(destIp), int: \(packet.header.destination)")
|
self.logger.log("[DNSQuery] destIp: \(destIp), int: \(packet.header.destination)", level: .debug)
|
||||||
await self.dnsClient?.forward(ipPacket: packet)
|
await self.dnsClientActor?.forward(ipPacket: packet)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Task.detached {
|
Task.detached {
|
||||||
@ -604,7 +607,7 @@ public class SDLContext {
|
|||||||
self.rootTask?.cancel()
|
self.rootTask?.cancel()
|
||||||
self.udpHoleActor = nil
|
self.udpHoleActor = nil
|
||||||
self.superClientActor = nil
|
self.superClientActor = nil
|
||||||
self.dnsClient = nil
|
self.dnsClientActor = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取mac地址
|
// 获取mac地址
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user