背景介绍

目前,我正在使用两款VPN软件:Quantumult X (QX)MotionPro Plus (MPP)

  • Quantumult X(后续简称QX,类似于Clash/Stash等VPN软件)可以使用分流策略,对接VMESS、SS等其他协议,灵活地管理网络流量。
  • MotionPro Plus(后续简称MPP)是一种企业级VPN客户端,通过网关、用户名+密码+多因素认证(MFA),并使用TLS VPN协议,建立安全隧道以访问企业内网资源。

两款VPN均会在MacOS中配置虚拟网卡、DNS服务及路由表。然而,当两者同时启用时,会出现无法分别访问各自资源的问题。


问题描述

当前DNS配置

使用scutil命令检查系统DNS配置:

scutil --dns
命令解释scutil --dns 是MacOS下用于查看系统DNS解析器配置的命令。它显示当前网络环境中的DNS优先级、接口绑定和解析器列表。

输出结果如下:

DNS configuration

resolver #1
  nameserver[0] : 10.150.0.12
  nameserver[1] : 10.150.0.89
  nameserver[2] : 198.19.0.3
  if_index : 29 (utun6)
  flags    : Supplemental, Request A records
  reach    : 0x00000002 (Reachable)
  order    : 102000

可以看出,当前DNS优先级以MPP的DNS(10.150.0.12 和 10.150.0.89)为最高。这导致访问如Google等服务时,DNS解析通过MPP的网络,无法正常访问。

问题初步判断

DNS解析顺序由优先级决定。要实现两款VPN各自资源的正常访问,需要调整DNS优先级或为特定域名指定专用DNS服务器。


解决尝试及过程

1. 调整DNS优先级(不建议通过此步骤操作,建议通过MacOs系统设置搜索DNS进行相应设置)

通过networksetup命令,将QX的DNS(198.19.0.3)设置为主DNS:

sudo networksetup -setdnsservers Wi-Fi 198.19.0.3

命令解释

  • networksetup 是管理MacOS网络设置的工具。
  • -setdnsservers Wi-Fi 198.19.0.3 将Wi-Fi接口的DNS服务器设置为QX的DNS。

结果

  • QX的资源访问恢复正常。
  • MPP资源(如example.domain)因通过QX的DNS解析,返回fake-IP,无法访问。

2. 为特定域名绑定DNS服务器

在QX的[dns]模块中,为example.domain配置解析规则,指定其使用MPP的DNS服务器:

