DNS Host Mapper VPN is an Android app that acts like a mobile hosts file by intercepting DNS queries through a local VpnService.
It lets you:
- map custom domains to IPv4 addresses (for example
hasan.local -> 192.168.6.5) - use custom upstream DNS servers (for example
217.218.155.155) - answer local mapped domains directly
- forward non-mapped domains to upstream DNS with fallback behavior
- announce
.localentries over mDNS on the LAN
Android does not provide a system-wide editable hosts file for normal apps.
This project provides a user-space alternative by:
- creating a local VPN tunnel
- capturing DNS packets sent by apps
- responding locally for mapped domains
- forwarding other domains to configured upstream resolvers
- Add/Edit/Delete domain to IPv4 rules
- Rule persistence via
SharedPreferences - Custom DNS server management
- mDNS support for
.localdomains - DNS response cache with TTL-aware behavior
- Upstream resolver cooldown/fallback logic
- Verbose DNS trace logging (
DNS_HOST_MAP_TRACE)
app/src/main/java/com/example/etc/MainActivity.kt: Main UI, rule/DNS management, VPN start/stop/state sync.app/src/main/java/com/example/etc/data/HostRuleStore.kt: Stores rules, custom DNS servers, and VPN running state.app/src/main/java/com/example/etc/vpn/HostsVpnService.kt: Core VPN tunnel loop and DNS packet handling.app/src/main/java/com/example/etc/vpn/UpstreamDnsResolver.kt: Upstream DNS querying, candidate selection, cooldown, caching.app/src/main/java/com/example/etc/vpn/MdnsLocalResponder.kt: mDNS listener/announcer for.localentries.app/src/main/java/com/example/etc/vpn/DnsPacketCodec.kt: DNS parse/build helpers (A/AAAA/PTR/HTTPS/etc).
./gradlew :app:assembleDebug- Install and open app.
- Add mapping (example):
: Domain:
hasan.local: IPv4:192.168.6.5 - Optionally add custom DNS server:
:
217.218.155.155 - Tap
START VPN. - Test from network tools/browser:
:
hasan.local,zarebin.ir,soft98.ir
- Ensure Android Private DNS is disabled if interception is bypassed.
- Keep VPN running while testing mapped domains.
- Check
logcattag:DNS_HOST_MAP_TRACE. - If mapped
.localfails on some clients, verify mDNS traffic on LAN and that multicast is available.
No license file is currently included in this repository.




