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的工作机制如下:
- 当客户端应用程序发起域名解析请求时,Mapped DNS模块会返回一个“Fake IP”,而不是实际的目标服务器IP。
- 这些“Fake IP”来自一个预先定义的Fake IP地址段,这些地址在互联网上并没有对应的真实服务器,仅供代理内部使用。
- 后续,当客户端尝试连接这个Fake IP时,HevSocks5Tunnel会通过内部的映射表,将这个Fake IP还原为原始的域名,再通过SOCKS5代理进行转发。
- 这样,代理程序就能知道原始的域名,从而实现基于域名的分流、阻断、DNS劫持规避等功能。
How to Use
仅需两步即可启用Mapped DNS功能:
- 在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
- 在操作系统中默认使用Mapped DNS提供的DNS服务器地址(以Linux为例):
编辑 /etc/resolv.conf,移除现有的nameserver,并增加:
nameserver 198.18.0.2
关于mapdns.address
的选择,建议采用当前系统正在使用的真实DNS地址或某个公共DNS(比如8.8.8.8),这样假设HevSocks5Tunnel意外停止,系统的DNS也能恢复与真实DNS服务的通信,不会造成网络服务的中断。