diff --git a/app/src/main/java/org/itxtech/daedalus/provider/UdpDnsProvider.java b/app/src/main/java/org/itxtech/daedalus/provider/UdpDnsProvider.java index 950edb4..dbb94a0 100644 --- a/app/src/main/java/org/itxtech/daedalus/provider/UdpDnsProvider.java +++ b/app/src/main/java/org/itxtech/daedalus/provider/UdpDnsProvider.java @@ -11,6 +11,7 @@ import android.util.Log; import de.measite.minidns.DNSMessage; import de.measite.minidns.Record; import de.measite.minidns.record.A; +import de.measite.minidns.util.InetAddressUtil; import org.itxtech.daedalus.service.DaedalusVpnService; import org.itxtech.daedalus.util.DnsServerHelper; import org.itxtech.daedalus.util.RulesResolver; @@ -309,6 +310,7 @@ public class UdpDnsProvider extends DnsProvider { InetAddress destAddr = parsedPacket.getHeader().getDstAddr(); if (destAddr == null) return; + destAddr = InetAddressUtil.ipv4From(service.dnsServers.get(destAddr.getHostAddress())); UdpPacket parsedUdp = (UdpPacket) parsedPacket.getPayload(); diff --git a/app/src/main/java/org/itxtech/daedalus/service/DaedalusVpnService.java b/app/src/main/java/org/itxtech/daedalus/service/DaedalusVpnService.java index 70bc42c..eeea829 100644 --- a/app/src/main/java/org/itxtech/daedalus/service/DaedalusVpnService.java +++ b/app/src/main/java/org/itxtech/daedalus/service/DaedalusVpnService.java @@ -23,6 +23,7 @@ import org.itxtech.daedalus.util.DnsServerHelper; import org.itxtech.daedalus.util.RulesResolver; import java.net.Inet4Address; +import java.util.HashMap; /** * Daedalus Project @@ -56,6 +57,8 @@ public class DaedalusVpnService extends VpnService implements Runnable { private Thread mThread = null; + public HashMap dnsServers; + @Override public void onCreate() { super.onCreate(); @@ -180,15 +183,24 @@ public class DaedalusVpnService extends VpnService implements Runnable { } catch (IllegalArgumentException e) { continue; } - format = prefix; + + format = prefix + ".%d"; break; } boolean advanced = Daedalus.getPrefs().getBoolean("settings_advanced_switch", false); statisticQuery = Daedalus.getPrefs().getBoolean("settings_count_query_times", false); Log.d(TAG, "tun0 add " + format + " pServ " + primaryServer + " sServ " + secondaryServer); - Inet4Address primaryDNSServer = InetAddressUtil.ipv4From(primaryServer); - Inet4Address secondaryDNSServer = InetAddressUtil.ipv4From(secondaryServer); + + dnsServers = new HashMap<>(); + String aliasPrimary = String.format(format, dnsServers.size() + 1); + dnsServers.put(aliasPrimary, primaryServer); + String aliasSecondary = String.format(format, dnsServers.size() + 1); + dnsServers.put(aliasSecondary, secondaryServer); + + Inet4Address primaryDNSServer = InetAddressUtil.ipv4From(aliasPrimary); + Inet4Address secondaryDNSServer = InetAddressUtil.ipv4From(aliasSecondary); + Log.d(TAG, "listening on " + format + " pServ " + primaryDNSServer.getHostAddress() + " sServ " + secondaryDNSServer.getHostAddress()); builder.setSession("Daedalus") .addDnsServer(primaryDNSServer) .addDnsServer(secondaryDNSServer)