[dns]
server=/*.example.domain/10.150.0.12

使用dig命令验证域名解析结果:

dig example.domain
命令解释dig 是一个强大的DNS查询工具,用于检查域名的解析状态和结果。

结果

example.domain.    6    IN    A    198.18.5.73

返回结果为fake-IP(198.18.5.73),无法通过MPP的路由表访问资源。


3. 使用dns_exclusion_list排除Fake-IP

尝试将example.domain加入QX的dns_exclusion_list,希望通过系统默认的DNS解析:

[dns]
dns_exclusion_list=example.domain

再次查询域名:

dig example.domain

结果

;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN

NXDOMAIN 表明域名解析失败。

4. 还原dns_exclusion_list尝试使用Fake-IP + QX内部转发到10.内网IP

查看QX日志发现:

[QTXDomainResolver] Through special DNS server 10.150.0.12 for example.domain
[QTXDomainResolver] Begin A query for example.domain
[QTXDomainResolver] Send type A query packet for example.domain to 10.150.0.12
[QTXDomainResolver] End A query for example.domain  from server 10.150.0.12 no A record, takes 0.013070 seconds

分析:

  1. QX无法通过dns_exclusion_list解析到有效IP

    • 开启dns_exclusion_list后,域名不再经过QX的[dns]配置。
  2. QX降级解析失败的尝试

    • 配置[filter] example.domain reject:返回127.0.0.1,流量被阻断。
    • 配置[dns] server=/*.example.domain/127.0.0.1使其超时降级:未成功。
  3. QX无法正常访问内网DNS服务无法进行到下一步使用Fake-IP 通过QX内部转发到10.内网IP:

    • 即使明确指定内网DNS为[dns] server=/*.example.domain/10.150.0.12,QX依然无法解析有效记录。
    • 由于内网DNS(10.150.0.12)没有响应A记录,导致解析失败。

5. 最终解决方案:手动配置hosts

example.domain手动映射到内网IP地址,跳过DNS解析:

sudo nano /etc/hosts

添加以下内容:

10.250.0.xx example.domain
命令解释nano 是终端中的文本编辑器。/etc/hosts 文件用于手动配置域名到IP地址的映射。

结果

  • 成功访问MPP资源(example.domain)。
  • 两个VPN均能正常工作,分别访问其对应资源。

收获与总结

1. DNS与流量转发的关系

  • DNS解析:将域名解析为IP地址。
  • 路由表:根据解析得到的IP地址,通过相应网关转发流量。
  • VPN隧道:通过虚拟网卡和加密隧道实现安全的数据传输。

两者结合,实现流量分流和资源访问。

2. VPN运行机制

  • Quantumult X:基于分流策略,结合虚拟网卡、路由表和DNS模块,灵活管理流量。
  • MotionPro Plus:通过内网网关和TLS协议建立安全连接,适用于企业内部资源访问。

3. 解决中的关键问题

  • QX的dns_exclusion_list机制限制:不能直接通过QX的dns模块为特定域名指定非fake-IP解析。
  • QX对内网DNS的访问限制:导致内网资源解析失败。
  • 手动配置hosts文件:有效解决了DNS优先级冲突。

4. 额外尝试

  • 配置多种DNS降级机制,探讨其可行性。
  • 排查QX对内网DNS服务访问失败的具体原因。

未来优化方向

  1. 自定义的DNS解析工具?
  2. 探索QX为何无法正常访问内网IP的DNS服务,并优化其DNS降级策略。
  3. 研究通过动态脚本实现自动化域名解析分流,减少手动配置工作。
  4. 深入了解MacOS虚拟网卡的DNS解析机制,进一步优化VPN工具间的兼容性。

通过以上调整,成功解决了两款VPN冲突的问题,确保资源访问的稳定性和灵活性。如果您也面临类似问题,希望本文的解决思路对您有所帮助。


VPN 的基础介绍与软件特性

虚拟专用网络(VPN, Virtual Private Network) 是一种通过公用网络建立加密连接的技术,能够保护数据传输安全、隐藏真实IP地址、访问受限制资源等。根据功能和实现方式不同,VPN通常分为多种类型。以下是对本次使用的两款VPN软件的详细介绍:

1. Quantumult X (QX)

Quantumult X 是一款功能强大的网络代理工具,主要用于网络分流、隐私保护和协议对接。其核心特点包括:

  • 支持多种协议:如VMess、Shadowsocks(SS)、SOCKS5等。
  • 强大的分流策略:用户可基于域名、IP地址、地域等自定义规则,将流量分配到不同的代理或直接连接。
  • DNS设置与流量控制:提供精细化的DNS模块,可为特定域名绑定DNS服务器。
  • 适用场景:适合需要跨境访问的用户,也可用于复杂网络环境中的流量优化。

QX 的运行机制:

  • 在本地创建虚拟网卡,并结合路由表实现流量转发。
  • 通过DNS解析,将域名转换为IP地址后分配到相应的代理。

2. MotionPro Plus (MPP)

MotionPro Plus 是一款企业级VPN解决方案,专注于通过加密隧道实现安全远程访问。其特点包括:

  • 网关认证:通过网关、用户名+密码以及多因素认证(MFA)确保连接安全。
  • TLS协议支持:使用安全传输层协议(TLS)保护数据通信。
  • 专属内网资源访问:适用于访问特定内网服务(如公司文件系统或内部应用)。
  • 适用场景:企业员工远程办公或访问受限制的内部资源。

MPP 的运行机制:

  • 在本地配置虚拟网卡并启动加密隧道,与指定网关建立连接。
  • 通过专属DNS和路由表,将数据流量安全地导向内网资源。

两款VPN在本次实验中的区别

特性Quantumult X (QX)MotionPro Plus (MPP)
主要用途跨境访问和流量分流安全连接企业内网
协议支持VMess、Shadowsocks、SOCKS5等TLS VPN
认证方式无需专门认证,依赖代理配置用户名+密码+MFA认证
DNS配置优先级支持多DNS配置,并允许自定义优先级默认优先级高,专注于企业内部DNS解析
适用环境复杂网络环境、多代理需求场景企业内部资源访问及安全需求

VPN的实际应用场景

  • 跨境访问:通过QX快速访问全球受限资源,如国际网站、流媒体服务等。
  • 企业远程办公:利用MPP建立安全隧道,访问公司内部系统(如CRM、ERP等)。
  • 隐私保护:两款工具均具备隐匿IP地址和加密流量的功能,在公共Wi-Fi环境中尤为重要。

命令行工具诊断网络问题

1. 查看网卡配置

在 Linux 和 macOS 系统中,使用 ifconfig 命令可以查看当前网络接口的详细配置。网卡的 IP 地址、子网掩码以及接口的状态等信息都会显示在输出中。

ifconfig

输出示例:

utun6: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 4064
    options=6460<TSO4,TSO6,CHANNEL_IO,PARTIAL_CSUM,ZEROINVERT_CSUM>
    inet 198.19.0.1 --> 198.19.0.1 netmask 0xffffff00
utun9: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1400
    options=6460<TSO4,TSO6,CHANNEL_IO,PARTIAL_CSUM,ZEROINVERT_CSUM>
    inet 10.150.73.62 --> 10.150.73.62 netmask 0xfffffc00

从中可以看到每个网络接口的 IP 地址、网络掩码以及 MTU(最大传输单元)。这些信息对定位网络连接问题非常有帮助。

2. 查询路由表

路由表定义了数据包在网络中转发的路径。在某些情况下,网络连接问题可能是由于错误的路由配置引起的。通过 route 命令,可以查看到当前的路由配置。

查询特定目标地址的路由路径:

route -n get 10.150.0.12

输出示例:

route to: 10.150.0.12
destination: 10.150.0.0
       mask: 255.255.255.0
    gateway: 10.150.73.62
  interface: utun9
      flags: <UP,GATEWAY,DONE,STATIC,PRCLONING>
 recvpipe  sendpipe  ssthresh  rtt,msec    rttvar  hopcount      mtu     expire
       0         0         0         0         0         0      1400         0 

查询默认路由:

route -n get default

输出示例:

route to: default
destination: default
       mask: default
  interface: utun6
      flags: <UP,DONE,CLONING,STATIC,GLOBAL>
 recvpipe  sendpipe  ssthresh  rtt,msec    rttvar  hopcount      mtu     expire
       0         0         0         0         0         0      4064         0 

从这些路由信息中,我们可以看到数据包会通过特定的网关和接口转发,能够帮助我们判断是否存在路由错误。

3. 路由追踪

traceroute 命令用于追踪数据包从本地计算机到达目标地址的路径。它可以帮助你分析网络中的延迟和瓶颈。

使用 traceroute 命令追踪目标地址的路由:

traceroute 10.150.50.107

输出示例:

traceroute to 10.150.50.107 (10.150.50.107), 200 hops max, 40 byte packets
 1  * * *

如果 traceroute 命令没有得到响应,可能是目标地址的防火墙阻止了 ICMP 数据包,或者网络中存在其他问题。

查询另外一个目标:

traceroute 10.150.0.12

输出示例:

traceroute to 10.150.0.12 (10.150.0.12), 200 hops max, 40 byte packets
 1  10.150.5.58 (10.150.5.58)  19.869 ms  16.813 ms  15.787 ms
 2  2.255.255.253 (2.255.255.253)  13.391 ms  15.780 ms  13.814 ms
 3  10.150.5.126 (10.150.5.126)  16.705 ms  15.134 ms  33.041 ms
 4  192.170.4.10 (192.170.4.10)  19.544 ms  21.756 ms  19.241 ms
 5  * *^X *

通过 traceroute 命令,可以清楚地看到从源主机到目标主机的数据包经过的各个节点(路由器)。如果有某一跳长时间没有响应,可以初步怀疑在该节点或之后的网络链路上存在问题。

4. DNS 服务查询

DNS 是将域名解析为 IP 地址的系统。当网络连接正常,但无法通过域名访问网站时,问题很可能出在 DNS 配置上。通过 scutil --dns 命令可以查看系统当前的 DNS 配置。

scutil --dns

输出示例:

DNS configuration

resolver #1
  nameserver[0] : 198.19.0.3
  if_index : 28 (utun9)
  flags    : Supplemental, Request A records
  reach    : 0x00000003 (Reachable,Transient Connection)
  order    : 101600

resolver #2
  nameserver[0] : 10.150.0.12
  nameserver[1] : 10.150.0.91
  nameserver[2] : 198.19.0.3
  if_index : 29 (utun6)
  flags    : Supplemental, Request A records
  reach    : 0x00000002 (Reachable)
  order    : 102000

输出中列出了所有配置的 DNS 服务器及其对应的接口信息。如果某个 DNS 服务器不可达,系统会自动尝试使用其他 DNS 服务器。通过查看这些信息,您可以确认当前 DNS 是否配置正确,是否存在 DNS 服务不可用的情况。

标签: none

添加新评论