HEV

Understanding Mapped DNS in HevSocks5Tunnel

· hev

HevSocks5Tunnel 是一个高性能、低开销的tun2socks开源实现,从2.13.0版本开始支持Mapped DNS功能。

项目地址: https://github.com/heiher/hev-socks5-tunnel

Mapped DNS

在使用基于Tun的透明代理工具时,Mapped DNS是一个相当有用的功能,用于解决应用程序无法直接传递域名信息给代理的问题。

传统的Tun模式下,应用程序通常只会看到IP地址,而非原始的域名。这会导致代理工具无法根据域名进行规则匹配、分流或访问控制。为了弥补这一缺陷,HevSocks5Tunnel提供了Mapped DNS功能,结合Fake IP机制来实现“IP 与域名的映射还原”。

Mapped DNS的工作机制如下:

  1. 当客户端应用程序发起域名解析请求时,Mapped DNS模块会返回一个“Fake IP”,而不是实际的目标服务器IP。
  2. 这些“Fake IP”来自一个预先定义的Fake IP地址段,这些地址在互联网上并没有对应的真实服务器,仅供代理内部使用。
  3. 后续,当客户端尝试连接这个Fake IP时,HevSocks5Tunnel会通过内部的映射表,将这个Fake IP还原为原始的域名,再通过SOCKS5代理进行转发。
  4. 这样,代理程序就能知道原始的域名,从而实现基于域名的分流、阻断、DNS劫持规避等功能。

How to Use

仅需两步即可启用Mapped DNS功能:

  1. 在HevSocks5Tunnel配置中启用Mapped DNS:
mapdns:
  # Mapped DNS address (Mapped DNS服务器地址)
  address: 198.18.0.2
  # Mapped DNS port (Mapped DNS服务器端口)
  port: 53
  # Mapped IP network base (Mapped DNS使用的Fake IP段超出地址)
  network: 240.0.0.0
  # Mapped IP network mask (Mapped DNS使用的Fake IP段的掩码地址,与起始地址共同决定了Fake IP段的地址容量)
  netmask: 240.0.0.0
  # Mapped DNS cache size (Mapped DNS内部映射缓存的容量)
  cache-size: 10000
  1. 在操作系统中默认使用Mapped DNS提供的DNS服务器地址(以Linux为例):

编辑 /etc/resolv.conf,移除现有的nameserver,并增加:

nameserver 198.18.0.2

关于mapdns.address的选择,建议采用当前系统正在使用的真实DNS地址或某个公共DNS(比如8.8.8.8),这样假设HevSocks5Tunnel意外停止,系统的DNS也能恢复与真实DNS服务的通信,不会造成网络服务的中断。