2024年12月

背景介绍

目前,我正在使用两款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 服务不可用的情况。

Mac 应用工具分类整理

本文整理了一系列常用的 Mac 应用程序,按照不同类别进行了分类,并标注了其主要作用及官方网站。


开发工具

应用名称主要作用官方网站
ApifoxAPI 文档管理、接口调试和测试工具Apifox 官网
PostmanAPI 开发与测试Postman 官网
IntelliJ IDEA CEJava IDEIntelliJ IDEA 官网
PyCharm CEPython IDEPyCharm 官网
DBeaver数据库管理工具DBeaver 官网
Sublime Text文本编辑器Sublime Text 官网
TyporaMarkdown 文档编辑器Typora 官网
VS Code轻量级代码编辑器VS Code 官网
Git版本控制工具Git 官网
SoapUIWeb 服务测试工具SoapUI 官网
SourcetreeGit 图形化管理工具Sourcetree 官网
JProfilerJava 性能分析工具JProfiler 官网
ZenTermLite轻量化终端工具无官方网站,基于社区开发。

网络与运维工具

应用名称主要作用官方网站
Docker容器化工具Docker 官网
SecureCRTSSH 远程连接SecureCRT 官网
Wireshark网络抓包工具Wireshark 官网
Apache JMeter性能测试工具JMeter 官网
TunnelblickVPN 客户端Tunnelblick 官网
Tabby终端模拟器Tabby 官网
SwitchHosts快速切换 Hosts 文件SwitchHosts 官网
FinalShellSSH 连接与管理工具FinalShell 官网
XmanagerWindows 系统下的图形化远程桌面管理Xmanager 官网

数据分析工具

应用名称主要作用官方网站
Navicat Premium数据库管理与开发Navicat 官网
Memory Analyzer (MAT)Java 堆分析工具MAT 官网
Offset Explorer 2Kafka 数据流监控Offset Explorer 官网

通信与远程协作

应用名称主要作用官方网站
TeamViewer远程桌面连接工具TeamViewer 官网
Zoom视频会议Zoom 官网
Microsoft Remote Desktop Beta微软远程桌面连接Microsoft 官网
ToDesk远程协作工具ToDesk 官网
Linphone开源 VoIP 通信工具Linphone 官网

浏览器与办公工具

应用名称主要作用官方网站
Google Chrome浏览器Chrome 官网
Microsoft Edge浏览器Edge 官网
Adobe Acrobat ReaderPDF 阅读器Adobe 官网
Microsoft Office办公套件(Word、Excel、PowerPoint)Office 官网
Anaconda Navigator数据科学与 Python 开发环境管理工具Anaconda 官网

文件管理与效率工具

应用名称主要作用官方网站
TransmitFTP 文件传输工具Transmit 官网
ClashX Pro网络代理客户端ClashX 官网
EasyConnect企业 VPN 工具EasyConnect 官网
Cursor提升工作效率的快捷工具Cursor 官网
Quantumult X网络代理与规则配置Quantumult 官网
V2rayU网络代理客户端V2rayU 官网
Maccy剪贴板管理工具Maccy 官网
Snipaste截图小工具(可钉在桌面)Snipaste 官网
uTools高效工具集插件平台uTools 官网
Draw.io绘图与流程图工具Draw.io 官网

说明: 以上分类及应用整理基于实际功能划分,帮助您快速找到所需工具。根据需求选择最适合的应用!